负二项回归中标度连续变量的非标度系数
Unscale coefficient of scaled continuous variable in negative binomial regression
我正在拟合负二项式回归。在拟合模型之前,我缩放了所有连续预测变量。我需要转换比例预测变量的系数,以便能够在其原始比例上解释它们。示例:
# example dataset
set.seed(1)
dep <- dnbinom(seq(1:150), size = 150, prob = 0.75)
ind.1 <- ifelse(sign(rnorm(150))==-1,0,1)
ind.2 <- rnorm(150, 10, 1.7)
df <- data.frame(dep, ind.1, ind.2)
# scale continuous independent variable
df$ind.2 <- scale(df$ind.2)
# fit model
m1 <- MASS::glm.nb(dep ~ ind.1 + ind.2, data = df)
summz <- summary(m1)
要获得 ind.1
的结果,我采用 exponential of the coefficient:
# result for ind.1
exp(summz$coefficients["ind.1","Estimate"])
> [1] 1.276929
这表明 ind.1
每增加 1 个单位,您预计 dep
会增加 1.276929。但是 ind.2
呢?我收集到,随着预测变量的缩放,系数可以解释为 ind.2
的 1 标准差 增加对 dep
的影响。如何将其转换回原始单位? This answer 说要将系数乘以预测变量的 sd,但是在 logit link 的情况下如何做到这一点? exp(summz$coefficients["ind.2","Estimate"] * sc)
好像说不通。
设置数据:
set.seed(1)
dep <- dnbinom(seq(1:150), size = 150, prob = 0.75)
ind.1 <- ifelse(sign(rnorm(150))==-1,0,1)
ind.2 <- rnorm(150, 10, 1.7)
df <- data.frame(dep, ind.1, ind.2)
sc <- sd(df$ind.2)
拟合未缩放和缩放模型:
m_unsc <- MASS::glm.nb(dep ~ ind.1 + ind.2, data = df)
m_sc <- update(m_unsc, data = transform(df, ind.2 = drop(scale(df$ind.2))))
比较系数:
cbind(coef(m_unsc), coef(m_sc))
[,1] [,2]
(Intercept) -5.50449624 -5.13543854
ind.1 0.24445805 0.24445805
ind.2 0.03662308 0.06366992
检查等价性(我们将缩放系数除以缩放因子(sc
=sd(ind.2)
)得到未缩放系数):
all.equal(coef(m_sc)["ind.2"]/sc, coef(m_unsc)["ind.2"])
负二项式模型使用对数 link,而不是对数 link,因此如果您想对系数进行反变换以获得每单位 [= 的比例或“折叠”变化17=]:
exp(coef(m_sc)["ind.2"]/sc)
这给出 1.0373,ind.2
中每单位变化的响应变化 4%(您可以确认它与对未缩放系数取幂相同)。
注意 linked question 中 2/3 的答案,包括当前接受的答案,是错误的:你应该将缩放系数除以缩放因子,不相乘...
我正在拟合负二项式回归。在拟合模型之前,我缩放了所有连续预测变量。我需要转换比例预测变量的系数,以便能够在其原始比例上解释它们。示例:
# example dataset
set.seed(1)
dep <- dnbinom(seq(1:150), size = 150, prob = 0.75)
ind.1 <- ifelse(sign(rnorm(150))==-1,0,1)
ind.2 <- rnorm(150, 10, 1.7)
df <- data.frame(dep, ind.1, ind.2)
# scale continuous independent variable
df$ind.2 <- scale(df$ind.2)
# fit model
m1 <- MASS::glm.nb(dep ~ ind.1 + ind.2, data = df)
summz <- summary(m1)
要获得 ind.1
的结果,我采用 exponential of the coefficient:
# result for ind.1
exp(summz$coefficients["ind.1","Estimate"])
> [1] 1.276929
这表明 ind.1
每增加 1 个单位,您预计 dep
会增加 1.276929。但是 ind.2
呢?我收集到,随着预测变量的缩放,系数可以解释为 ind.2
的 1 标准差 增加对 dep
的影响。如何将其转换回原始单位? This answer 说要将系数乘以预测变量的 sd,但是在 logit link 的情况下如何做到这一点? exp(summz$coefficients["ind.2","Estimate"] * sc)
好像说不通。
设置数据:
set.seed(1)
dep <- dnbinom(seq(1:150), size = 150, prob = 0.75)
ind.1 <- ifelse(sign(rnorm(150))==-1,0,1)
ind.2 <- rnorm(150, 10, 1.7)
df <- data.frame(dep, ind.1, ind.2)
sc <- sd(df$ind.2)
拟合未缩放和缩放模型:
m_unsc <- MASS::glm.nb(dep ~ ind.1 + ind.2, data = df)
m_sc <- update(m_unsc, data = transform(df, ind.2 = drop(scale(df$ind.2))))
比较系数:
cbind(coef(m_unsc), coef(m_sc))
[,1] [,2]
(Intercept) -5.50449624 -5.13543854
ind.1 0.24445805 0.24445805
ind.2 0.03662308 0.06366992
检查等价性(我们将缩放系数除以缩放因子(sc
=sd(ind.2)
)得到未缩放系数):
all.equal(coef(m_sc)["ind.2"]/sc, coef(m_unsc)["ind.2"])
负二项式模型使用对数 link,而不是对数 link,因此如果您想对系数进行反变换以获得每单位 [= 的比例或“折叠”变化17=]:
exp(coef(m_sc)["ind.2"]/sc)
这给出 1.0373,ind.2
中每单位变化的响应变化 4%(您可以确认它与对未缩放系数取幂相同)。
注意 linked question 中 2/3 的答案,包括当前接受的答案,是错误的:你应该将缩放系数除以缩放因子,不相乘...