各个帖子中都有一些正确答案,但似乎没有一个将它们放在一起。假设如下:
glm_out <- glm(Y ~ X, data=DT, family = "binomial")
获得优势比
对于逻辑回归,回归系数 (b1) 是X 每增加一个单位,Y 的对数几率增加的估计值。因此,要获得优势比,我们只需使用 exp 函数:
OR <- exp(coef(glm_out))
# pass in coef directly
stargazer(glm_out, coef = list(OR), t.auto=F, p.auto=F)
# or, use the apply.coef option
stargazer(glm_out, apply.coef = exp, t.auto=F, p.auto=F)
获得优势比的标准误差
您不能简单地使用apply.se = exp
来获取标准。优势比的错误
相反,您必须使用以下功能:Std.Error.OR = OR * SE(coef)
# define a helper function to extract SE from glm output
se.coef <- function(glm.output){sqrt(diag(vcov(glm.output)))}
# or, you can use the arm package
se.coef <- arm::se.coef
#Get the odds ratio
OR <- exp(coef(glm_out))
# Then, we can get the `StdErr.OR` by multiplying the two:
Std.Error.OR <- OR * se.coef(glm_out)
所以,为了让它进入 stargazer,我们使用以下内容:
# using Std Errors
stargazer(glm_out, coef=list(OR), se = list(Std.Error.OR), t.auto=F, p.auto=F)
计算优势比的 CI
优势比设置中的置信区间不是对称的。所以,我们不能只做 ±1.96*SE(OR) 来获得 CI。相反,我们可以从原始对数赔率计算它exp(coef ± 1.96*SE)
。
# Based on normal distribution to compute Wald CIs:
# we use confint.default to obtain the conventional confidence intervals
# then, use the exp function to get the confidence intervals
CI.OR <- as.matrix(exp(confint.default(glm_out)))
所以,为了让它进入 stargazer,我们使用以下内容:
# using ci.custom
stargazer(glm_out, coef=list(OR), ci.custom = list(CI.OR), t.auto=F, p.auto=F, ci = T)
# using apply.ci
stargazer(glm_out, apply.coef = exp, apply.ci = exp, t.auto=F, p.auto=F, ci = T)
关于使用置信区间进行显着性检验的注意事项:
不要使用优势比的置信区间来计算显着性(参见底部的注释和参考)。相反,您可以使用对数赔率进行操作:
z <- coef(glm_out)/se.coef(glm_out)
并且,使用它来获取显着性检验的 p.values:
pvalue <- 2*pnorm(abs(coef(glm_out)/se.coef(glm_out)), lower.tail = F)
(来源:https ://data.princeton.edu/wws509/r/c3s1 )
有关统计测试的更详细讨论,请参阅此链接:https ://stats.stackexchange.com/questions/144603/why-do-my-p-values-differ-between-logistic-regression-output-chi-squared-test
然而,重要的是要注意,与 p 值不同,95% CI 不报告测量的统计显着性。在实践中,如果 95% CI 不与空值重叠(例如 OR=1),则通常将其用作统计显着性存在的代表。然而,将具有 95% CI 且跨越空值的 OR 解释为表明暴露与结果之间缺乏关联的证据是不恰当的。 来源:解释赔率比