如何在R语言的Poisson GLM中更改截距以获取完整系数值
获取GLM泊松模型中所有位置的系数值
嗨,这事儿好办!你现在遇到的是R中分类变量默认编码的问题——glm默认用treatment编码,会把分类变量的其中一个水平当作基准(也就是截距项),剩下的水平系数都是和这个基准的差值。要拿到每个位置自己的系数,有两种常用方法:
方法1:移除模型的截距项
直接在公式里加上-1或者0,让模型为每个位置单独拟合系数,这样输出里就会显示所有位置的结果啦:
# 你的原始数据 location = c("DH", "Bos", "Beth") count = c(166, 57, 38) df = data.frame(location, count) # 不带截距的泊松模型 summary(glm(count ~ location - 1, family = poisson))
输出解释
这时候每个locationXXX的系数就是对应位置的log(均值计数):
locationBeth的系数会和你原来模型的截距一致(≈3.6376),对应log(38)locationBos的系数≈4.0431,对应log(57)(正好是原来的截距+locationBos的差值:3.6376+0.4055)locationDH的系数≈5.1120,对应log(166)(3.6376+1.4744)
方法2:修改分类变量的对比编码
如果你想保留截距(作为所有位置的平均log计数),同时拿到每个位置和均值的差值,可以用sum-to-zero编码(偏差编码):
# 设置location的对比方式为sum-to-zero df$location <- factor(df$location, contrasts = contr.sum) # 重新拟合模型 summary(glm(count ~ location, family = poisson))
这种方式下,截距是三个位置log计数的平均值,每个locationX的系数是该位置与均值的差值,三个系数的和为0。不过如果你的需求只是单纯拿到每个位置自己的系数,方法1会更直接易懂。
内容的提问来源于stack exchange,提问作者user9399405
相关产品推荐
相关产品推荐

