2011-05-26 70 views
2

我有一個非常簡單的問題,就是在概率模型中使用R中的模擬數據。我已經使用生成的數據,然後任何方法使用這些數據來運行警告關於完善符合概率模型的回報:具體做法是:模擬數據和R中的概率模型

Warning message: 
In glm.fit(x = X, y = Y, weights = weights, start = start, etastart = etastart, : 
    fitted probabilities numerically 0 or 1 occurred 

有沒有產生這種類型的模型,將不提供此數據的一些方法錯誤?每當我嘗試用probit使用glm()命令時,我都會收到警告。我嘗試了大量不同的set.seed()值,每個仍然返回警告。我也嘗試了幾種不同的方法(和值),但都沒有工作。下面是示例代碼:

n <- 1000 
set.seed(1211) 
b.true1 <- c(-1, 2, .8) 
X1 <- cbind(rnorm(n, 1.5, 2), rnorm(n, -2, 1.3)) 
eps.t1 <- rnorm(n) 
y.star1 <- b.true1[1] + X1%*%b.true1[2:3] + eps.t1 
y1 <- ifelse(y.star1<=0, 0, 1) 
prob2 <- glm(y1~X1, family=binomial(link="probit")) 

所以從這個兩個問題是:

  1. 如果這是一個重大問題?我知道這可能會導致標準錯誤太大,但我不知道是否仍然可以使用模型中給出警告的結果。

  2. 有沒有辦法爲probit模型生成樣本數據而不會收到此警告?

模擬數據被用來測試一個複雜的對數似然函數,我需要確保編碼正確。如果這些警告導致概率結果無效,那麼使用這些數據來測試可能性函數並不會有什麼好處!

非常感謝您的幫助!

+0

這是更適合http://www.crossvalidated.com – 2011-05-26 14:22:09

回答

4

對於它的價值,我想知道爲什麼你採取如此高的差異。如果你看看y.star1(這是probit值),那些值有很大的範圍(從-10到14)。這將導致警告,因爲四捨五入將使概率響應爲0或1.

注意結果並非如此極端,所有您需要擺脫警告。使在X1時的手段和b.true1係數越接近0的差異幫助:

b.true1 <- c(-1, 1, .8) 
X1 <- cbind(rnorm(n, 1.5, 2), rnorm(n, -1, 1.3)) 

沒有給出警告,並仍顯示在數據中的相當好區分:

hist(predict(prob2,type="response")) 

enter image description here

+0

非常感謝您的幫助!我從模擬的代碼開始,我知道在Matlab中工作,並試圖使它在R中工作。我有其他代碼使用不同的值測試版,仍然有錯誤,所以我認爲這是我的設置,而不是係數值。 – Tony 2011-05-26 14:50:25