QMAの全国大会の得点の分析(2)

(1):http://nekokan333.blog.fc2.com/blog-entry-10.html を少し改良してみます。今度は、ほぼシミュレーションに近い形で、
  • ジャンルの選択はそれぞれある一定確率からランダムで抽選
  • 問題の形式はF形式~S形式まで出る確率は同じ
  • 問題の難易度は、EASY:★1~★3、NORMAL:★2~★4、HARD:★3~★5それぞれで、星ごとに1/3ずつ
Rでの導入例:

zenkoku.sim<-function(x){
  # x = ジャンル別パワー
  #ジャンル
  type<-mapply(function(s){
        return(sum(cumsum(c(88,59,39,25,36,36,47)/330)<runif(1))+1)}, 1:6)
  ptype<-as.vector(matrix(type,nr=3,nc=6,byrow=T))
  #難易度
  dfcl<-ceiling(runif(18,min=0,max=3))+rep(0:2,6)
  #形式
  style<-ceiling(runif(18,min=0,max=7))
  #問題別パワー差
  ppd<-x[ptype]-(dfcl-3)*0.8
  #正解不正解
  rnd<-runif(18) #乱数の作成
  tf<-c(rnd<=plogis(ppd), (1-rnd)<=plogis(ppd)) #負の相関法
  #得点計算
  pw<-c(1, 2, 3, 4.4, 5.6) #レベル加重
  ps<-seq(from=40,to=70,by=5)
  points<-colSums(0.8*matrix(tf*pw[dfcl]*ps[style], nc=2))
  return(points)
}

zenkoku<-function(p, class, n=10000){
  if(length(p)!=7 || class<1 || class>5){
    return(NA)
    warning(message="Argument error")
  }
  #ジャンル別パワー
  X<-qlogis(p)+c(1.0,0.5,0,-0.5)[class]
  #得点計算
  score<-rep(0,(n%/%2)*2)
  for(i in 1:(n/2)){
    score[c(2*i-1,2*i)]<-zenkoku.sim(X)
  }
  return(score)
}

ただの乱数シミュレーションですね。先の記事と同様に計算してみます。
p1_mc.png
p2_mc.png p3_mc.png
上から、ミノタウロス・全ジャンル正解率50%、ドラゴン・全ジャンル正解率65%、自分のデータ(クラフ)です。それぞれ2万回テストしています。計算に少し時間がかかりますが(1個3秒ぐらい)こちらのほうがより正確な分布が出るみたいですね。
スポンサーサイト
プロフィール

こしあん

Author:こしあん
(:3[____]
【TwitterID : koshian2】
【ほしい物リスト】http://goo.gl/bDtvG2

Twitter
カウンター
天気予報

-天気予報コム- -FC2-
カテゴリ
月別アーカイブ
最新記事
最新トラックバック
検索フォーム
リンク