2017-09-05 7 views
0

EdX R statsクラスでは、100のダイスロールのセットで '6'がロールされる割合を調べるように求められます。 100ダイスのロールから平均値の差の標準偏差を見るために、100ダイスを10,000回転がすように求められます。replicate()を使用して100回のサイコロを10000回転らせます。予期しない結果

100ダイロールの​​結果は予想通りです。 (1/6 = 0.1666667)

しかし、私は10,000を参照するために100回のサイコロのセットを投げるためにreplicate()をロードすると、結果は私が期待するものではありません。 zを計算するときに、あなたがn <- 100代わりのn <- 10000を設定し、推測で

set.seed(1) 
# get mean of 100 dice rolls 
mean100dice <- function(){ 
    n=100 
    x <- replicate(n, sample(1:6, n, replace=TRUE), simplify='vector') 
    mean(x==6) 
} 
mean100dice() #these come out as expected 

means10k <- replicate(10000, mean100dice(),simplify='vector') 
p = 1/6 
z = (means10k - p)/sqrt(p*(1-p)/n) 
mean(z > 2)  ## I expect this to be > 0 
range(means10k) ## sanity check 

> mean(z > 2) 
[1] 0 
> range(means10k) 
[1] 0.1522 0.1806 
+1

あなたのコードは 'mean100dice'関数の外側で' n'を定義していませんが、あなたはzの定義でそれを使用しています。 nにはどのような価値がありますか?実際にどのような価値があるかテストしてください。 – G5W

+0

私はそれをしたと思います(n値)。 mean(z> 2)now 0.0227 – cumin

答えて

1

:私は= 2 Zスコアの範囲外の値が表示されません。

明示的な変数名を指定することをお勧めします。混同しないようにしてください。たとえば、n_dice_rollsn_replicatesを区別する必要があります。


ちなみに、100ダイスロールの平均を計算するコードは正しくありません。

sample(1:6, n, replace=TRUE)ロールnダイス; replicate()にも電話する必要はありません。私はあなたがこのようなことをしたいと思う。

roll_nd6 <- function(n_dice) { 
    sample(1:6, n_dice, replace = TRUE) 
} 
get_fraction_of_sixes_from_rolling_nd6 <- function(n_dice) { 
    mean(roll_nd6(n_dice) == 6L) 
} 
monte_carlo_simulate_get_fraction_of_sixes <- function(n_replications, n_dice) { 
    replicate(
    n_replications, 
    get_fraction_of_sixes_from_rolling_nd6(n_dice), 
    simplify = "vector" 
) 
} 
calc_z_score <- function(actual_p, expected_p) { 
    (actual_p - expected_p)/
    sqrt(expected_p * (1 - expected_p)/length(actual_p)) 
} 
actual_fraction_of_sixes <- monte_carlo_simulate_get_fraction_of_sixes(10000, 100) 
z_scores <- calc_z_score(actual_fraction_of_sixes, 1/6) 
+0

サンプル()の命名と説明をありがとう。結果は、zスコアの40%が2を上回っていることを示しています。範囲(z_scores)= -31.30495 43.82693;何かがまだ正しくない – cumin

+0

ありがとうございました。問題は最終的にzスコアの絶対値を使用していませんでした:mean(_abs_(z_scores)> 2)。 – cumin

0

あなたはmean100diceに誤りがあります:あなたは100個のサイコロをサンプリングし、その100倍を複製し、それは実際には100個のサイコロのが、100 * 100 =万サイコロの平均ではありません。もちろん、その平均は平均してpに非常に近くなるでしょう。

関連する問題