R 相関係数

2つの変数同士の関係について。

データは、『Rによるやさしい統計学https://www.amazon.co.jp/dp/4274067106 3章から。

勉強する内容

  • 共分散の問題点: 大きさが測定単位に依存
  • 相関係数: 共分散を2変数の標準偏差の積で割る
  • cor(): 相関係数
  • 相関係数は共分散の分母がnの時もn-1のときも同じ値になる
  • 相関係数の最大値: 1
  • 相関係数は2変数の相関関係が強いほど絶対値は大きくなる
  • 相関係数の大きさの評価 同書「表3.1」参照

相関係数

相関係数を  {r_{xy}} 、右辺の分子が共分散、分母がそれぞれ変数xとyの標準偏差であるとき

 \displaystyle
r_{xy} = \frac{s_{xy}}{s_x s_y}

と表すことができる。

s_test1 <- c(6,10,6,10,5,3,5,9,3,3,11,6,11,9,7,5,8,7,7,9)
s_test2 <- c(10,13,8,15,8,6,9,10,7,3,18,14,18,11,12,5,7,12,7,7)
p_test1 <- c(13,14,7,12,10,6,8,15,4,14,9,6,10,12,5,12,8,8,12,15)
# 相関係数
cov(s_test1,s_test2) / (sd(s_test1) * sd(s_test2))
# 相関係数 関数を用いた場合
cor(s_test1,s_test2)
cor(p_test1,s_test1)
cor(p_test1,s_test2)

実行結果

> s_test1 <- c(6,10,6,10,5,3,5,9,3,3,11,6,11,9,7,5,8,7,7,9)
> s_test2 <- c(10,13,8,15,8,6,9,10,7,3,18,14,18,11,12,5,7,12,7,7)
> p_test1 <- c(13,14,7,12,10,6,8,15,4,14,9,6,10,12,5,12,8,8,12,15)
> cov(s_test1,s_test2) / (sd(s_test1) * sd(s_test2))
[1] 0.749659
> cor(s_test1,s_test2)
[1] 0.749659
> cor(p_test1,s_test1)
[1] 0.3826645
> cor(p_test1,s_test2)
[1] -0.09350516

R 散布図、共分散

2つの変数同士の関係について。

データは、『Rによるやさしい統計学https://www.amazon.co.jp/dp/4274067106 3章から。

勉強する内容

  • 相関: 量的変数同士の関係
  • 連関: 質的変数同士の関係
  • 正の相関: 散布図を描いて右上がりの傾向
  • 負の相関: 散布図を描いて右下がりの傾向
  • 無相関
  • plot(): 散布図
  • 相関係数: 相関の強さの程度を表す数値
  • 共分散: 「偏差の積の平均」
  • cov(): 共分散(不偏共分散)

共分散 Covariance

{ \displaystyle
s_{xy} =\frac{ ( x_1 - \bar{x} )( y_1 - \bar{y} ) + ( x_2 - \bar{x} )( y_2 - \bar{y}) + \cdots + ( x_n - \bar{x} )( y_n - \bar{y}) }{n}
}

すなわち、

{ \displaystyle
s_{xy} = \frac{1}{n}  \sum_{i=1}^{n} ( x_i - \bar{x} )( y_i - \bar{y} )
}

Rのプログラミング

s_test1 <- c(6,10,6,10,5,3,5,9,3,3,11,6,11,9,7,5,8,7,7,9)
s_test2 <- c(10,13,8,15,8,6,9,10,7,3,18,14,18,11,12,5,7,12,7,7)
p_test1 <- c(13,14,7,12,10,6,8,15,4,14,9,6,10,12,5,12,8,8,12,15)

# 散布図を描く
png("plot3-1.png", width = 500, height = 500)
plot(s_test1,s_test2)
dev.off() 

png("plot3-2.png", width = 500, height = 500)
plot(p_test1,s_test1)
dev.off() 

png("plot3-3.png", width = 500, height = 500)
plot(p_test1,s_test2)
dev.off() 
# 共分散(nで割った場合)
covariance_1_2 <- sum((s_test1 - mean(s_test1)) * (s_test2 - mean(s_test2))) / length(s_test1)
covariance_1_2
# 共分散(nで割った場合)別の求め方
covariance_1_2<- mean((s_test1 - mean(s_test1)) * (s_test2 - mean(s_test2)))
covariance_1_2
# 共分散(n-1で割った場合)
cov(s_test1,s_test2)
# 共分散(nで割った場合)別の求め方
cov(s_test1,s_test2) *  (length(s_test1)-1)/ length(s_test1)

実行結果

> 
> s_test1 <- c(6,10,6,10,5,3,5,9,3,3,11,6,11,9,7,5,8,7,7,9)
> s_test2 <- c(10,13,8,15,8,6,9,10,7,3,18,14,18,11,12,5,7,12,7,7)
> p_test1 <- c(13,14,7,12,10,6,8,15,4,14,9,6,10,12,5,12,8,8,12,15)
> 
> png("plot3-1.png", width = 500, height = 500)
> plot(s_test1,s_test2)
> dev.off() 
pdf 
  2 
> 
> png("plot3-2.png", width = 500, height = 500)
> plot(p_test1,s_test1)
> dev.off() 
pdf 
  2 
> 
> png("plot3-3.png", width = 500, height = 500)
> plot(p_test1,s_test2)
> dev.off() 
pdf 
  2 
> covariance_1_2 <- sum((s_test1 - mean(s_test1)) * (s_test2 - mean(s_test2))) / length(s_test1)
> covariance_1_2
[1] 7.55
> covariance_1_2<- mean((s_test1 - mean(s_test1)) * (s_test2 - mean(s_test2)))
> covariance_1_2
[1] 7.55
> cov(s_test1,s_test2)
[1] 7.947368
> cov(s_test1,s_test2) *  (length(s_test1)-1)/ length(s_test1)
[1] 7.55
> 

f:id:momozuka:20170208153523p:plain

f:id:momozuka:20170208153530p:plain

f:id:momozuka:20170208153537p:plain

R 平均偏差、範囲(レンジ)、標準化

勉強する内容

  • 平均偏差: 平均からの偏差の絶対値の平均
  • abs() : 絶対値
  • 範囲(レンジ): 最大値から最小値をひいたもの
  • 標準化: 平均と標準偏差がある特定の値になるように、すべてのデータの値を同じ式を使って変換
  • z得点: 平均0、標準偏差1になるように変換した標準得点

データは、『Rによるやさしい統計学https://www.amazon.co.jp/dp/4274067106 2章から。

平均偏差

{ \displaystyle
\frac{ 1 }{ n } \sum_{ i = 1 }^{ n } \mid x_i - \bar{ x } \mid
}

レンジ

 { X = \{  x_1, x_2, \cdots , x_n \} } のとき

{ \displaystyle
R = max(X) - min(X)
}

z得点 (平均が  {\bar{x} } 標準偏差 { s } のとき)

{ \displaystyle
Z = \frac{X - \bar{x} }{s}
}

test_a <- c(10,13,8,15,8)
test_a - mean(test_a)
abs(test_a - mean(test_a))
mean(abs(test_a - mean(test_a)))

max(test_a)
min(test_a)
max(test_a) - min(test_a)

psychological_test <- c(13,14,7,12,10,6,8,15,4,14,9,6,10,12,5,12,8,8,12,15)
# 心理テスト平均
mean(psychological_test)
# 参考:心理テスト不偏分散
var(psychological_test)
# 心理テスト標本分散
psy_hyouhonbunsan <- var(psychological_test) * (length(psychological_test)-1) / length(psychological_test)
# 参考:標準偏差
sd(psychological_test)
# 心理テスト標本分散の標準偏差
psy_hyoujunhensa <- sqrt(psy_hyouhonbunsan)
psy_hyoujunhensa
psy_z_tokuten <- (psychological_test - mean(psychological_test)) / psy_hyoujunhensa
psy_z_tokuten
# 心理学z得点平均
mean(psy_z_tokuten)
# 心理学z得点の標準偏差
sqrt(mean((psy_z_tokuten - mean(psy_z_tokuten))^2))

実行結果

> test_a <- c(10,13,8,15,8)
> test_a - mean(test_a)
[1] -0.8  2.2 -2.8  4.2 -2.8
> abs(test_a - mean(test_a))
[1] 0.8 2.2 2.8 4.2 2.8
> mean(abs(test_a - mean(test_a))) #平均偏差
[1] 2.56
> max(test_a)
[1] 15
> min(test_a)
[1] 8
> max(test_a) - min(test_a) #範囲(レンジ)
[1] 7
> 
> 
> psychological_test <- c(13,14,7,12,10,6,8,15,4,14,9,6,10,12,5,12,8,8,12,15)
> mean(psychological_test)
[1] 10
> var(psychological_test) #参考までに不偏分散
[1] 11.68421
> psy_hyouhonbunsan <- var(psychological_test) * (length(psychological_test)-1) / length(psychological_test)
> sd(psychological_test) #参考までに不偏分散の標準偏差
[1] 3.418217
> psy_hyoujunhensa <- sqrt(psy_hyouhonbunsan)
> psy_hyoujunhensa
[1] 3.331666
> psy_z_tokuten <- (psychological_test - mean(psychological_test)) / psy_hyoujunhensa
> psy_z_tokuten
 [1]  0.9004503  1.2006005 -0.9004503  0.6003002  0.0000000 -1.2006005
 [7] -0.6003002  1.5007506 -1.8009007  1.2006005 -0.3001501 -1.2006005
[13]  0.0000000  0.6003002 -1.5007506  0.6003002 -0.6003002 -0.6003002
[19]  0.6003002  1.5007506
> mean(psy_z_tokuten)
[1] -2.753874e-18 #実質0
> sqrt(mean((psy_z_tokuten - mean(psy_z_tokuten))^2))
[1] 1
> 

はてなブログのMarkdown記法で数式を入力する

うまく入力できないので、先達の記事を読んで入力方法をまとめる。

参考にしたサイト

使い方。

  • MathJaxを使う。

ブロック要素の場合

http://www.f-sp.com/entry/2016/08/07/182629 によると

[tex: \displaystyle
  \sum_{n=0}^{\infty} \frac{f^{(n)}(a)}{n!} (x-a)^{n}
]

実行結果

 \displaystyle
  \sum_{n=0}^{\infty} \frac{f^{(n)}(a)}{n!} (x-a)^{n}

http://auewe.hatenablog.com/entry/2014/05/10/050403 によると

[tex:{ \displaystyle
b_n = \sum_{m=0}^{N-1} a_m
}]

実行結果

{ \displaystyle
b_n = \sum_{m=0}^{N-1} a_m
}

インライン要素の場合

http://www.kegamin.com/entry/20151111/1447201914 によると

[tex: {\theta_0}]と[tex: {\theta_1}]は同時(simultaneous)に更新する

実行結果

 {\theta_0} {\theta_1}は同時(simultaneous)に更新する

その他

R 不偏分散 標本分散 標準偏差

データは、『Rによるやさしい統計学https://www.amazon.co.jp/dp/4274067106 2章から。

勉強する内容

  • var() : 不偏分散 (データの個数-1で割る)
  • sd() : 標準偏差

不偏分散

{\displaystyle
\frac{1}{n-1} \sum_{i=1}^{n} (x_i - \bar{x}) ^2
}

標準偏差

{
\displaystyle
s = \sqrt{\mbox{不偏分散} }
}

test_a <- c(10,13,8,15,8)
var(test_a) 
variance <- var(test_a)  
sample_variance <- variance * (length(test_a) - 1) / length(test_a) 
sample_variance
sd(test_a)
sqrt(sd(test_a)^2 * (length(test_a) - 1) / length(test_a)) 

実行結果

> test_a <- c(10,13,8,15,8)
> var(test_a) #不偏分散
[1] 9.7
> variance <- var(test_a)
> sample_variance <- variance * (length(test_a) - 1) / length(test_a) #標本分散
> sample_variance
[1] 7.76
> sd(test_a)
[1] 3.114482
> sqrt(sd(test_a)^2 * (length(test_a) - 1) / length(test_a)) 
[1] 2.785678
> 

R 代表値 分散 標準偏差

Rによるやさしい統計学 https://www.amazon.co.jp/dp/4274067106 2章から。

代表値

代表値とは、分布の中心的位置を示す、そのデータを代表する値のこと

勉強する内容

  • 平均値: 分布の中心的位置を示す、そのデータを代表する値
  • sum(): 合計
  • length(): データの個数
  • mean(): 平均
  • 中央値: データを大きさの順に並べた場合、真ん中に位置する値
  • table(): 度数分布
  • 最頻値: 最も頻繁に観測される値。Rには最頻値を求める関数はない。
test_a <- c(10,13,8,15,8)
sum(test_a)
sum(test_a)/length(test_a)
mean(test_a)
table(test_a)
> test_a <- c(10,13,8,15,8)
> sum(test_a)
[1] 54
> sum(test_a)/length(test_a)
[1] 10.8
> mean(test_a)
[1] 10.8
> table(test_a)
test_a
 8 10 13 15 
 2  1  1  1 
> 

平均を数式で表すと

{ \displaystyle
\bar{x} = \frac{x_1 + x_2 + \cdots + x_n}{n}
}

分散 標準偏差

データを x_1,x_2,\cdots ,x_n 、データの平均を \mu としたとき、 分散を式で表すと

{\displaystyle
\mbox{分散} = \frac{(x_1 - \mu) ^2 + (x_2 - \mu) ^2 + \cdots + (x_n - \mu) ^2 }{ n }
}

テキスト通りにやってみる。

test_a <- c(10,13,8,15,8)
test_a_heikin <- mean(test_a)
heikin_karano_hensa <- test_a - test_a_heikin
heikin_karano_hensa
heikin_karano_hensano_nijou <- heikin_karano_hensa^2 
heikin_karano_hensano_nijou
heikin_karano_hensano_nijou_wa <- sum(heikin_karano_hensano_nijou)
heikin_karano_hensano_nijou_wa
data_suu <- length(test_a)
data_suu
bunsan <- heikin_karano_hensano_nijou_wa/data_suu
bunsan 
sqrt(bunsan)

実行結果

> test_a <- c(10,13,8,15,8)
> test_a_heikin <- mean(test_a)
> heikin_karano_hensa <- test_a - test_a_heikin
> heikin_karano_hensa
[1] -0.8  2.2 -2.8  4.2 -2.8
> heikin_karano_hensano_nijou <- heikin_karano_hensa^2 
> heikin_karano_hensano_nijou
[1]  0.64  4.84  7.84 17.64  7.84
> heikin_karano_hensano_nijou_wa <- sum(heikin_karano_hensano_nijou)
> heikin_karano_hensano_nijou_wa
[1] 38.8
> data_suu <- length(test_a)
> data_suu
[1] 5
> bunsan <- heikin_karano_hensano_nijou_wa/data_suu #分散
> bunsan
[1] 7.76
> sqrt(bunsan) #標準偏差
[1] 2.785678

R データの視覚的表現

Rによるやさしい統計学 https://www.amazon.co.jp/dp/4274067106 2章から。

勉強する内容

  • 変数に代入する。代入は<-を用いる。
  • カウントするにはtable関数を用いる。
  • ヒストグラムを描くにはhist()を用いる。
> Method_of_teaching <- c("C","B","B","A","B","C","A","D","D","D","A","A","A","C","B","D","C","C","B","D")
> Method_of_teaching
 [1] "C" "B" "B" "A" "B" "C" "A" "D" "D" "D" "A" "A" "A" "C" "B" "D" "C" "C" "B"
[20] "D"
> tab   (補完機能がある)
table     tabulate  
> table(Method_of_teaching)
Method_of_teaching
A B C D 
5 5 5 5 

> psychological_test <- c(13,14,7,12,10,6,8,15,4,14,9,6,10,12,5,12,8,8,12,15)
> psychological_test
 [1] 13 14  7 12 10  6  8 15  4 14  9  6 10 12  5 12  8  8 12 15
> hist(psychological_test)
> 

ファイルRplots.pdfは作業ディレクトリに作成されたが、0byteで中身がなかった。 そこで、グラフの描画スペースの高さと幅を指定して、今度はpng形式でグラフを作成してみた。

> png("plot1.png", width = 500, height = 500)
> hist(psychological_test)
> dev.off() 
pdf 
  2 
> 

なお、pngをpdfに変更してPDFファイルを作成したところ、文字が出力されなかった。

f:id:momozuka:20170201015557p:plain