Rで統計分析する

2018-10-31 (水) 14:06:25 (40d) | 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

記述統計

標本を要約し、標本の情報をわかりやすく記述することを記述統計といいます。

ここでは、散布図、ヒストグラム、ボックスプロット(箱ひげ図)を作成します。

散布図

横軸と縦軸にそれぞれ別の量をとり、測定値を点として表したグラフを散布図といいます。 2つの値を同時に測定し、[math]n[/math] 個の測定値の組を [math](x_1, x_2), (x_2, y_2),\dots, (x_n, y_n)[/math] としたとき、それぞれを [math]x[/math] 座標、[math]y[/math] 座標とする点として表したものです。

散布図を作成するには、plot関数を用います。

> x = iris[,3]
> y = iris[,4]
> plot(x, y, main="Petal", xlab="Length [cm]", ylab="Width [cm]")
scatter.png

列ごとの散布図を作ることもできます。

> plot(iris[,1:4])
multiscatter.png

ヒストグラム

測定値が存在する範囲をいくつかの区間に分け、各区間とその区間に属する測定値の個数との関係性を度数分布と言います。 度数分布を表すグラフをヒストグラムといい、底辺の長さが各区間の幅に比例し、その面積がその区間の度数に比例する長方形を近接して並べたものです。

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

> x = iris[51:100,3]
> hist(x, main="Histogram of Petal.Length (Versicolor)", xlab="Petal.Length [cm]")
histogram.png

ボックスプロット(箱ひげ図)

ヒストグラムの他に、測定値の分布やばらつき具合を表すグラフとしてボックスプロット箱ひげ図)があります。 長方形の箱とその両端から伸びるひげで標本の統計量を表します。

箱の両端は、第一四分位数(最小値から全体の1/4のところにある測定値、25 パーセンタイル)と第三四分位数(最小値から全体の3/4のところにある測定値、75 パーセンタイル)を表し、箱の中の線は中央値(標本の大きさが奇数のときは全体の中央にある測定値、偶数のときは中央の2つの測定値の平均値、メディアン、50% パーセンタイル)を表します。

ひげの表し方には2種類あり、一つはひげの両端が最小値と最大値を表します。 もう一つは、ひげの両端が箱の両端から第三四分位数と第一四分位数の差の1.5倍の範囲内での最小値と最大値を表します。 後者の場合、ひげの両端よりも外側にある測定値を特異値(または外れ値)として丸印で表すこともあります。

> x = iris[1:50,3]
> y = iris[51:150,3]
> z = iris[101:150,3]
> boxplot(x, y, z, main="Petal", names=c("Setosa", "Versicolor", "Virginica"), ylab="Length [cm]")
boxplot.png

推定統計

標本から母集団の情報を推定することを推定統計といいます。

平均

母平均は、母集団の値の合計を母集団の大きさ [math]N[/math] で割ったものです。 \[ \mu(X) = \frac{1}{N} \sum_{i=1}^N x_i \]

標本平均は、標本の値の合計を標本の大きさ [math]n[/math] で割ったものです。 \[\overline{X} = \frac{1}{n} \sum_{i=1}^{n} x_i \]

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

> mean(x)
[1] 1.462
> mean(y)
[1] 4.906
> mean(z)
[1] 5.552

標本平均の期待値は母平均に等しいため、標本平均を求めることで母平均を推定できます。

分散

測定値の標本平均からのズレを偏差といいます。

母分散は、母集団の値の偏差の二乗の総和を母集団の大きさ [math]N[/math] で割ったものです。 \[\sigma(X)^2 = \frac{1}{N} \sum_{i=1}^{n} (x_i - \mu(X))^2 \]

標本分散不偏分散実験分散)は、標本に含まれる値の偏差の二乗の総和を標本数から1を引いた数で割ったものです。 \[ s(X)^2 = \frac{1}{n-1} \sum_{i=1}^{n} (x_i - \overline{X})^2 \]

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

> var(x)
[1] 0.03015918
> var(y)
[1] 0.6815798
> var(z)
[1] 0.3045878

標本分散の期待値は母分散に等しいため、標本分散を求めることで母分散を推定できます。

標準偏差

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

標本標準偏差不偏標準偏差実験標準偏差)は、不偏分散の平方根です。 \[ s(X) = \sqrt{s(X)^2} \]

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

> sd(x)
[1] 0.173664
> sd(y)
[1] 0.8255785
> sd(z)
[1] 0.5518947

標本標準偏差の期待値は母標準偏差に等しいため、標本標準偏差を求めることで母標準偏差を推定できます。

不確かさ

「平均 [math]\mu(X)[/math]、標準偏差 [math]\sigma(X)[/math] の母集団から無作為に抽出した大きさ [math]n[/math] の標本の平均 [math]\overline{X}[/math] は、平均 [math]\mu(X)[/math]、標準偏差 [math]\frac{\sigma(X)}{\sqrt{n}}[/math] の正規分布に従う」という中心極限定理より、[math]n[/math] 個の測定値を平均すると標準偏差が [math]\frac{1}{\sqrt{n}}[/math] になることがわかります。

標本標準偏差 [math]s(X)[/math] を標本の大きさの平方根 [math]\sqrt{n}[/math] で割ったものを、標準不確かさ標準誤差)といいます。 \[ u(X) = \frac{s(X)}{\sqrt{n}} \]

標準不確かさに包含係数 [math]k[/math] をかけたものを拡張不確かさといいます。 \[ U(X) = k \times u(X) \]

測定値が正規分布に従っていて、測定値が11個以上あるとき、測定値の95%が包含係数 [math]k=2[/math] の [math]\overline{X} \pm U(X)[/math] の範囲に含まれます。 この95%のことを信頼水準といいます。

1993年にISOを含む7つの国際機関が策定した「計測における不確かさの表現ガイド」に従うと、測定値は標準不確かさまたは拡張不確かさを用いて、次のように表します。

  • [math]x = \overline{X}[/math]、標準不確かさは [math]u(X)[/math]
  • [math]x = (\overline{X} \pm U(X))[/math]、ただし記号 [math]\pm[/math] に続く値は包含係数 [math]k=2[/math] から決定された拡張不確かさである

標準不確かさを求めるには、標本標準偏差を求めるsd関数と平方根を求めるsqrt関数とベクトルの長さを調べるlength関数を使います。

> sd(x)/sqrt(length(x))
[1] 0.0245598
> sd(y)/sqrt(length(y))
[1] 0.06645545
> sd(z)/sqrt(length(z))
[1] 0.0780497

これを用いて、SetosaのPetal.Lengthの測定値を「長さ [math]l = 1.462[/math] cm、標準不確かさは [math]0.0246[/math] cm」または「長さ [math]l = (1.462 \pm 0.0491)[/math] cm、ただし記号 [math]\pm[/math] に続く値は包含係数 [math]k=2[/math] から決定された拡張不確かさである」と表します。

95%信頼区間

計測における不確かさの表し方が分野によってバラバラなのは良くないので「計測における不確かさの表現ガイド」が作成されましたが、 95%信頼区間もまだよく使われています。

95%信頼区間は、母平均が95%の確率で含まれると推定される区間のことです。

標本平均と母平均の偏差を標準不確かさで割ったものをt値t統計量)といいます。 \[ t(X) = \frac{\overline{X} - \mu(X)}{u(X)} \]

t値は、自由度 [math]n - 1[/math] のt分布(自由度が大きいほど正規分布に近づく分布)に従うことがわかっています。 そこで、この分布において上側の面積の割合が2.5%になるt値 [math]t_{n-1,2.5\%}[/math] を求め、これに標準不確かさ [math]u(X)[/math] を掛けると95%信頼区間の幅の半分が求まります。 つまり、母平均の95%信頼区間は次のように表されます。 \[ \overline{X} - t_{n-1,2.5\%} \times u(X) \le \mu \le \overline{X} + t_{n-1,2.5\%} \times u(X) \]

計測の不確かさを表すのに95%信頼区間を用いるとき、測定値は次のように表します。

  • [math]\overline{X}[/math](95%信頼区間 [math]\overline{X} - t_{n-1,2.5\%} \times u(X)[/math]–[math]\overline{X} + t_{n-1,2.5\%} \times u(X)[/math])

95%信頼区間を求めるには、t.test関数を使います。

> t.test(x)

	One Sample t-test

data:  x
t = 59.528, df = 49, p-value < 2.2e-16
alternative hypothesis: true mean is not equal to 0
95 percent confidence interval:
 1.412645 1.511355
sample estimates:
mean of x 
    1.462 
 

95%信頼区間 (95 percent confidence interval) のところを見ると、SetosaのPetal.Lengthの母平均の95%信頼区間は [math][1.412645, 1.511355][/math] です。

そこで、SetosaのPetal.Lengthの測定値を「長さは [math]1.462[/math] cm(95%信頼区間 [math]1.412[/math]–[math]1.511[/math] cm)だった」と表します。

検定

統計的検定では、「AとBの間には差がある」という仮説に対して、「AとBの間には差がない」という反対の仮説を立て、後者の仮説が成り立たないことを示すことによって、前者の仮説が成り立つことを示します。

否定される仮説を帰無仮説、帰無仮説を否定することを棄却するといいます。 帰無仮説が棄却されることによって支持される、帰無仮説の反対の仮説を対立仮説といいます。

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

Petal.Lengthについて、Versicolorの平均は4.906 cm、Virginicaの平均は5.552 cmです。

この二つの平均にの差には、意味があるのでしょうか。 (Virginicaの方がVersicolorよりも大きいと言えるでしょうか。)

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

t検定では、対立仮説を「二つの平均の差には意味がある」、帰無仮説を「二つの平均の差には意味がない」として、帰無仮説を棄却することによって対立仮説を支持します。

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

> t.test(y, z)

	Welch Two Sample t-test

data:  y and z
t = -5.686, df = 135.83, p-value = 7.631e-08
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 -0.870676 -0.421324
sample estimates:
mean of x mean of y 
    4.906     5.552 
 

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

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

> t.test(y, z, var.equal=T)

	Two Sample t-test

data:  y and z
t = -4.9985, df = 148, p-value = 1.612e-06
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 -0.9013938 -0.3906062
sample estimates:
mean of x mean of y 
    4.906     5.552 
 

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

p値が、0.1よりも小さいときは「10%有意水準で統計的有意な差がある」、0.05よりも小さいときは「5%有意水準で統計的有意な差がある」、0.01よりも小さいときは「1%有意水準で統計的有意な差がある」といいます。

つぎに、平均の差の95%信頼区間(95 percent confidence interval)を見ます。

この区間がゼロを含むときは、5%有意水準で有意な差があるとはいえません。 「5%有意水準で有意な差がない」ではないことに注意しましょう。

ここで、p値が 1.612e-06 で、0.01よりも小さいため、「VersicolorのPetal.Lengthの平均とVirginicaのPetal.Lengthの平均には1%有意水準で統計的有意な差がある」といえます。

次に、Versicolorを半分ずつに分けて、そのPetal.Lengthの平均を調べてみましょう。

> y1 = iris[51:75,3]
> y2 = iris[76:100,3]
> mean(y1)
[1] 4.312
> mean(y2)
[1] 4.208
> mean(y1) - mean(y2)
[1] 0.104

前半グループの平均は 4.312 cm、後半グループの平均は 4.208 cmで、その差が 0.104 cmありますが、これは意味のある差でしょうか?

t検定を行うと、次のようになります。

> t.test(y1, y2, var.equal=T)

	Two Sample t-test

data:  y1 and y2
t = 0.77934, df = 48, p-value = 0.4396
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 -0.1643124  0.3723124
sample estimates:
mean of x mean of y 
    4.312     4.208 
 

p値が 0.4396 であり、10%有意水準でも統計的に有意な差があるとはいえません。 平均の差の95%信頼区間にも0が含まれています。

比率の差の検定

Petal.Lengthの値がその平均よりも大きいものがいくつあるか、調べてみましょう。

> sum(y > mean(y))
[1] 27
> sum(z > mean(z))
[1] 25

Versicolorでは50個中27個(54%)、Virginicaでは50個中25個(50%)ありました。

この二つの比率の差には、意味があるのでしょうか。 (Versicolorの方がVirginicaよりも比率が高いと言えるでしょうか。)

これを、2標本の比率検定という方法によって調べることができます。

2標本の比率検定では、、対立仮説を「二つの比率の差には意味がある」、帰無仮説を「二つの比率の差には意味がない」として、帰無仮説を棄却することによって対立仮説を支持します。

2標本の比率検定を行うには、prop.test関数を使います。

> prop.test(c(27, 25), c(50, 50))

	2-sample test for equality of proportions with continuity correction

data:  c(27, 25) out of c(50, 50)
X-squared = 0.040064, df = 1, p-value = 0.8414
alternative hypothesis: two.sided
95 percent confidence interval:
 -0.1756826  0.2556826
sample estimates:
prop 1 prop 2 
  0.54   0.50 
 

一つ目の引数は条件を満たす測定値の数のベクトル、二つ目の引数は測定値全体の数のベクトルです。

結果の見方はt検定と同じです。

ここではp値が0.841と0.05よりも大きく、(比率の差の)95%信頼区間がゼロを含みますので、5%有意水準で有意な差があるとはいえません。

独立性の検定

今度は、SetosaのSepal.LengthとPetal.Lengthについて、それぞれの値が平均より大きいものがいくつあるか調べてみましょう。

> x1 = iris[1:50,1]
> x2 = iris[1:50,3]
> sum(x1 > mean(x1) & x2 > mean(x2))
[1] 15
> sum(x1 > mean(x1) & x2 <= mean(x2))
[1] 7
> sum(x1 <= mean(x1) & x2 > mean(x2))
[1] 11
> sum(x1 <= mean(x1) & x2 <= mean(x2))
[1] 17

これを表にまとめると、次の表のようになります。 このような表を分割表といいます。

SetosaPetal.Lengthが平均より大きいPetal.Lengthが平均以下
Sepal.Lengthが平均より大きい15722
Sepal.Lengthが平均以下111728
262450

そこで、分割表を表す行列を作っておきます。

> m <- matrix(c(15, 11, 7, 17), nrow=2)
> m
     [,1] [,2]
[1,]   15    7
[2,]   11   17

この二つの事象は、独立に生じているでしょうか。 (Sepal.Lengthが大きいこととPetal.Lengthが平均より大きいことは無関係でしょうか。)

これをカイ二乗検定またはFisherの正確検定という方法によって調べることができます。

カイ二乗検定Fisherの正確検定では、対立仮説を「二つの事象は独立でない(関係がある)」、帰無仮説を「二つの事象は独立である(無関係である)」として、帰無仮説を棄却することによって対立仮説を支持します。

基本的には、カイ二乗検定を行いますが、分割表が次のようなときは、Fisherの正確検定を行います。

  • 度数が0のセルが存在する、または
  • 期待度数が5未満のセルが20%以上存在する

期待度数というのは、それぞれの事象が生じる確率から求められる度数です。 Petal.Lengthが平均より大きい確率は [math]26/50 = 0.52[/math]、Sepal.Lenghが平均より大きいものは22個ありますから、Petal.Lengthが平均より大きく、かつ、Sepal.Lengthが平均より大きいものの期待度数は [math]22 \times 0.52 = 11.44[/math] となります。

上の分割表は、この条件に当てはまらないので、カイ二乗検定を用います。

カイ二乗検定を行うには、chisq.test関数を使います。

> chisq.test(m)

	Pearson's Chi-squared test with Yates' continuity correction

data:  m
X-squared = 3.045, df = 1, p-value = 0.08099
 

分割表を表す行列を作って引数とします。

ここでは、p値が0.081と0.05より大きいので、5%有意水準で独立でない(関係がある)とは言えません。 (帰無仮説が棄却できなかったときは、対立仮説についてはなんとも言えません。「5%有意水準で独立である(関係がない)」とは言えないことに注意しましょう。)

Fisherの正確検定を行うには、fisher.test関数を使います。

> fisher.test(m)

	Fisher's Exact Test for Count Data

data:  m
p-value = 0.05176
alternative hypothesis: true odds ratio is not equal to 1
95 percent confidence interval:
  0.8902322 12.7546580
sample estimates:
odds ratio 
  3.229179 

ここでも、p値が0.051と0.05より大きいので、5%有意水準で独立でない(関係がある)とは言えません。

演習

Sepal.LengthとSepal.Widthの関係を表す散布図、VersicolorのSepal.Lengthの分布を表すヒストグラム、SetosaとVersicolorとVirginicaのSepal.Lengthの分布を表すボックスプロットを作成しよう。

Setosa, Versicolor, VirginicaのSepal.Lengthについて、それぞれの標本平均 [math]\overline{X}[/math] と標本標準偏差 [math]s(X)[/math] を求めてみよう。

また、VersicolorのSepal.Lengthの平均とVirginicaのSepal.Lengthの平均の間に統計的有意な差があるかどうかを調べてみよう。

参考文献

添付ファイル: fileboxplot.png 5件 [詳細] filehistogram.png 5件 [詳細] filemultiscatter.png 4件 [詳細] filescatter.png 3件 [詳細] filehistgram_4.png 120件 [詳細] filedensity.png 120件 [詳細]
トップ   編集 凍結解除 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS