理学療法士がまとめたノート

統計学備忘録 since2016

Rを使って統計学を勉強するブログです

シミュレーションの準備

まずはforの使い方(なかなか慣れません)

変数xに1から5を足す
0+1+2+3+4+5=15をfor関数で実行
x<-0
for(i in 1:5) x<-x+i


ベクトルに繰り返し数を付ける
x<-c()
i<-c(1,2,3,4,5)
x<-c(x,i)
for関数で実行
x<-c()
for(i in 1:5) x<-c(x,i)


関数として定義すると
myfunc01<-function(){
x<-c()
for(i in 1:5) {      # for(i in 1:5){}で{}を5回繰り返す
x<-c(x,i)
}
return(x)
}
myfunc01()

次にif関数の基本です(else ifで条件を増やせます)
coin<-function(){
x<-runif(1)        #一様乱数を5個準備
if (x<=1/2) shoubu<-1  #勝負!表=1
else shoubu<-0     #勝負!裏=0
return(shoubu)
}
coin()           #表が出たら1、裏が出たら0

上記のcoin関数結果から表回数を集計したらシミュレーションができそうです
count<-0
if(shoubu==1) count<-count+1

coin関数を10回繰り返して、表の出た回数を合計してみます

myfunc02<-function(n){
count<-0
for(i in 1:n){              # for(i in 1:n){}で{}をn回繰り返すことになる
x<-runif(1)             #一様乱数を5個準備
if (x<=1/2) shoubu<-1      #勝負!表=1
else shoubu<-0          #勝負!裏=0
if(shoubu==1) count<-count+1     #勝負!表=1ならカウントする
}
return(count)
}

myfunc02(10)


先にcoin関数を定義しておくと
coin<-function(){
x<-runif(1)        #一様乱数を準備
if (x<=1/2) shoubu<-1   #勝負!表=1
else shoubu<-0     #勝負!裏=0
return(shoubu)
}


myfunc02を最適化できます
myfunc02<-function(n){
count<-0
for(i in 1:n){         # for(i in 1:n){}で{}をn回繰り返すことになる
x<-runif(1)        #一様乱数を準備
count<-count+coin()      #勝負!表=1ならカウントする(coin関数)
}
return(count)
}

myfunc02(10)

次回はモンテカルロシミュレーションで近似解を得る関数に挑戦したいと思います!