検定でよく使われるt分布も、正規乱数から導くことができます。
- 10000行×5列のデータフレームd01に、独立の標準正規乱数を50000個代入し、各列に、X1、X2、X3、X4、X5という名前をつけなさい。
- 各列を2乗し、合計をとった値
\[X_2^2+X_3^2+X_4^2+X_5^2\]
をd02に代入しなさい。ちなみにd02は、どんな分布に従いますか? - X1をd02を4で割ったものの平方根で割り、それをd03に代入しなさい。
\[\frac{X_1}{\sqrt{\frac{d02}{4}}}\] - d03と自由度4のt分布を比較しなさい。
R Tips
data.frame関数は、データフレームを作成します。4行3列のデータフレームは、
data.frame(c(1,2,3,4),c(5,6,7,8),c(9,10,11,12))
というふうにベクトルをくっつけてもつくれるし、一旦行列として
data.frame(matrix(1:12,nrow=4,ncol=3))
とすることもできます。
列に名前を与えるときは、colnames関数(またはnames関数)を使って、
colnames(d01)<-c(“name1″,”name2″,”name3”)
というふうにします。このように名前を与えるとデータフレームd01だったら、d01$name1というふうに列のデータを取り出すことができます。ちなみに行に名前を与えるときは、rownames関数を使います。
matrix関数は、引数に、行列にしたい数字を与えて、その後行の数をnrow=、列の数をncol=で与えると、行列を返します。引き数名は、順番を間違えなければ、省略することもできます。列数か行数かのどちらかがわかるだけでもよいので、どちらかの数字を省略することもできます。以下は、すべて同じです。
matrix(1:12,nrow=4,ncol=3)
matrix(1:12,4,3)
matrix(1:12,,3)
matrix(1:12,4,)
matrix関数は、与えられたベクトルの要素を1列→2列→・・・の順番で配置していきますが、これを1行→2行→・・・の順番で配置したいときは、byrow=の引数を使います。
matrix(1:12,4,3,byrow=T)
attach関数を使うと、特定のデータフレームの列(変数)を、データフレーム名無しで扱うことができるようになります。通常d01のname1という変数は、
d01$name1
d01[,”name1″]
d01[,1] #name1が1列めに入っているとしたら
のいずれかで指定しますが、
attach(d01)
とすると
name1
だけで指定できます。attachを解除するときはdetach関数を使います。
detach(d01)
name1
を試してみてください。
dt関数は、t分布の確率密度を返します。t=2のとき、$t$が自由度3のt分布に従うとき、$t=2$の確率密度は、
dt(2,3)
で求めることができます。

[sourcecode language=’c’]f01<-function(x) dt(x,1) f02<-function(x) dt(x,2) f03<-function(x) dt(x,3) f05<-function(x) dt(x,5) f10<-function(x) dt(x,10) f50<-function(x) dt(x,50) curve(f01,x=c(-8,8),ylim=c(0,0.4),col=1) par(new=T) curve(f02,x=c(-8,8),ylim=c(0,0.4),col=2) par(new=T) curve(f03,x=c(-8,8),ylim=c(0,0.4),col=3) par(new=T) curve(f05,x=c(-8,8),ylim=c(0,0.4),col=4) par(new=T) curve(f10,x=c(-8,8),ylim=c(0,0.4),col=5) par(new=T) curve(f50,x=c(-8,8),ylim=c(0,0.4),col=6) par(new=T) curve(dnorm,x=c(-8,8),ylim=c(0,0.4),col=1) [/sourcecode]
統計のはなし
確率変数$X$並びに$X_1,X2,…,X_k$が、独立に標準正規分布$N(0,1)$に従うとき、
\[
\frac{X}{\sqrt{\frac{X_1^2+X_2^2+\cdots +X_k^2}{k}}}
\]
は、自由度$k$のt分布に従う。