模拟数据和R中的Probit模型

时间:2011-05-26 14:10:43

标签: r statistics

我有一个非常简单的问题,即使用probit模型在R中使用模拟数据。我用来生成数据然后使用该数据运行probit模型的任何方法都会返回关于完美拟合的警告:具体来说:

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模型生成样本数据而不会收到此警告?

  3. 模拟数据用于测试复杂的对数似然函数,我需要确保编码正确。如果这些警告导致概率结果无效,那么使用此数据测试似然函数就没有任何好处!

    非常感谢你的帮助!

1 个答案:

答案 0 :(得分:4)

对于它的价值,我想知道为什么你会采取如此高的差异。如果你看y.star1(这是概率值),那些值有很大的范围(从-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