Rについて
をベースに学んでいく。
3. データの演算と固有値、基本統計量
3.1 データの演算
主な算術演算子は以下の通りである。では以下の算術演算はベクトル、データフレームおよび行列に対しても有効である。
名称 |
記号 |
例 |
結果 |
|
加算 |
||||
減算 |
||||
乗算 |
||||
除算 |
||||
冪乗 |
||||
商 |
||||
余り |
3.1.2 比較演算子
名称 |
記号 |
例 |
結果 |
|
より大きい |
||||
以上 |
||||
未満 |
||||
以下 |
||||
等しい |
||||
等しくない |
x <- c(1,2,3,4); y <- c(4,2,3,1) # 同一行で複数の独立したコマンドを行うには「;」で区切る x > y # 対応する成分ごとに>が適用される
3.1.4 行列の演算
A <- matrix(c(1,2,1,4),2,2) D <- matrix(c(4,2,3,4),2,2) # 行列に対してただの積をすると各成分の積を返す A * D # 行列の意味での乗算は%*%で行う A %*% D # 対角行列を生成する diag(c(6,7,3)) # 逆行列を計算する A_inv <- solve(A) A_inv A %*% A_inv # 2×2単位行列が返ってくる A_inv %*% A # 2×2単位行列が返ってくる
3.2 固有値と特異値分解
についてを満たすようなについて
を満たすようなが存在するとき、を固有値、を固有ベクトルという。正方行列を固有値および固有ベクトルに分解することを固有値分解という。
また正方行列とは限らない行列に対してユニタリ行列およびの固有値でに対してを用いて
と分解できるとき、この分解を特異値分解という。
##################### ### Aの固有値分解 ### ##################### A <- matrix(c(1,2,1,4),2,2) eigen(A) eigen(A)$vectors eigen(A)$values # AX=lambdaXの成立を確認する abs(A %*% eigen(A)$vectors - eigen(A)$vectors %*% diag(eigen(A)$values)) ##################### ### Dの特異値分解 ### ##################### # U・D・t(V) D <- matrix(c(4,2,3,4,2,1),2,3) D_svd <- svd(D) diag(D_svd$d) D_svd$u D_svd$v # 元の行列を再現できるか確認する abs(D - D_svd$u %*% diag(D_svd$d) %*% t(D_svd$v)) # 転置はt()
3.3 基本統計量
統計量を計算する際の基本的な関数を以下に示す。
関数名 |
説明と例 |
|
総和を返す。 | ||
平均値を返す。 | ||
重み付き平均値を返す。 | ||
最大値を返す。 | ||
最小値を返す。 | ||
範囲(最大値-最小値)を計算できるようにベクトル(最小値,最大値)を返す。 | ||
中央値を返す。 | ||
標本分散を返す。 | ||
標本誤差(の正の平方根)を返す。 | ||
共分散(または分散共分散行列)を返す。 | ||
相関係数(または相関行列)を返す。 | ||
分位数を返す。 | ||
最小・最大値、四分位数、平均を返す。 | ||
四分位偏差(第3四分位-第1四分位)を返す。 | ||
最小値・下側ヒンジ・中央値・上側ヒンジ・最大値を返す。 | ||
引数として与えた関数を行列・データフレームの行、列または各成分に適用させる。 | ||
因子別に引数で与えた統計量(デフォルトは)を返す。 | ||
引数として与えたベクトルを規格化したベクトルを返す。 |
- 第1四分位・第3四分位:下側点および下側点を指す。
- ヒンジ:中央値よりも大きい標本の中央値を上側ヒンジ、中央値よりも小さい標本の中央値を下側ヒンジという。
######################## ### 統計量を計算する ### ######################## # 標本を作成する vc <- 1:10 # 総和を取る sum(vc) # 算術平均を計算する vc_mean <- mean(vc) # 重み付き平均を計算する vc_weight <- 1/vc # 重みはvcの逆数とする vc_weight <- vc_weight/sum(vc_weight) vc_weighted_mean <- weighted.mean(vc,vc_weight) # 最大値・最小値 max(vc) min(vc) # 範囲 range(vc) c(min(vc), max(vc)) # 中央値 median(vc) # 標本分散 var(vc) sum((vc - vc_mean)^2)/(length(vc) - 1) # 不偏分散が欲しければvar(vc) *(length(vc)-1)/length(vc) # 共分散・相関行列 data(iris) cov(iris[,-5]) cor(iris[,-5]) # パーセント点 quantile(vc,probs = 0.25) # 要約統計量 summary(vc) # 四分位偏差 IQR(vc) quantile(vc,probs = 0.75) - quantile(vc,probs = 0.25) # 最小値・下側ヒンジ・中央値・上側ヒンジ・最大値を返す vc_fivenum1 <- fivenum(vc) vc_fivenum2 <- c(min(vc),median(vc[vc<median(vc)]),median(vc),median(vc[vc>median(vc)]),max(vc)) abs(vc_fivenum1 - vc_fivenum2) # 絶対誤差 abs(vc_fivenum1 - vc_fivenum2)/vc_fivenum2 # 相対誤差 # apply関数 mt_repeat <- as.matrix(data.frame(vc,vc,vc,vc,vc,vc)) apply(mt_repeat,2,mean) # 第1引数:適用対象,第2引数:行は1,列は2,各成分はc(1,2),第3引数:適用関数 # 因子別に統計量を元の標本サイズ分だけ繰り返したベクトルを返す ave(vc, FUN = mean) # 規格化する vc_scaled1 <- as.vector(scale(vc)) vc_scaled2 <- (vc - mean(vc))/sd(vc) abs(vc_scaled1 - vc_scaled2) # 絶対誤差 abs(vc_scaled1 - vc_scaled2)/vc_scaled2 # 相対誤差