この講義では、教科書の第3章「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)無相関 |
ただ、相関があるかそれとも無相関かをグラフで判断することは実際にはかなり難しいです。 そこで、相関の様子を図として表すのではなく、 後で述べる相関係数、言い換えれば相関の度合いを数値で表す方法が用いられます。
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)[ヒント]
偏差とは、それぞれのデータとその平均との差のことです。 2つの変数x, y の共分散sxyとは、 xとyそれぞれの偏差の積のことで、次の式で表されます(ここでmxはxの平均、myはyの平均とし、データの個数を nとする):
そして、Rでは共分散をcov関数を用いて求めることができます(注意: cov関数では、上の式で分母が nではなく、 n-1になっています。そのため不偏共分散と呼ぶことがあります)。
[ヒント]
相関係数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(Math,Eng) [1] 0.7882266数学と英語の成績の相関係数が0.79という値が出ました。これは先の表から、強い相関がありそうだ、ということがわかりました。
このように強い相関があるとき、yとxの関係を
> ( 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という関数を使います(
> relation <- lm(Eng ~ Math) > abline(relation, col="red")
また、「教科書の定義通りの共分散と、標本分散の平方根とを用いて計算したときの、課題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) |
# (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("甘党","辛党","甘党","甘党","辛党","辛党","辛党","辛党","甘党","甘党","甘党","甘党", "辛党","辛党","甘党","辛党","辛党","甘党","辛党","辛党")
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)