2016-11-27 42 views
3

我正在爲一個課程項目工作:這是關於四種不同法國輪盤(37個號碼)策略的統計評估。 前兩個是非常簡單的:計算法國輪盤賭估計值的百分比錯誤無法說明

  • A.投注紅一次
  • B.多項投注一個時間

請找到下面的代碼:

BettingOnRed <- function(){ 
    ball <- sample(1:37, 1, replace=TRUE) 
    if(ball <= 18) amount_won <- 1 
    else   amount_won <- -1 
    c(amount_won, 1) 
} 

BettingOnNumber <- function() { 
    myNumber <- 17 
    ball <- sample(0:36, 1, replace=TRUE) 
    if(myNumber == ball) amount_won <- 35 
    else     amount_won <- -1 
    c(amount_won, 1) 
} 

每個函數返回一個向量length = 2,其中包含贏得的金額和投注數(這總是等於這兩個函數中的一個):該值玩在其他戰略中發揮作用...)。

儘管它們看起來很簡單,但如果我們計算預期獎金的百分比誤差和每場比賽的勝率,我們會部分得到巨大的錯誤。請參閱下表:

Click to see the table

爲了計算預期值,我設置了一個功能simulation()其重複每個遊戲10萬次,並計算你在表中找到值。

我不明白的是:爲什麼每場比賽的獎金百分比錯誤如此之大,而贏得比賽的百分比誤差卻非常小?

請在這裏找到我們用來計算的確切值的公式和遊戲B的百分比誤差:

  • EstWin是每場比賽的獎金B.的估計
  • EstProp是由於評估比賽B的比例獲勝。

各自確切值是:

  • ExactWin = 1/37 * 35 - 36/37 = -1/37
  • ExactProp = 1/37

百分比誤差:

  • PercErrorWin =(EstWin-ExactWin)/ ExactWin
  • PercErrorProp =(EstProp-ExactProp)/ ExactProp

你如何解釋這個錯誤?爲什麼B的錯誤不一樣?我在這裏錯過了一個關於概率的重要事實嗎?

找到我下面的函數「模擬」的負責部分: (作爲第一個參數,它需要從上述兩個功能之一)

simulation <- function(f, n = 100000){ 
    result <- numeric(8) 
    winnings <- numeric(n) 
    games_won <- numeric(n) 
    for (i in 1:n){ 
    fnct <- f() 
    winnings[i] <- fnct[1] 
    games_won[i] <- ifelse(fnct[1] > 0, 1, 0) 
    } 
    result[1] <- mean(winnings) 
    result[2] <- mean(games_won) 
    result 
} 

注意,這並不是全部的功能,我只是刪除了這個問題的不必要的部分。

回答

1

tl; dr你的結果似乎正確;有更多的變化比你想象的(更大的變化在紅色下注...)

有很多方面可以簡化您的模擬,但我認爲你的基本框架是正確的。真的,唯一缺少的是輸出中預期的變化量;如果你仔細研究這一點,你會發現觀察到的和預期的偏差並不令人驚訝。 (你實際上可以用分析的方法來計算這個差異,但是在這裏我會用蠻力的方法來做)。

模擬100次運行,每次運行100,000次。爲了方便起見,我使用plyr::raply()(它會自動彙總結果並實現進度條),但您也可以使用replicate()for循環。

set.seed(101) 
library(plyr) 
rr <- raply(100,simulation(BettingOnNumber,100000),.progress="text") 

繪製平均獎金的分佈:藍色=預期,紅色=從單一模擬中觀察到。

par(las=1,bty="l") 
hist(rr[,1],col="gray",breaks=30, 
    xlab="mean amount won in 100,000 games", 
    ylab="Frequency (100 runs)") 
exp_val <- -0.02703 
obs_val <- -0.04852 
abline(v=c(obs_val,exp_val),col=c("red","blue"),lwd=2) 

enter image description here

下面是這種程度的偏差如何令人驚訝的是一個計算:

mean(abs(rr[,1]-exp_val)>abs(obs_val-exp_val)) ## 0.21 

這意味着你會得到的偏離度預期,並指出,你看到之間,或更多的偏差,約21%的時間(這實際上是一個頻率主義者的p值爲您的結果)。

嘗試使用紅色投注策略進行此實驗,您會看到差異有多小...

+0

非常感謝您的解釋! – upman