R:残差建模

时间:2021-05-04 12:51:05

标签: r modeling glm

我听说人们在创建先验模型之后想要计算一些效果时会谈到“对残差建模”。。例如,如果他们知道 var_1var_2 两个变量是相关的,我们首先用 var_1 建立模型,然后对 var_2 的影响进行建模。我的问题是我在实践中从未见过这样做过。

我对以下内容感兴趣:

  1. 如果我使用的是 glm,我该如何解释所使用的 link function
  2. 在以 glm 作为解释变量运行第二个 var_2 时,我应该选择什么分布? 我认为这与 1 相关。
  3. 这是否与使用第一个模型预测作为第二个模型中的偏移量有关?

我的尝试

dt <- data.table(mtcars) # I have a hypothesis that `mpg` is a function of both `cyl` and `wt`
dt[, cyl := as.factor(cyl)]
model <- stats::glm(mpg ~ cyl, family=Gamma(link="log"), data=dt) # I want to model `cyl` first
dt[, pred := stats::predict(model, type="response", newdata=dt)]
dt[, res := mpg - pred]

# will this approach work?
model2_1 <- stats::glm(mpg ~ wt + offset(pred), family=Gamma(link="log"), data=dt)
dt[, pred21 := stats::predict(model2_1, type="response", newdata=dt) ]

# or will this approach work?
model2_2 <- stats::glm(res ~ wt, family=gaussian(), data=dt)
dt[, pred22 := stats::predict(model2_2, type="response", newdata=dt) ]

我的第一个建议方法存在收敛问题,但这就是我愚蠢的大脑处理这个问题的方式。感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

从某种意义上说,ANCOVA 是“对残差建模”。 ANCOVA 的模型是 y_i = grand_mean +treatment_i + b * (covariate - covariate_mean_i) + error 对于每个处理 i。项(covariate - covariate_mean_i)可以看作是协变量为DV、处理为IV的模型的残差。

以下回归等价于这个 ANCOVA:

lm(y ~ treatment * scale(covariate, scale = FALSE))

应用于数据的内容如下所示:

lm(mpg ~ factor(cyl) * scale(wt, scale = FALSE), data = mtcars)

并且可以变成类似于您在示例中使用的 glm

glm(mpg ~ factor(cyl) * scale(wt, scale = FALSE), 
    family=Gamma(link="log"), 
    data = mtcars)