R 将gamma GLM反向转换为自然单位,以便能够预测未采样位置的值
我正在研究生态数据,我使用摄像机对动物检测进行采样(转换为生物量),并运行各种模型,通过查看诊断图、AIC和参数效应大小来确定最佳拟合模型。该模型为伽马GLM(由于生物量具有连续响应),具有对数链接。所选模型具有到水的距离(“dist_water”)和到森林斑块的距离(“dist_F3”)的预测变量。这是模型摘要:R 将gamma GLM反向转换为自然单位,以便能够预测未采样位置的值,r,glm,gamma-distribution,R,Glm,Gamma Distribution,我正在研究生态数据,我使用摄像机对动物检测进行采样(转换为生物量),并运行各种模型,通过查看诊断图、AIC和参数效应大小来确定最佳拟合模型。该模型为伽马GLM(由于生物量具有连续响应),具有对数链接。所选模型具有到水的距离(“dist_water”)和到森林斑块的距离(“dist_F3”)的预测变量。这是模型摘要: glm(formula = RAI_biomass ~ Dist_water.std + Dist_F3.std, family = Gamma(link = "log"),
glm(formula = RAI_biomass ~ Dist_water.std + Dist_F3.std, family = Gamma(link = "log"),
data = biomass_RAI)
Deviance Residuals:
Min 1Q Median 3Q Max
-2.3835 -1.0611 -0.3937 0.4355 1.5923
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 5.3577 0.2049 26.143 2.33e-16 ***
Dist_water.std -0.7531 0.2168 -3.474 0.00254 **
Dist_F3.std 0.5831 0.2168 2.689 0.01452 *
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
(Dispersion parameter for Gamma family taken to be 0.9239696)
Null deviance: 41.231 on 21 degrees of freedom
Residual deviance: 24.232 on 19 degrees of freedom
AIC: 287.98
Number of Fisher Scoring iterations: 7
在运行模型之前,协变量被标准化。我现在需要做的是将该模型转换为自然单位,以便预测未采样位置(本例中为农场)的生物量值。我做了一张表格,列出了每个农场和它们到水的距离,以及到森林斑块的距离。我认为这样做的方法是使用exp(coef(biomatical_glm)),但当我这样做时,dist_water.std系数改变了方向并变为正值
exp(coef(biomass_glm8))
## Intercept Dist_water.std Dist_F3.std
## 212.2369519 0.4709015 1.7915026
对我来说,这似乎是有问题的,因为在最初的GLM中,离水的距离增加意味着生物量的减少(这是有道理的)——但现在我们看到了相反的情况?计算的生物量响应范围非常窄,从210.97-218.9331(相比之下,原始数据中的生物量范围为3.04-2227.99)
然后,我尝试取整个模型的指数,而不是单独取每个系数的指数:
farms$biomass_est2 <- exp(5.3577 + (-0.7531*farms$Farm_dist_water_std) + (0.5831*farms$Farm_dist_F3_std))
我的问题是,为什么这些估计值不同,最好的方法是用日志链接将gamma GLM转换为可用于计算预测值的格式?如果有任何帮助,我们将不胜感激!为什么不使用预测函数?这是否考虑了GLM与日志链接和新数据(在自然尺度下)我正试图获得@AishaUduman的预测值-我不这么认为,不。你应该使用原始数据的平均值和标准偏差来缩放新数据,然后在
predict()中使用它
函数。此外,我认为对数标度上的负系数在求幂时为正是有意义的——你可以将求幂后的系数解释为一个乘数:为农场制作一个带有dist_water和dist_F3列的新数据框(我需要一个预测的生物量估计),通过原始数据的平均值和标准差进行标准化:farms\u predict Ignore-成功了!谢谢:)为什么不直接使用预测函数?这是否考虑到了glm与日志链接和新数据(自然尺度)之间的尺度差异?我正试图获得预测值?@AishaUduman-我不这么认为,不可以。您需要使用原始数据的平均值和标准偏差来缩放新数据,然后在predict()
函数中使用该值。此外,我认为对数标度为负的系数在指数化时为正是有意义的——你可以将指数化的系数解释为一个乘数:为农场制作了一个包含dist_water和dist_F3列的新数据框(我需要一个预测的生物量估计),通过原始数据的平均值和标准差进行标准化:farms\u predict Ignore--让它开始工作了!谢谢:)
(e^(-0.7531))-1 #dist_water = -0.5290955
(e^(0.5831))-1 #dist_F3 = 0.7915837
(e^(5.3577))-1 #intercept = 211.2362