- ベストアンサー
統計解析フリーソフトウェアRについて。
Rでは、乱数を作ることができますよね。 例えば、サイコロやコイン投げ、じゃんけんなど。 では、次のような乱数を作ることはできますか? 「100点満点のテストを100人が受けたとき、平均点が60点になるような乱数」 もし作ることができるのであれば、入力式を教えていただきたいです。 回答よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
ANo.2の方法がイマイチ気に入らないので、他の方法でスクリプトを書いてみました。 my.rand <- function(m, n) # m:平均点, n:人数, エラー処理なし! { score <- numeric(n) total <- m * n while (total > 0) { x <- sample(1:n, 1) if (score[x] < 100) { score[x] <- score[x] + 1 total = total - 1 } } return(score) } 実行例 > (x <- my.rand(60, 100)) [1] 69 55 71 55 64 58 71 57 64 66 70 60 53 59 64 72 50 59 55 65 64 51 56 47 [25] 57 51 64 62 58 67 71 45 51 60 60 67 48 58 55 73 51 61 82 62 51 55 67 55 [49] 53 52 80 63 65 55 60 64 74 62 62 52 44 64 64 55 69 78 59 51 64 54 44 52 [73] 67 61 49 60 65 67 49 85 58 53 62 51 53 65 46 55 80 66 58 55 63 58 63 62 [97] 49 64 50 60 > mean(x) [1] 60
その他の回答 (3)
> 乱数の考え方以外にも点数を作る方法はあるのですか? 手作業で行うという方法も当然ありますが、まずやることはないでしょう。 欲しい疑似データにどういう性質が必要なのかを把握して、乱数で生成するのが普通でしょう。 ご質問の例には使えないでしょうが、検索してみるといろいろツールがありますね。 キーワード「テストデータ作成」
お礼
ご指導ありがとうございます。 まだまだ勉強不足で、いろいろな発見ができました! なかなかキーワード検索しても自分では見つけられなかったので、とても助かりました! 勉強になりました。ありがとうございます。
> エクセルではなくて、このソフトで行いたくて。。。 Rで先の回答と同じことをしたいならば rand() のところを runif(100) に置き換えればいいのですが、残念ながら平均点が60点ピッタリになりません。 また、必ず20点から100点までの点数しか得られませんし、その区間の点数の分布が一様です。 どうしても60点ピッタリにしたいのであれば、後で点数を調整をするか、他の方法をとるしかないでしょう。 例えば、こんな方法はどうでしょうか。 1.100人の平均点が60点ならば、100人のトータルの点数は6000点なので、人数とトータルを適当な変数に入れておく 2.0から100の乱数を一つ発生させる 3.「トータル>2で得られた乱数」かつ「(トータル-2で得られた乱数)/(人数-1)>100」ならば2に戻る 3.「トータル>2で得られた乱数」かつ「(トータル-2で得られた乱数)/(人数-1)≦100」ならば、トータルから2で得られた乱数を引き、その乱数を点数とする 4.「トータル=2で得られた乱数」ならば、トータルを点数とする 5.「トータル<2で得られた乱数」ならば、0を点数とする 6.人数から1を引く 6.人数が0になるまで2から6を繰り返す 多分これでいけると思いますが、欠点は平均点が高いと100点が多くなり、低いと0点が多くなるかもしれないということと、無駄な乱数発生があることです。
回答しようかと思ってみたら http://okwave.jp/qa/q7029245.html マルチポストですか… その回答者に失礼な行為ですよ。 先の回答では何が不満なのですか?
お礼
回答ありがとうございます。 すみません。 どのジャンルで質問しればいいのかわからなくて。 エクセルではなくて、このソフトで行いたくて。。。 先に回答してくださった方にも、今回回答しようとしてくれた方にも失礼だったと思います。 すみませんでした。
お礼
丁寧な回答ありがとうございます。 色々な考え方も教えていただき、勉強になりました。 そもそも、現実的にテストの点数を入手することができればいいのですが、なかなかそういうわけにもいかず、乱数で点数を入手しようとしとたわけですが、乱数の考え方以外にも点数を作る方法はあるのですか?