Rで統計学を学ぶ(2)

この講義では、教科書の第3章「2つの変数の記述統計」をとりあげます。 これは、2つの変数を対象として、変数同士の関係を捉える、というものです。 特に量的変数同士と、質的変数同士の関係を取り上げます。

このウェブページと合わせて教科書を読み進めてください。

学習項目です


2つの変数の関係

統計で扱われるデータの種類には大きく分けて次の2つがあったことを復習しておきましょう: 例えば、数学のテストの点数や物理のテストの点数は『量的データ』です。 ここであるクラスの学生について考えると、個々人の数学テストの点数は「数学テストの点数」という変数のいろいろな具体的データとみなせます。同様に個々人の物理テストの点数も「物理テストの点数」という変数のいろいろな具体例とみなせます。これらを量的変数といい、2つの量的変数の間の関係を相関と言います。

一方、あるクラスの学生について、「数学が好きかきらいか」というデータは 質的データと考えられ、「数学の好き嫌い」という変数の具体例とみなせます。 このような変数を質的変数といい、 例えば『数学の好き嫌い』と『物理の好き嫌い』という2つの質的変数の間の関係を 連関と言います。

3章では、相関と連関について学びます。

量的変数の関係(相関)を図で表す: 散布図

2つの変数、例えば、同じ人の「数学テストの点数」と「英語テストの点数」の間の関係を考えるのに、図を書いてみるということがよく行われます。 散布図とは、学生の2つの科目の成績のように、対応のあるデータを2次元の平面上にプロットして得られる図のことです。これは2つのデータの間の関係を調べるのに利用されます。例えば、あるクラスの数学と英語の成績が以下のようだったとします。ここで、数学と英語の点数は学籍番号順に並んでいる、つまり学籍番号が3番の学生は数学の成績が14点、英語は12点だったとします。

Math <- c(17, 13, 14, 7, 12, 10, 6, 8, 15, 4, 14, 9, 6, 10, 12, 5, 12, 8, 8, 12, 15, 18)
Eng <- c(14, 10, 12, 9, 10, 12, 1, 6, 16, 1, 12, 13, 11, 11, 16, 8, 11, 12, 6, 14, 17, 20)
この散布図はplotを用いて次のようにして得られます。
> plot(Math, Eng)

ここでは数学の成績をx座標、英語の成績をy座標として、それぞれの学生の2つの科目の成績を平面上に表示しました。このグラフを見ると、数学(x)と英語(y)の成績はなんとなく関係がありそうに見えます。つまり、xの値が増加するとyの値が増加するという関係です。これは、xとyの間に正の相関があるといいます。これとは逆にxの値が増加するとyの値が減少する関係もあります。このときはxとyの間に負の相関があるといいます。もちろんこのような関係がない場合もあります。その場合、xとyは無相関であるといいます:

下の図の(1)と(2)は相関があるとみなせる場合の散布図、(3)は無相関とみなせる場合の散布図です。直線はy=xを表す直線で、これに沿った点が多いほど正の相関があると考えられます。また楕円はその中に多くのデータが入るよう書いたものです。(2)の弱い相関の場合、(1)とくらべて散らばりが広がっていること、無相関の場合はデータをカバーする楕円がほぼ円になっていることが見て取れます。
(1)正の相関(2)弱い相関(3)無相関

ただ、相関があるかそれとも無相関かをグラフで判断することは実際にはかなり難しいです。 そこで、相関の様子を図として表すのではなく、 後で述べる相関係数、言い換えれば相関の度合いを数値で表す方法が用いられます。

課題2-1

次の表には、親子の身長のデータ(単位はcm)がある。これから親と子の身長には相関があるかどうかを散布図を書いて答えよ。
Parent <- c(175, 170, 165, 160, 182, 177, 160, 176, 161, 170, 172)
Child  <- c(172, 173, 170, 168, 177, 172, 171, 172, 162, 167, 172)
[ヒント]
散布図は plot 関数で書けます。散布図で表示された「点」がどの程度 y = ax + b (a, bは定数) という直線にどのくらいそっているかが、相関の強さになります。

量的変数の関係(相関)を数値で表す: 共分散、 相関係数

偏差とは、それぞれのデータとその平均との差のことです。 2つの変数x, y の共分散sxyとは、 xとyそれぞれの偏差の積のことで、次の式で表されます(ここでmxはxの平均、myはyの平均とし、データの個数を nとする):

そして、Rでは共分散をcov関数を用いて求めることができます(注意: cov関数では、上の式で分母が nではなく、 n-1になっています。そのため不偏共分散と呼ぶことがあります)。

課題2-2

課題2-1の親子の身長のデータに対し、不偏共分散の値を求めよ。また、身長をメートル(m)単位に直した場合の不偏共分散の値を求め、2つを比較せよ。

[ヒント]

変数xとyの(不偏)共分散は cov(x,y)で求めることができます。
また、ParentデータもChildデータもcm単位ですが、それをm単位にするには 100 で割ればよろしい。

相関係数

散布図は2つのデータの間の関係を調べるのに利用されますが、 相関があるかそれとも無相関かをグラフで判断することは難しいものがありました。そのため相関の関係を表す指標を数値で表すことを考えます。ただ、その指標として共分散を用いるのでは、課題2-2でみたように、例えば単位をmにするかcmにするかで値が大きく違ってしまいます。そこで相関係数、言い換えれば相関の度合いを数値で表すことが考えられています。 よく使われるのはピアソンの相関係数で、次の式で定義されます(sxyは変数xとyの共分散、sxとsyはそれぞれxとyの標準偏差):

相関係数rは-1≦r≦1の範囲の値をとります。そして次の表に示すように、rの値によって相関のあるなしの評価が行われます:
相関係数       大きさの評価
  -0.2≦r≦0.2   ほとんど相関なし
  -0.4≦r < -0.2     0.2 < r ≦ 0.4   弱い相関あり
  -0.7≦r < -0.4     0.4 < r ≦ 0.7   中程度の相関あり
  -1.0≦r < -0.7     0.7 < r ≦ 1.0   強い相関あり

Rでは相関係数をcor関数を用いて求めることができます。散布図の項で紹介した数学と英語の成績に対し、相関係数を求めてみましょう。

> cor(Math,Eng)
[1] 0.7882266
数学と英語の成績の相関係数が0.79という値が出ました。これは先の表から、強い相関がありそうだ、ということがわかりました。

このように強い相関があるとき、yとxの関係をy = a*x + b(a, bは定数)という形の一次方程式で表すことが考えられます。ここで必要なのは傾きを表すaと切片を表bという定数で、Rではlm関数で求めることができます。

> ( lm(Eng ~ Math) )

Call:
lm(formula = Eng ~ Math)

Coefficients:
(Intercept)         Math  
      1.001        0.936  
ここでlm関数の引数をEng~Mathと書いたのは、Mathの値でEngを説明せよ、と読むことができます(lm以外にもいろいろな関数で~(チルド)が使われています)。 この結果から、Eng = 0.936 * Math + 1.001という方程式で説明できそうということがわかりました。なおこのような分析を単回帰分析と言います。

せっかくですから、これを先の散布図に重ねて表示してみましょう。それには次のようにablineという関数を使います(col=で赤色を指定しています)。

> relation <- lm(Eng ~ Math)
> abline(relation, col="red")

課題2-3

課題2-1の親と子の身長データから、これらの間には相関があるかどうかを相関係数を求めて答えよ。また、その散布図と、単回帰分析によって得られる一次方程式のグラフを重ね書きして表示せよ。

課題2-4

Rのcor関数は、cov関数で与えられる不偏共分散を分子、sd関数で与えられる(不偏分散の平方根である)標準偏差を分母として計算されていることを、課題2-1のデータを使って確かめよ。もしも教科書の定義通りの共分散と、標本分散の平方根とを用いて計算したときの、課題2-1のデータの相関係数はいくらになるか、求めよ。
[ヒント]
「Rのcor関数は、cov関数で与えられる不偏共分散を分子、sd関数で与えられる(不偏分散の平方根である)標準偏差を分母として計算されていること」は、次のようにして確かめることができます。
2つの変数をx, yとすると、共分散の式に cov(x,y)を分子、sd(x)とsd(y)を分母として計算した値を求めます。 これと、cor(x,y) の値が一致することを確かめます。

また、「教科書の定義通りの共分散と、標本分散の平方根とを用いて計算したときの、課題2-1のデータの相関係数はいくらになるか」は次のようにして求めます。
2つの変数をx, yとすると、まずxとyの(不偏ではない方の)共分散を求めます。共分散の式から、これは以下のようにして求めることができます(xもyも同じ個数のベクトルなので、 length(x)は length(y)でも同じ値になります):

covariance <- sum((x - mean(x))*(y-mean(y)))/length(x)
また、xの標本分散は、次のように定義から求めても良いですし、
sample_var <- sum((x - mean(x))^2)/length(x)
varを用いて次のように求めることもできます:
sample_var <- var(x)*(length(x)-1)/length(x)
なお、これらが標本分散の式に等しいことを確かめておいてください。

質的変数の関係(連関)を表す: クロス集計表、ファイ係数

クロス集計表とは、質的変数同士の関係を見るのに使われます。 例えば、数学の好き・嫌いと統計学の好き・嫌いの間に連関があるかどうかは、それぞれの変数 (「数学」と「統計学」)が質的変数ですから、クロス集計表を書いて調べることになります。

ここで数学変数と統計学変数の値を次のように定めることにしましょう:

数学 <- c("嫌い","嫌い","好き","好き","嫌い","嫌い","嫌い","嫌い","嫌い","好き","好き","嫌い",
	"好き","嫌い","嫌い","好き","嫌い","嫌い","嫌い","嫌い")
統計学 <- c("好き","好き","好き","好き","嫌い","嫌い","嫌い","嫌い","嫌い","嫌い","好き","好き",
	"好き","嫌い","好き","嫌い","嫌い","嫌い","嫌い","嫌い")
いままでは、それぞれの変数に対し度数分布表を作るのにtableを用いましたが、 クロス集計表を作るのにも同じtableを用います:
> table(数学,統計学)
      統計学
数学   嫌い 好き
  嫌い   10    4
  好き    2    4

ここで、質的変数に対する「特殊な相関係数」であるファイ係数を紹介します。 ファイ係数は、1と0からなる変数(二値変数)に対して計算される相関係数です。 したがって、質的変数に対してこれを適用するには、まずデータを0, 1の値に変換しなければなりません。 それを先ほど取り上げた数学変数と統計学変数に対して適用し、ファイ係数を求めてみることにしましょう。

まず、二値変数にするには、下に示すように関数 ifelse を使います:

> 数学イチゼロ=ifelse(数学=="好き",1,0)
> 統計学イチゼロ=ifelse(統計学=="好き",1,0)
> 数学イチゼロ
 [1] 0 0 1 1 0 0 0 0 0 1 1 0 1 0 0 1 0 0 0 0
> 統計学イチゼロ
 [1] 1 1 1 1 0 0 0 0 0 0 1 1 1 0 1 0 0 0 0 0

これで変数の値が数値化されましたので、関数corを適用して、ファイ係数が求まりました:

> cor(数学イチゼロ,統計学イチゼロ)
[1] 0.3563483
この結果から、数学変数と統計学変数の間には弱い連関があるということが言えそうですね。

関数のまとめ

目的 関数名と書式 使い方
散布図を描く plot(x, y) plot(数学テスト,  英語テスト)
共分散を求める cov(x, y) cov(数学テスト,  英語テスト)
相関係数を求める cor(x, y) cor(数学テスト,  英語テスト)
単回帰分析を行う lm(y ~ x) lm(英語テスト ~ 数学テスト)
クロス集計表を書く table(x, y) cor(数学テスト,  英語テスト)
場合分けをする ifelse(条件, 真の場合, 偽の場合) ifelse(統計学=="好き", 1, 0)

演習問題

問題2-1

教科書68~69ページの練習問題(1)~(4)を解きなさい。コードと、表示された結果を提出しなさい。 なお、必要なら以下のコードを使いなさい:
# (1)のデータ
勉強時間 <- c(1, 3, 10, 12, 6, 3, 8, 4, 1, 5)
定期試験 <- c(20, 40, 100, 80, 50, 50, 70, 50, 10, 60)
# (3)のデータ
洋食派か和食派か <- c("洋食","和食","和食","洋食","和食","洋食","洋食","和食","洋食","洋食",
	"和食","洋食","和食","洋食","和食","和食","洋食","洋食","和食","和食")
甘党か辛党か <- c("甘党","辛党","甘党","甘党","辛党","辛党","辛党","辛党","甘党","甘党","甘党","甘党",
	"辛党","辛党","甘党","辛党","辛党","甘党","辛党","辛党")

問題2-2

  1. 相関と連関の違いについて述べよ。
  2. 2つの変数の相関を調べる場合、どういうときに散布図を使い、どういう場合に相関係数を使ったらよいか、 考えを述べよ。
  3. ある2つの変数の相関係数を出したところ、0.9という値が得られた。このことから、この2つの変数には強い相関があると言っても良いだろうか、あなたの考えを述べよ。(ヒント: データの個数などは関係ないだろうか?)
  4. 次の変数xとyの散布図を書き、単回帰分析してえられた直線を散布図に書き加えよ。また、相関係数を答えよ。
    x <- c(69, 70, 76, 69, 68, 74, 63, 79, 82, 74, 73, 66, 69, 71, 63, 73, 69, 63, 57, 71,
    	77, 74, 66, 73, 63, 75, 68, 66, 69, 77)
    y <- c(71, 75, 73, 59, 72, 53, 55, 72, 70, 65, 76, 63, 58, 52, 63, 57, 62, 59, 47, 51,
    	74, 52, 56, 61, 55, 70, 62, 66, 61, 63)
    

Rで統計学(1)         トップページに戻る        Rで統計学(3)