从泊松回归中的模拟数据中恢复系数

Resurrecting coefficients from simulated data in Poisson regression

我试图了解如何从泊松回归中的模拟数据中恢复模型估计。 StackExchange/CrossValidated (https://stats.stackexchange.com/questions/11096/how-to-interpret-coefficients-in-a-poisson-regression, https://stats.stackexchange.com/questions/128926/how-to-interpret-parameter-estimates-in-poisson-glm-results) 上还有其他关于解释系数的类似帖子,但我认为我的问题有所不同(尽管公认相关)。我试图恢复已知的关系,以了解模型发生了什么。我在这里而不是 CrossValidated 发帖,因为我认为它不是统计解释,而是更多的是我如何通过代码获得已知/模拟的关系。

这是一些模拟数据 yx 与某些响应 resp

的已知关系
set.seed(707)
x<-rnorm(10000,mean=5,sd=1)
y<-rnorm(10000,mean=5,sd=1)        
resp<-(0.5*x+0.7*y-0.1*x*y) # where I define some relationships

使用线性回归,非常简单:

summary(lm(resp~y+x+y:x))

输出显示 x、y 和交互作用之间的精确线性关系。

Coefficients:
              Estimate Std. Error    t value Pr(>|t|)    
(Intercept)  1.592e-14  1.927e-15  8.260e+00   <2e-16 ***
y            7.000e-01  3.795e-16  1.845e+15   <2e-16 ***
x            5.000e-01  3.800e-16  1.316e+15   <2e-16 ***
y:x         -1.000e-01  7.489e-17 -1.335e+15   <2e-16 ***

现在,如果我对泊松回归感兴趣,我需要整数,我只是四舍五入,但保持预测变量和响应变量之间的关系:

resp<-round((0.5*x+0.7*y-0.1*x*y),0)
glm1<-glm(resp~y+x+y:x,family=poisson())
summary(glm1)

Coefficients:
             Estimate Std. Error z value Pr(>|z|)    
(Intercept)  0.419925   0.138906   3.023   0.0025 ** 
y            0.163919   0.026646   6.152 7.66e-10 ***
x            0.056689   0.027375   2.071   0.0384 *  
y:x         -0.011020   0.005261  -2.095   0.0362 *  

据我了解,由于 link 函数,需要对结果取幂才能理解它们。但是在这里,指数估计和截距+估计都没有让我回到原来的值。

> exp(0.419925+0.163919)
[1] 1.792917
> exp(0.163919)
[1] 1.178119

如何将这些值解释为与原始 0.7*y 关系相关?

现在,如果我将相同的线性方程式代入指数函数,我将直接获得值 - 无需使用 exp():

resp<-round(exp(0.5*x+0.7*y-0.1*x*y),0)
summary(glm(resp~y+x+y:x,family=poisson()))
Coefficients:
             Estimate Std. Error z value Pr(>|z|)    
(Intercept)  0.002970   0.045422   0.065    0.948    
y            0.699539   0.008542  81.894   <2e-16 ***
x            0.499476   0.008912  56.047   <2e-16 ***
y:x         -0.099922   0.001690 -59.121   <2e-16 ***

有人可以向我解释我在这里的误解,以及我如何在不首先使用 exp() 函数的情况下找到已知关系的原始值,如上所述?

您忽略了泊松 GLM 默认使用对数 link(指数逆-link)这一事实(或者更确切地说,您没有始终如一地使用该信息)。您应该使用指数倒数生成 'data'-link:

resp <- round(exp(0.5*x+0.7*y-0.1*x*y))

或使用身份 link (family=poisson(link="identity")) 拟合模型。 (我不推荐后者,因为它很少是一个明智的模型。)

就其价值而言,很难模拟 完全 匹配一组指定参数的泊松数据,因为(与可以将方差减小到任意小的高斯分布不同值)你不能生成具有任意小噪声的真实泊松数据。 (您的 round() 语句产生整数,但不是泊松分布的结果。)