2012年度 バイオスタティスティクス基礎論 テキスト1

Introduction to Biostatistics 2012, Text 1

 

西田洋巳Hiromi Nishida

 

講義・実習日:2012411日(水)

 

[1-1] 推薦書Recommendation books

 

R による医療統計学

Introductory Statistics with R, Springer-Verlag

Peter Dalgaard岡田昌史監訳丸善

 

統計学:R を用いた入門書

Statistics: An Introduction using R, John Wiley & Sons

Michael J. Crawley野間口謙太郎・菊池泰樹訳共立出版

 

[1-2] Rのダウンロード、起動

http://www.r-project.org/

 

ダウンロードはCRANより行う

 

Rを起動させる

ディレクトリの変更が可能

 

終了するときはq()

Rでは大文字と小文字を区別している

Rではスペースは無視される

 

[1-3] ベクタVector

各要素を連結Concatenate

数字の場合

c(1, 2, 3)

文字の場合

c("A", "B", "C")

なお、a, b, c, ..lettersに、A, B, C, ..LETTERSに収納されているので

LETTERS[1:3]

c("A", "B", "C")に同じである

1:31, 2, 3を示し、[1:3]1番目から3番目までを抽出することを意味している

アルファベットの中でTTruthFFalseを示す

例えば

c(T, T, F)

要素が文字の場合には"T"のようにする必要がある

 

数値の連続Sequence

seq(1, 10)

1から10まで1間隔で示す

seq(1, 10, 2)

1から10まで2間隔で示す

1間隔の場合には

1:10

とすることができる

 

繰り返しReplicate

rep(c(1, 2, 3), 3)

c(1, 2, 3)3回繰り返すことである

rep(c(1, 2, 3), 1:3)

c(1, 2, 3)1番目を1回、2番目を2回、3番目を3回繰り返すことである

rep(1:3, c(3, 2, 1))

1:31番目を3回、2番目を2回、3番目を1回繰り返すことである

 

[1-4] 算術演算Arithmetic operations

a <- c(1, 2, 3)

ac(1, 2, 3)を収納することである

a = c(1, 2, 3)

でも収納することができる

a+a

は各要素の同じ位置における和を示す

a-a

は各要素の同じ位置における差を示す

a*a

は各要素の同じ位置における積を示す

a/a

は各要素の同じ位置における商を示す

c(a, a)

aaの連結を示し、和ではない

a+a; a-a

;を使うと区切ることができる

sqrt(a) #square root

は平方根を意味し、#を用いると切断できる

log(a)

は自然対数である

log2(a)

は底が2の対数である

a > 2

aの中で2より大きいものを判別する

a >= 2

aの中で2以上のものを判別する

a == 2

2と同じものを判別する

a != 2

2ではないものを判別する

aから特定条件を満たすものを抽出するときは

a[a > 2]

のように[ ]を使う(LETTERSを参照)

 

[1-5] 平均、分散Mean, Variance

a <- c(1, 20, 300, 4000)

a[1]-a[4]

a1番目の要素から4番目の要素を引くことを意味している

abs(a[1]-a[4])

は絶対値Absolute valueを示す

sum(a)

aの要素の総和Sum of elementsを示す

length(a)

aのサンプルサイズSample sizeを示す

sum(a)/length(a)

は総和/サンプルサイズであり、平均を意味している

mean(a)

も平均を示す

median(a)

は中央値を示す

要素数が偶数の場合には上位半分の底と下位半分の頂の平均を示す

aの場合には(20+300)/2 = 160

max(a)

は最大値を示す

min(a)

は最小値を示す

range(a)

aの最小値と最大値を示す

sum((a-mean(a))^2)/(length(a)-1)

は平方和/自由度Sum of squares/degrees of freedomであり、不偏分散を意味している

var(a)

も不偏分散Varianceを示す

sqrt(var(a))

は不偏分散の平方根であり、標準偏差を意味している

sd(a)

も標準偏差Standard deviationを示す

 

[1-6] 正規分布Normal distribution

f(x) = (1 / sqrt(2π(variance)))exp(-(x – mean)2/2(variance))

平均が0、分散が1の場合を標準(基準)正規分布Standard normal distributionと呼ぶ

f(x) = (1 / sqrt(2π))exp(-x2/2)

seikibunpu <- function(x) 1/sqrt(2*pi)*exp(-x^2/2)

function()を使うことのより関数を定義することができる

a <- seq(-5, 5, 0.1)

b <- seikibunpu(a)

plot(a, b)

なお、本関数はdnormとして入っている

par(new=T)

は次の図を重ねて示す場合Overwritingに使う

plot(a, dnorm(a), type="l", col="red")

プロットのタイプは他にも"b", "c", "s", "S", "h"などがある

色については

colors()

を参照すると良い

 

a <- rnorm(1000)

は標準正規分布に従う乱数1000個を発生させaに収納することを意味している

rnorm(1000, mean=0, sd=1)としてもよい

mean(a); sd(a)

aの平均と標準偏差

hist(a)

aの分布をヒストグラムHistogramで表す

hist(a, breaks=seq(-4, 4, 0.2), main="rnorm", xlab="")

はヒストグラムを-4から4の範囲で0.2間隔表記、タイトルはrnormX軸ラベルはなしで表す

Separate at 0.2 intervals between -4 and 4; main, title of the histogram; x-axis, no label

hist(a, prob=T)

Y軸を頻度から確率密度への変更を示すChange the y-axis to the density from the frequency

density(a)

は密度評価Density estimationを意味している

lines(density(a))

は近似曲線Fitted curveを描く

lines(density(a, bw=0.5), col="red")

lines(density(a, bw=0.1), col="blue")

などと条件を変えて見ることができる

quantile(a)

はクォンタイル、四分位を示す

summary(a)

aの分布の様子の要約を示す

quantile(a, prob=c(0.025, 0.975))

aの分布における上位2.5%および下位2.5%の値を示す

なお、正規分布における理論値Theoretical valueqnorm(c(0.025, 0.975))により得られる

qqnorm(a)

Q-Qプロットを示し、正規分布にaが従っていると直線に乗る

 

分布に対しての最初の文字については

d, density

p, probability

q, quantile

r, random

をそれぞれ意味している

 

[1-7] ブートストラップBootstrapping

Bradley Efron (1938-)により提案された

例えば、下記aの標本の大きさは5であることから、5回の復元無作為抽出Random sampling with replacementにより一つの仮想データを作成する。この作業を繰り返す。

a <- c(2, 3, 6, 18, 108)

これがオリジナルデータとして

d <- c() #またはd <- numeric()

dをここで定義しておく

for(i in 1:1000) d[i] <- mean(sample(a, 5, replace=T))

1000の仮想データを生成し、個々の平均を求め、dに収納することを意味しているGenerate 1000 virtual data

hist(d)

によりdのヒストグラムを作成する

mean(d)

これは仮想データの平均値1000個の平均値を示す

この値を実際のデータの平均を比較するCompare it with mean(a)

 

ブートストラップ解析は系統樹における分岐の評価に使われているIn phylogenetics, the bootstrapping has been used frequently.

Felsenstein J (1985) Confidence-limits on phylogenies – an approach using the bootstrap. Evolution vol. 39, pp. 783-791

Efron B et al. (1996) Bootstrap confidence levels for phylogenetic trees. Proc Natl Acad Sci USA vol. 93, pp. 13429-13434

 

[1-8] 中心極限定理Central limit theorem

サンプル平均値の分布はサンプリングを繰り返すことにより正規分布に近づく

When we obtained a mean from a sample, repeated it many times, the distribution of those means tend to follow the normal distribution.

 

母集団が一様分布でサンプルサイズ1、サンプリング回数1000の場合

Population, uniform distribution

Sample size, 1

Sampling number, 1000 times

a1 <- c()

for(i in 1:1000) a1[i] <- mean(runif(1))

1000のデータをa1に収納

 

母集団が一様分布でサンプルサイズ2、サンプリング回数1000の場合

Population, uniform distribution

Sample size, 2

Sampling number, 1000 times

a2 <- c()

for(i in 1:1000) a2[i] <- mean(runif(2))

a2に収納

 

母集団が一様分布でサンプルサイズ10、サンプリング回数1000の場合

Population, uniform distribution

Sample size, 10

Sampling number, 1000 times

a10 <- c()

for(i in 1:1000) a10[i] <- mean(runif(10))

a10に収納

 

a1, a2, a10の分布を比較するCompare the distributions of a1, a2, and a10

par(mfrow = c(3, 1))

3つの図を31列で表記することを意味しているDisplay three figures (3 rows, 1 column)

hist(a1)

hist(a2)

hist(a10)

 

Q-Qプロットで比較すると

par(mfrow = c(1, 1))

qqnorm(a1, ylim=c(0, 1))

par(new=T)

qqnorm(a2, ylim=c(0, 1), col="blue")

par(new=T)

qqnorm(a10, ylim=c(0, 1), col="red")

直線に乗っている方が正規分布に近いことを示す

 

[1-9] 集合、並び替えなどUnion, Intersect, Sort, etc.

a <- runif(100, 1, 100)

1から100の範囲で一様分布に従う乱数を100個生成し、aに収納する

100 random numbers from a uniform distribution (in the range from 1 to 100)

b <- runif(100, 1, 100)

aと同様の内容であるが、中身は違う

union(a, b)

abの結合集合を意味している

intersect(a, b)

は共通集合を意味している

a <- trunc(a); b <- trunc(b)

は要素の整数部分Integers of elementsだけを要素とすることを意味している

union(a, b); intersect(a, b)

を先ほどの結果と比較する

特定の要素を抽出するには

a[30]; a[101]

a30番目、a101番目の抽出を意味しており、ここでは101番目は存在していない

NA欠損Not Availableを意味しており、NaN非数Not a Numberと間違わないように

1/0; -1/0

は無限大Infinityとなる

a[a>20]; a[a>20 & a<=30]

20より大きな要素の抽出、20より大きく30以下の要素の抽出を意味している

a[1] <- 30

a1番目を30に換えることを意味しているChange the first element to 30

rev(a)

は反転Reverseを示す

order(a)

aの中で小さい値から何番目に存在しているかを示す、デフォルトDefaultdecreasing=F

sort(a)

は要素の値が小さいものから並び換える、a[order(a)]に同じ

 

[1-10] 行列Matrix

matrix(c(1, 2, 3, 4, 5, 6), 2, 3)

は要素1, 2, 3, 4, 5, 623列に行列させる

matrix(c(1, 2, 3, 4, 5, 6), 2)

も同じこと

matrix(c(1, 2, 3, 4, 5, 6), nrow=2)

も同じこと

matrix(c(1, 2, 3, 4, 5, 6), ncol=3)

も同じこと

matrix(c(1, 2, 3, 4, 5, 6), 2, byrow=T)

は要素を並べる際に行を埋めて次の行へということを示す

 

a <- c(1, 2, 3, 4, 5)

b <- c(2, 4, 6, 8, 10)

ab <- data.frame(a, b)

はベクトルabをデータフレーム化(abは列となる)

ab[ ,1]

はデータフレームab1列目を抽出する

ab[ ,2]

2列目を抽出する

ab[1, ]

1行目を抽出する

ab[3, ]

3行目を抽出する

 

a <- matrix(1:6, 2, byrow=T)

rownames(a) <- c("A", "B")

1行目をA2行目をBと名づける

colnames(a) <- letters[1:3]

1列目、2列目、3列目をa, b, cと名づける

t(a)

は転置関数Transposition functionを意味する

cbind(A=1:3, B=4:6)

は列で結合する

rbind(A=1:3, B=4:6)

は行で結合する

a <- matrix(1:10, ncol=2)

a[ ,1]

1列目を抽出する

a[ ,1]>3

1列目の要素で3より大きいものを示す

a[a[ ,1]>3, ]

1列目の要素で3より大きいものを持つ行を抽出する

a[a[ ,1]>3, ][ ,2]

1列目の要素で3より大きいものを持つ行を抽出し、その2列目の要素を抽出する

a[a[,1]>3, 2]に同じ

apply(a, 1, mean)

は各行の平均Mean of rowを示す

apply(a, 2, median)

は各列の中央値Median of columnを示す

apply(a, c(1,2), sqrt)

はすべての要素の平方根を示す、sqrt(a)でもできる