「大人の教養・知識・気付き」を伸ばすブログ

一流の大人(ビジネスマン、政治家、リーダー…)として知っておきたい、教養・社会動向を意外なところから取り上げ学ぶことで“気付く力”を伸ばすブログです。データ分析・語学に力点を置いています。 →現在、コンサルタントの雛になるべく、少しずつ勉強中です(※2024年1月21日改訂)。

MENU

Rによるデータサイエンス(02/21)

 Rについて

をベースに学んでいく。

3. データの演算と固有値、基本統計量

3.1 データの演算

 主な算術演算子は以下の通りである。\mathrm{R}では以下の算術演算はベクトル、データフレームおよび行列に対しても有効である。

  
名称
記号
結果
  
加算
\mathrm{+}
3+2
5
  
減算
\mathrm{-}
3-2
1
  
乗算
\mathrm{*}
3*2
6
  
除算
\mathrm{/}
3/2
1.5
  
冪乗
\hat{}
2^3
8
  
\mathrm{\%/\%}
5\%/\%2
2
  
余り
\mathrm{\%\%}
5\%\%2
1
3.1.1 算術演算子の優先順位

 算術演算の優先順位は以下の通りである:

  1. 括弧(()
  2. 冪乗(\hat{}
  3. 除算の商と余り(\%/\%,\%\%
  4. 乗算と除算(*,/
  5. 加算・減算(+,-
3.1.2 初等関数
  
関数名
説明と例
  
\mathrm{abs}
絶対値    \mathrm{abs}(-2)=2
  
\mathrm{exp}
自然対数   \exp(1)\approx2.718
  
\mathrm{sqrt}
平方根    \mathrm{sqrt}(4)=\sqrt{4}=2
  
\mathrm{log}
自然対数   \mathrm{log(\mathrm{exp}(1))}=1
  
\mathrm{log10}
常用対数   \mathrm{log10}(10)=1
  
\mathrm{round}
四捨五入   \mathrm{round}(3,1415,3)=3.142
  
\mathrm{cos},\mathrm{sin},\mathrm{tan}
三角関数   \mathrm{cos}(\pi)=-1
  
\mathrm{acos},\mathrm{asin},\mathrm{atan}
三角関数  \mathrm{acos}(1)=0
3.1.2 比較演算子
  
名称
記号
結果
  
より大きい
\gt
3\gt2
\mathrm{TRUE}
  
以上
\geq
3\geq4
\mathrm{FALSE}
  
未満
\lt
3\lt2
\mathrm{FALSE}
  
以下
\leq
3\leq4
\mathrm{TRUE}
  
等しい
==
3==4
\mathrm{FALSE}
  
等しくない
!=
3!=4
\mathrm{TRUE}
x <- c(1,2,3,4); y <- c(4,2,3,1) # 同一行で複数の独立したコマンドを行うには「;」で区切る
x > y # 対応する成分ごとに>が適用される


3.1.3 論理演算子
  
名称
記号
結果
  
否定(\mathrm{NOT})
!
!(F)
\mathrm{TRUE}
  
積(\mathrm{AND})
&
T&T
\mathrm{TRUE}
  
積(\mathrm{AND})
&&
T&&T
\mathrm{TRUE}
  
和(\mathrm{OR})
Ι
TΙF
\mathrm{TRUE}
  
和(\mathrm{OR})
ΙΙ
TΙΙF
\mathrm{TRUE}
  
\mathrm{xor}
\mathrm{xor}(T,T)
\mathrm{FALSE}
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\in\mathbb{C}^{n\times n}についてA\neq O\lor\boldsymbol{X}\neq\boldsymbol{0}を満たすような\boldsymbol{X}\in\mathbb{C}^nについて


\begin{aligned}
A\boldsymbol{X}=\lambda\boldsymbol{X}
\end{aligned}

を満たすような\lambda\in\mathbb{C}が存在するとき、\lambda固有値\boldsymbol{X}固有ベクトルという。正方行列を固有値および固有ベクトルに分解することを固有値分解という。
 また正方行列とは限らない行列B\in\mathbb{C}^{n\times p}に対してユニタリ行列U,VおよびB固有値\lambda_1\geq \lambda_2\geq\cdots\geq \lambda_r(r\leq\min(n,p) )に対してD_{\lambda}=\mathrm{diag}(\lambda_1,\cdots,\lambda_r)を用いて


\begin{aligned}
B=UD_{\lambda}{}^{t}V
\end{aligned}

と分解できるとき、この分解を特異値分解という。

#####################
### 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 基本統計量

 統計量を計算する際の基本的な関数を以下に示す。

  
関数名
説明と例
  
\mathrm{sum}
総和を返す。
  
\mathrm{mean}
平均値を返す。
  
\mathrm{weighted.mean}
重み付き平均値を返す。
  
\mathrm{max}
最大値を返す。
  
\mathrm{min}
最小値を返す。
  
\mathrm{range}
範囲(最大値-最小値)を計算できるようにベクトル(最小値,最大値)を返す。
  
\mathrm{median}
中央値を返す。
  
\mathrm{var}
標本分散\left(\displaystyle{\frac{1}{n-1}}\sum_{i=1}^{n}(X_i-\bar{X})^2\right)を返す。
  
\mathrm{sd}
標本誤差(\mathrm{var}の正の平方根)を返す。
  
\mathrm{cov}
共分散(または分散共分散行列)を返す。
  
\mathrm{cor}
相関係数(または相関行列)を返す。
  
\mathrm{quantile}
分位数を返す。
  
\mathrm{summary}
最小・最大値、四分位数、平均を返す。
  
\mathrm{IQR}
四分位偏差(第3四分位-第1四分位)を返す。
  
\mathrm{fivenum}
最小値・下側ヒンジ・中央値・上側ヒンジ・最大値を返す。
  
\mathrm{apply}
引数として与えた関数を行列・データフレームの行、列または各成分に適用させる。
  
\mathrm{ave}
因子別に引数で与えた統計量(デフォルトは\mathrm{mean})を返す。
  
\mathrm{scale}
引数として与えたベクトルを規格化したベクトルを返す。
  • 第1四分位・第3四分位:下側25\%点および下側75\%点を指す。
  • ヒンジ:中央値よりも大きい標本の中央値を上側ヒンジ、中央値よりも小さい標本の中央値を下側ヒンジという。
########################
### 統計量を計算する ###
########################

# 標本を作成する
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 # 相対誤差

補足 スペック情報

エディション Windows 10 Home
バージョン 20H2
プロセッサ Intel(R) Core(TM) i5-1035G4 CPU @ 1.10GHz 1.50 GHz
実装 RAM 8.00 GB
システムの種類 64 ビット オペレーティング システム、x64 ベース プロセッサ
R バージョン 3.6.3 (2020-02-29)
RStudio バージョン 1.2.5033
プライバシーポリシー お問い合わせ