2014年度マイコースプログラム

4回生K.K. @統計遺伝学分野

8月26日(火)午後

プログラムコードを書くときはスーパーpre記法を利用した方が分かりやすいとの助言を先生から頂いたので、これからははてな記法モードを使うことにする。

はてなブログを使うにあたりブラウザの設定を変えたところ、ポップアップ広告が出てくるようになって大変だったが、設定は変えなくてもはてなブログは使えると判明したので、差し当たり解決した。

麻雀風(??)ゲームの関数の改良とそのプロット

午前の成果に改良を加えて使いやすくした。

myfunc01<-function(x,N){
a<-0
for(i in 1:N){
if (sum(sample(c(1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,6,6,6,6,7,7,7,7,8,8,8,8,9,9,9,9),3))>x)a<-a+1
else a<-a
}
return(a/N)
}

> myfunc01(10,10000)
[1] 0.8445

> myfunc01(15,10000)
[1] 0.4544

さらに、カットオフ値による確率の変化をプロットしてみた(N=10000とした)。

x<-3:27
p<-c()
for(i in 3:27)p<-c(p,myfunc01(i,10000))
plot(x,p)

結果は下の通り

f:id:kouri_don:20140826180958p:plain

きれいなグラフができた。

※ここに至るまでに、

myfunc01(3:27,10000)

としてエラーが出てしまい、「??」となることがあった。

「3:27」がベクトルであることを意識せず、

sqrt(1:5)

のときのようにうまいこと計算してもらえると思っていた。

forを利用するのが正解だったらしい。

ベクトルを代入してよいのは、ベクトルに対応した関数だけであると分かった。

山田先生からの課題の一般化

4個の数字から2個の数字を選ぶという課題を、N個の数字からn個の数字を選ぶ場合に一般化してみる。

runif()だけでは難しかったが、ネットで見つけてきたfloor()の利用によって可能になった。

myfunc01<-function(N){
floor(runif(1, 1, N+1))
}

myfunc02<-function(N,n){
y<-1:N
for(i in N:n+1)y<-y[c(-myfunc01(i))]
return(y)
}

> myfunc02(4,2)
[1] 1 2
> myfunc02(100,50)
 [1]  1  3  6  9 13 14 16 19 20 22 23 29 31 32 33 36 37 39 40 44 45 46 48 49 50 53 55 56 59 60 63 64 65 66 67 68 72 75 77 78 79 85 88 89 90
[46] 92 93 94 96 98

書き方次第でfloor()を使わずともできそうな気はするが、どうすればいいのか分からない。

頭の片隅に置いておいて、これから勉強する中でやり方が発見できることに期待する。



明日は、これらが本当に一様であるかの検定をRを用いてやってみようと思う。

以上