我编了一个例子来说明我的问题。想象一下,我有一个数据集,并且我训练了一个具有伽马分布残差的广义线性模型。
library(MASS)
df <- read.csv('test.csv')
model <- glm(formula = y ~ method * site + year + 0,
family=Gamma(link = "log"), data = df)
我得到的东西看起来像这样:
> summary(model)
Coefficients:
Estimate Std. Error t value Pr(>|t|)
methodM0 3.89533 0.13670 28.496 < 2e-16 ***
methodM1 5.63965 0.20940 26.933 < 2e-16 ***
methodM2 -55.854107 73.982453 -0.755 0.450
methodM3 -55.731730 73.986509 -0.753 0.451
siteS1 -0.002872 0.098226 -0.029 0.977
siteS2 0.060892 0.107795 0.565 0.572
siteS3 -0.016239 0.102258 -0.159 0.874
year 0.030813 0.036743 0.839 0.402
methodM1:siteS1 -0.030616 0.144592 -0.212 0.832
methodM2:siteS1 -0.030632 0.144663 -0.212 0.832
methodM3:siteS1 0.064179 0.145593 0.441 0.659
methodM1:siteS2 -0.146505 0.152012 -0.964 0.335
methodM2:siteS2 -0.039610 0.148024 -0.268 0.789
methodM3:siteS2 -0.202881 0.150406 -1.349 0.178
methodM1:siteS3 NA NA NA NA
methodM2:siteS3 0.081617 0.144040 0.567 0.571
methodM3:siteS3 -0.064155 0.147771 -0.434 0.664
该表是虚构数字的结果,但关键是我在方法 M1 和站点 S3 之间有一个交互,它给出NA
. 如何将 GLM 设置为不计算该特定交互,在训练后删除该交互,或将模型中的那些 NA 值设置为0
?
更新
@jared_mamrot 给出的答案指出了这个非常相似的相关问题:
s <- source("http://pastebin.com/raw.php?i=EcMEVqUC")$value
lm(income ~ age + cit * prof, data=s)
这里lm
而不是glm
遵循,但我发现当我对相关问题运行接受的答案时,更新似乎甚至没有修复这个例子。
model1 <- lm(income ~ age + cit * prof, data=s)
model2 <- update(model1, . ~ . - citforeign:profofficial)
看着model1
,我们有
> model1
Call:
lm(formula = income ~ age + cit * prof, data = s)
Coefficients:
(Intercept) age citwest citforeign
2205.231 -3.825 74.871 30.066
profblue-collar profofficial citwest:profblue-collar citforeign:profblue-collar
-189.146 -147.332 27.792 -60.223
citwest:profofficial citforeign:profofficial
-122.220 NA
看着model2
我们有同样的
> model1
Call:
lm(formula = income ~ age + cit * prof, data = s)
Coefficients:
(Intercept) age citwest citforeign
2205.231 -3.825 74.871 30.066
profblue-collar profofficial citwest:profblue-collar citforeign:profblue-collar
-189.146 -147.332 27.792 -60.223
citwest:profofficial citforeign:profofficial
-122.220 NA
如您所见,update
似乎没有删除NA
.