Rで統計分析する

2015-11-11 (水) 17:10:14 (502d) | Topic path: Top / バイオ・データ・マイニング / Rで統計分析する

はじめに

ここでは、Rを使って平均、分散、標準偏差を求めます。

『Rによるバイオインフォマティクスデータ解析』の3.3節「基本統計関数」に少しだけ出てきます。

準備

Rのインストールについては、次のページを見てください。

ここでは、標準で使用できるirisデータセットを使います。

> data(iris)

このデータセットは、アヤメの種類(Species)を花びらの長さ(Sepal.Length)、幅(Sepal.Width)、がくの長さ(Petal.Length)、幅(Petal.Width)によって分類する問題です。 長さと幅は連続値、種類はsetosa, versicolor, virginicaのいずれかをとる離散値です。

このデータセットには、setosa, versicolor, virginicaという3種類のアヤメについて、それぞれ50個ずつ、合計150個のデータが含まれています。 ランダムに10個のデータを選択して、見てみましょう。

> iris[sort(sample(1:150,10)),]
    Sepal.Length Sepal.Width Petal.Length Petal.Width    Species
4            4.6         3.1          1.5         0.2     setosa
22           5.1         3.7          1.5         0.4     setosa
65           5.6         2.9          3.6         1.3 versicolor
97           5.7         2.9          4.2         1.3 versicolor
100          5.7         2.8          4.1         1.3 versicolor
108          7.3         2.9          6.3         1.8  virginica
116          6.4         3.2          5.3         2.3  virginica
122          5.6         2.8          4.9         2.0  virginica
136          7.7         3.0          6.1         2.3  virginica
146          6.7         3.0          5.2         2.3  virginica

ここでは、setosaのSepal.Lengthだけを扱います。

Speciesの値がsetosaのデータだけを取り出すには、次のようにします。

> iris[iris$Species=='setosa',]

コンマを忘れないようにしてください。

Speciesの値がsetosaのデータのSepal.Lengthの値(つまり、1列目の値)だけを取り出して、setosa.Petal.Lengthとします。

> setosa.Sepal.Length <- iris[iris['Species']=='setosa',1]

ヒストグラム

ヒストグラムを表示するにはhist関数を使います。

> hist(setosa.Sepal.Length)
histgram_1.png

区間は適当に決めてくれますが、区間を変更したり、色を付けたりすることもできます。

> hist(setosa.Sepal.Length, breaks=12, col='gray')
histgram_2.png

頻度の替わりに確率密度を縦軸にすることもできます。

> hist(setosa.Sepal.Length, breaks=12, col='gray', freq=F)
histgram_3.png

平均

平均は、値の合計を値の数で割ったものです。 \[\mu(X) = \frac{\sum_{i=1}^{n} x_i}{n}\]

平均を求めるには、mean関数を使います。

> mean(setosa.Sepal.Length)
[1] 5.006

平均値からのズレ [math]x_i - \mu(x)[/math] を偏差といいます。

分散

不偏分散は、標本(サンプル・データ)に含まれる値の偏差の平方和を標本数から1を引いた値で割ったものです。 なぜ標本数から1を引くのかについては、統計の教科書で勉強してください。 \[\mathrm{Var}(X) = \frac{\sum_{i=1}^{n} (x_i - \mu(X))^2}{n-1}\]

不偏分散を求めるには、var関数を使います。

> var(setosa.Sepal.Length)
[1] 0.124249

標準偏差

不偏標準偏差は、不偏分散の平方根です。 \[\sigma(X) = \sqrt{Var(X)}\]

不偏標準偏差を求めるには、sd関数を使います。

> sd(setosa.Sepal.Length)
[1] 0.3524897

正規分布の確率密度関数

正規分布の確率密度関数は以下の式で与えられます。 \[ f(x) = \frac{1}{\sqrt{2\pi}\sigma} e^{-\frac{(x-\mu)^2}{2\sigma^2}} \]

Rで正規分布の確率密度関数を求めるにはdnorm関数を用います。 パラメーターは平均 mean と標準偏差 sd です。

まずは、平均0、標準偏差1の正規を描いてみましょう。

グラフを描くにはcurve関数を使います。第一引数には変数xを含んだ式を与えます。

> curve(dnorm(x, mean=0, sd=1), from=-5, to=5)
density.png

ヒストグラムと確率密度関数の重ね書き

最後に、ヒストグラムとデータから推定した正規分布の確率密度関数を重ね書きしてみましょう。

まずは、ヒストグラムを確率密度で表示しておきます。

> hist(setosa.Sepal.Length, breaks=12, col='gray', freq=F)
histgram_3.png

平均muと標準偏差sigmaを求めておきます。

> mu <- mean(setosa.Sepal.Length)
> sigma <- sd(setosa.Sepal.Length)

平均muと標準偏差sigmaの確率密関数をヒストグラムに重ね書きします。

> curve(dnorm(x, mean=mu, sd=sigma), add=T)
histgram_4.png

平均値の差の検定(t検定)

setosaのSepal.Lengthの平均値は5.006でした。 versicolorのSepal.Lengthの平均値は5.936です。

この二つの平均値にの差には、意味があるのでしょうか。

これを、t検定という方法によって調べることができます。

t検定では、「二つの平均値の差には意味がある」という仮説に対して、「二つの平均値の差には意味がない」という反対の仮説(帰無仮説)を立て、帰無仮説が成り立たないことを示す(棄却する)ことによって、最初の仮説が成り立つことを示します。

t検定を行うには、t.test関数を使います。

> setosa.Sepal.Length <- iris[iris['Species']=='setosa',1]
> versicolor.Sepal.Length <- iris[iris['Species']=='versicolor',1]
> t.test(setosa.Sepal.Length, versicolor.Sepal.Length)

	Welch Two Sample t-test

data:  setosa.Sepal.Length and versicolor.Sepal.Length
t = -10.521, df = 86.538, p-value < 2.2e-16
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 -1.1057074 -0.7542926
sample estimates:
mean of x mean of y 
    5.006     5.936 
 

これは、二つの群の分散が同じであることを仮定しない、Welchのt検定といいます。

二つの群の分散が同じであることを仮定する検定はStudentのt検定といい、オプションとして var.equal=T を付けます。

> t.test(setosa.Sepal.Length, versicolor.Sepal.Length, var.equal=T)

	Two Sample t-test

data:  setosa.Sepal.Length and versicolor.Sepal.Length
t = -10.521, df = 98, p-value < 2.2e-16
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 -1.1054165 -0.7545835
sample estimates:
mean of x mean of y 
    5.006     5.936 
 

まず、p値(p-value)を見ます。

p値が、0.1よりも小さいときは「10%有意で平均に差がある」、0.05よりも小さいときは「5%有意で平均に差がある」、0.01よりも小さいときは「1%有意で平均に差があるといいます。 この、10%、5%、1%のことを、有意水準といいます。

つぎに、95%信頼区間(95 percent confidence interval)を見ます。 平均値の差が95%の確率でこの区間に入ることを意味します。

この区間がゼロを含むときは、5%有意水準で帰無仮説を棄却できない、つまり、5%有意で平均に差があるとはいえません。 「5%有意で平均に差がない」ではないことに注意しましょう。

演習

irisのSepal.Length以外のデータに対して、平均 [math]\mu[/math] と不偏標準偏差 [math]\sigma[/math] を求め、そのヒストグラムと平均 [math]\mu[/math]、標準偏差 [math]\sigma[/math] の正規分布の確率密度関数を重ねて描いてみよう。

また、irisデータにおいて、versicolorのSepal.Lengthの平均値とvirginicaのSepal.Lengthの平均値の間に統計的有意な差があるかどうかを調べてみよう。

参考文献

添付ファイル: filehistgram_4.png 62件 [詳細] filedensity.png 60件 [詳細] filehistgram_3.png 61件 [詳細] filehistgram_2.png 52件 [詳細] filehistgram_1.png 52件 [詳細]
トップ   編集 凍結解除 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS