Rで,2つあるいはそれ以上の量的変数の関連を調べるための方法について簡単に紹介する.

以下,「量的データの要約」でも使用した iris データを用いて説明する. 外部データを読み込んで使用したい場合は,「質的変数の要約,分割表」のページなどを参考に.

data(iris)
head(iris) # 最初の6行分のデータ確認
##   Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1          5.1         3.5          1.4         0.2  setosa
## 2          4.9         3.0          1.4         0.2  setosa
## 3          4.7         3.2          1.3         0.2  setosa
## 4          4.6         3.1          1.5         0.2  setosa
## 5          5.0         3.6          1.4         0.2  setosa
## 6          5.4         3.9          1.7         0.4  setosa

散布図

iris(アヤメのデータ)には, Sepal.Length(がく片の長さ),Sepal.Width(がく片の幅), Petal.Length(花弁の長さ),Petal.Width(花弁の幅)の4つの量的変数と, Species(種,setosaversicolorvirginica の3種類)という質的変数が含まれている.

まずは plot 関数で,Sepal.LengthSepal.Width の散布図を描いてみる.

plot(iris$Sepal.Length, iris$Sepal.Width)

Species ごとに色を分けて,あるいはプロットの形を分けて表示することも可能である.

plot(iris$Sepal.Length, iris$Sepal.Width, col=as.numeric(iris$Species))

plot(iris$Sepal.Length, iris$Sepal.Width, pch=as.numeric(iris$Species))

ここで col は色,pch はプロット記号の指定であり,as.numeric は「数値にせよ」を意味する. この意味を理解するには,以下を試してみるとよい.

iris$Species
##   [1] setosa     setosa     setosa     setosa     setosa     setosa    
##   [7] setosa     setosa     setosa     setosa     setosa     setosa    
##  [13] setosa     setosa     setosa     setosa     setosa     setosa    
##  [19] setosa     setosa     setosa     setosa     setosa     setosa    
##  [25] setosa     setosa     setosa     setosa     setosa     setosa    
##  [31] setosa     setosa     setosa     setosa     setosa     setosa    
##  [37] setosa     setosa     setosa     setosa     setosa     setosa    
##  [43] setosa     setosa     setosa     setosa     setosa     setosa    
##  [49] setosa     setosa     versicolor versicolor versicolor versicolor
##  [55] versicolor versicolor versicolor versicolor versicolor versicolor
##  [61] versicolor versicolor versicolor versicolor versicolor versicolor
##  [67] versicolor versicolor versicolor versicolor versicolor versicolor
##  [73] versicolor versicolor versicolor versicolor versicolor versicolor
##  [79] versicolor versicolor versicolor versicolor versicolor versicolor
##  [85] versicolor versicolor versicolor versicolor versicolor versicolor
##  [91] versicolor versicolor versicolor versicolor versicolor versicolor
##  [97] versicolor versicolor versicolor versicolor virginica  virginica 
## [103] virginica  virginica  virginica  virginica  virginica  virginica 
## [109] virginica  virginica  virginica  virginica  virginica  virginica 
## [115] virginica  virginica  virginica  virginica  virginica  virginica 
## [121] virginica  virginica  virginica  virginica  virginica  virginica 
## [127] virginica  virginica  virginica  virginica  virginica  virginica 
## [133] virginica  virginica  virginica  virginica  virginica  virginica 
## [139] virginica  virginica  virginica  virginica  virginica  virginica 
## [145] virginica  virginica  virginica  virginica  virginica  virginica 
## Levels: setosa versicolor virginica
as.numeric(iris$Species)
##   [1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
##  [36] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
##  [71] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3
## [106] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
## [141] 3 3 3 3 3 3 3 3 3 3

setosa が 1 に,versicolor が 2 に,virginica が 3 に変換されている. R では,色番号 1 が黒,2 が赤,3 が黄緑であり,プロット番号 1 が丸,2 が三角,3 がプラス記号のため,このような散布図となるのである.

変数を 3 つ以上指定して(あるいは変数を指定せず)plot すると,すべての変数の組み合わせについての散布図行列が得られる.

plot(iris)

ここでは質的変数 Species が含まれるため,Species と他変数との散布図だけは注意する必要がある.

4つの量的変数のみ,Species ごとに色を分けて表示してみよう.

plot(iris[,1:4],col=as.numeric(iris$Species))

iris[i,j] のように ij を指定することで,irisij 列のデータを取り出せる. ここでは,行は指定せず(つまりすべて),列は1〜4列目までを指定して(1:4 のようにコロンで指定) 散布図行列にした.

相関係数

iris データでは,種ごとに分けると変数間の相関が強そうに思える. そこで,subset 関数で virginica (の4つの量的変数)だけを抽出し,変数間の相関を見てみよう.

virginica <- subset(iris, Species=="virginica", c(1:4))

subset は特定のデータだけを抜き出す関数であり, Species=="virginica"Speciesvirginica に一致する行のみを取り出し, c(1:4) で1列目〜4列目のみを取り出すことを意味している. c はベクトルを作る関数である.

相関係数は cor 関数で計算できる.

cor(virginica$Sepal.Length, virginica$Sepal.Width)
## [1] 0.4572278

3 変数以上を同時に指定する(あるいは変数を指定しない)と, すべての組み合わせの相関係数を同時に計算した相関行列が得られる.

cor(virginica)
##              Sepal.Length Sepal.Width Petal.Length Petal.Width
## Sepal.Length    1.0000000   0.4572278    0.8642247   0.2811077
## Sepal.Width     0.4572278   1.0000000    0.4010446   0.5377280
## Petal.Length    0.8642247   0.4010446    1.0000000   0.3221082
## Petal.Width     0.2811077   0.5377280    0.3221082   1.0000000

回帰直線

回帰直線を求めるには lm 関数を用いる. 例えば,Petal.Length を目的変数,Sepal.Length を説明変数とした結果を kaiki に格納しておく.

kaiki <- lm(Petal.Length~Sepal.Length, virginica)
kaiki
## 
## Call:
## lm(formula = Petal.Length ~ Sepal.Length, data = virginica)
## 
## Coefficients:
##  (Intercept)  Sepal.Length  
##       0.6105        0.7501

Coefficients 欄の Intercept が切片,Sepal.Length が傾きを表す . summary 関数を用いると,もう少し詳細な結果を得ることができる.

summary(kaiki)
## 
## Call:
## lm(formula = Petal.Length ~ Sepal.Length, data = virginica)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.68603 -0.21104  0.06399  0.18901  0.66402 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept)   0.61047    0.41711   1.464     0.15    
## Sepal.Length  0.75008    0.06303  11.901  6.3e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.2805 on 48 degrees of freedom
## Multiple R-squared:  0.7469, Adjusted R-squared:  0.7416 
## F-statistic: 141.6 on 1 and 48 DF,  p-value: 6.298e-16

結果の詳細は省くが,Multiple R-squared が決定係数である.

散布図上に赤色で回帰直線を書き入れてみよう.

plot(virginica$Sepal.Length, virginica$Petal.Length)
abline(kaiki, col="red")

abline は直線を書き入れる関数で, 様々な使い方ができる.