2011年4月23日土曜日

R入門08

2つの変数の記述統計

国語の点数が高いほど、英語の点数が高い傾向がある

・・・量的変数どうしの関係=相関

質的変数どうしの関係=連関

 

散布図の描写

Image125

a<-c(・・・・・)

b<-c(・・・・・)

plot(a,b)

 

共分散

・・・偏差の積の平均(此処で言う偏差とは平均からの偏差)

> sum((a-mean(a))*(b-mean(b)))/length(a)
[1] 7.55

または

> mean((a-mean(a))*(b-mean(b)))
[1] 7.55

一発出る関数はcov

> cov(a,b)
[1] 7.947368

しかしながら、これは先ほど求めた共分散と微妙に値が異なっている。

これは先程のようにnで割るか、n-1で割るかで差が出てくるから。

不偏共分散

 

共分散=不偏共分散*n-1/n

> cov(a,b)*(length(a)-1)/length(a)
[1] 7.55

 

今度は身長と体重で共分散その様子を見てみる。

> m<-c(1.5,1.6,1.7,1.8,1.9)
> cm<-m*100
> k<-c(50,70,60,80,90)
> cov(cm,k)
[1] 225
> cov(m,k)
[1] 2.25

 

相関係数

rxy=sxy/sxsy

> a
[1]  6 10  6 10  5  3  5  9  3  3 11  6 11  9  7  5  8  7  7  9
> b
[1] 10 13  8 15  8  6  9 10  7  3 18 14 18 11 12  5  7 12  7  7
> cov(a,b)/(sd(a)*sd(b))
[1] 0.749659

こいつを一発で出す関数はcor()

> cor(a,b)
[1] 0.749659

無相関に近づくと相関係数は0に近づく。

相関係数の値に明確な基準はないけど目安として

相関係数の絶対値が

0.2以下・・・ほとんど相関なし

0.4以下・・・弱い相関

0.7以下・・・中程度の相関あり

それ以上・・・強い相関あり

 

故に、先程算出した相関係数を見る限りa,bは強い相関があると考えられる。

しかし、極少数の外れ値によって相関係数が大きく左右されることがあるので、相関係数も大事だが、必ず散布図を描写すること。

 

クロス集計表

次は連関を見ていこう

質的変数どうしの関係。

aに関して

> a<-c("S","S","A","A","S","S","S","S","S","A","A","S","A","S","S","A","S","S","S","S")
> a
[1] "S" "S" "A" "A" "S" "S" "S" "S" "S" "A" "A" "S" "A" "S" "S" "A" "S"
[18] "S" "S" "S"
> table(a)
a
A  S
6 14

 

bに関して

> b<-c("A","A","A","A","S","S","S","S","S","S","A","A","A","S","A","S","S","S","S","S")
> b
[1] "A" "A" "A" "A" "S" "S" "S" "S" "S" "S" "A" "A" "A" "S" "A" "S" "S"
[18] "S" "S" "S"
> table(b)
b
A  S
8 12

 

abの連関

> table(a,b)
   b
a    A  S
  A  4  2
  S  4 10

 

ファイ係数

相関係数の特別な場合で、1と0の二つの値からなる二値変数に対して計算冴えれる相関係数のこと。

> aa<-ifelse(a=="A",1,0)
> aa
[1] 0 0 1 1 0 0 0 0 0 1 1 0 1 0 0 1 0 0 0 0

> bb<-ifelse(b=="A",1,0)
> bb
[1] 1 1 1 1 0 0 0 0 0 0 1 1 1 0 1 0 0 0 0 0

このように1、0に変換した後の相関係数がファイ係数。

> cor(aa,bb)
[1] 0.3563483

 

練習問題

Image129

> (sum((a-mean(a))*(b-mean(b)))/length(a))/(sqrt(sum((a-mean(a))^2))*sqrt(sum((b-mean(b))^2)))
[1] 0.09092974

 

> aa<-c("A","S","S","A","S","A","A","S","A","A","S","A","S","A","S","S","A","A","S","S")
> table(a)
a
1  3  4  5  6  8 10 12
2  2  1  1  1  1  1  1
> table(aa)
aa
A  S
10 10
> bb<-c("A","S","A","A","S","S","S","S","A","A","A","A","S","S","A","S","S","A","S","S")
> table(bb)
bb
A  S
9 11
> table(aa,bb)
   bb
aa  A S
  A 6 4
  S 3 7

 

> aaa<-ifelse(aa=="S",1,0)
> bbb<-ifelse(bb=="S",1,0)
> cor(aaa,bbb)
[1] 0.3015113



0 件のコメント:

コメントを投稿