R Random Number Generation 乱数の作成
ゼミで特定の分布に従う乱数の作成法について勉強したので、備忘のため、記録しておく。特定のデータがあり、そのデータの分布に従ったデータを生成したいときに重宝する。
実際にやってみる。ある商品の希望買い取り価格調査を19名に対して行ったとして、そのデータの分布からシュミレーション用データを生成するプログラムを記す。(架空のデータです)
library(MASS) #for truehist() #手順1:一様乱数の生成 data <- c(4000,6500,10000,7500,20000,3000,25000,1500,8000,4000, 5000,5000,15000,4500,1500,3000,30000,6000,1500) truehist(data,prob=FALSE) #観測データの分布 n <- 10^5 x <- runif(n) #一様乱数の生成 #手順2:対象のデータの密度分布を求める d <- density(data,cut=0) #手順3:観測データのクオンタイルからシュミレーションデータを生成 simx <- quantile(data,x) truehist(simx,prob=FALSE) #生成したデータの分布 #確率密度の比較 sim.d <- density(simx,cut=0) maxy <- max(d$y,sim.d$y) plot(d,type="l",ylim=c(0,maxy),xlab="price",ylab="density",main=paste("確率密度の比較")) lines(sim.d,type="l",col=2) legend("topright", legend=c("observed", "simulated"), lty=1, col=1:2)
もともとのデータの確率密度と、生成したデータの確率密度を比較すると以下のようになる。最頻値付近は生成したデータの方がサンプル数が集中してしまうようだ。原因を考えなければいけないが、とりあえず保留。