【问题标题】:Simulated Data and the Probit Model in RR中的模拟数据和Probit模型
【发布时间】:2011-05-26 14:10:42
【问题描述】:

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

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

是否有某种方法可以为这种类型的模型生成不会出现此错误的数据?每当我尝试使用带有概率的 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. 有没有办法为概率模型生成样本数据而不会收到此警告?

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

非常感谢您的帮助!

【问题讨论】:

标签: r statistics


【解决方案1】:

对于它的价值,我想知道你为什么要接受如此高的差异。如果您查看 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"))

【讨论】:

  • 非常感谢您的帮助!我从我知道在 Matlab 中工作的模拟代码开始,并试图让它在 R 中工作。我有其他代码使用不同的 beta 值但仍然出现错误,所以我认为这是我的设置而不是系数值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-02-17
  • 2017-08-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-27
  • 1970-01-01
相关资源
最近更新 更多