使用 glm() 规范和解释交互项

机器算法验证 r 广义线性模型 相互作用 解释
2022-03-10 14:34:22

我正在使用 R 中的 glm 函数将逻辑模型拟合到数据。我尝试以两种方式指定交互项:

fit1 <- glm(y ~ x*z, family = "binomial", data = myData) 
fit2 <- glm(y ~ x/z, family = "binomial", data = myData) 

我有3个问题:

  1. x*z指定我的交互项与指定我的交互项有什么区别x/d

当我调用报告时summary(fit1),报告包括截距、x、z 和 x:zsummary(fit2)的结果,而仅包括截距、x 和 x:z 的结果。

我确实看过“R 简介”中的第 11.1 节,但无法理解其含义。

  1. 如何在数学上解释拟合方程?具体来说,我如何公式化地解释交互项?

转向数学而不是 R,我是否将等式解释为:

logit(y) = (intercept) + (coeff_x)*x + (coeff_z)*x + (coeff_xz)*x*z
?

这种解释在两种规范fit1fit2. 各自的解释是什么?

  1. 假设上述解释是正确的,我如何在 R 中拟合 x*(1/z) 的模型?我是否需要使用这些值创建另一列?
2个回答

x/z扩展至x + x:z,到目前为止,我只用它来模拟嵌套的随机效应。

set.seed(42)
x <- rnorm(100)
z <- rnorm(100)
y <- sample(c(0,1),100,TRUE)

fit2 <- glm(y ~ x/z, family = "binomial") 
fit3 <- glm(y ~ x + z %in% x, family = "binomial")
identical(summary(fit2)$coefficients,summary(fit3)$coefficients)
#TRUE
fit4 <- glm(y ~ x + x:z, family = "binomial")
identical(summary(fit2)$coefficients,summary(fit4)$coefficients)
#TRUE

fit5 <- glm(y ~ I(x/z), family = "binomial")    
a <- x/z
fit6 <- glm(y ~ a, family = "binomial")
all.equal(summary(fit5)$coefficients,summary(fit6)$coefficients)
#[1] "Attributes: < Component 2: Component 1: 1 string mismatch >"
#which means that only the rownames don't match, but values are identical

我从未在任何公式中见过 x/d。你能给出这样一个页面的链接吗?指定公式的最佳方法是使用 + 和 :,例如,如果您想在 x1 和 x2 上建模 y 以及 x1 和 x2 的交互,您需要给出:y ~ x1 + x2 + x1:x2 或 x1 * x2(这是一个快捷方式)。

现在出现了当你有交互项时解释 coeff 的问题。想象一个简单的线性模型:y ~ x1 + x2。x1 或 x2 的系数分别表示 y 随着 x1 或 x2 增加一个单位而增加。

但是,在您添加交互项的那一刻,解释并不是那么容易。如果在模型中将 x1 增加 1 个单位:y = b0 + b1 x1 + b2 x2 + b3 x1:x2,则 y 的增加为:b1 + b3*x2。如您所见,增加不是线性的,它取决于 x2 的水平。您可以做的是绘制不同水平的 x2 的响应曲线,并绘制 y vs x1,以显示响应的变化。

希望这可以帮助。我将尝试在另一篇文章中回答其余问题。