2011-05-26 57 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