#r #sas #logistic-regression
#r #sas #логистическая регрессия
Вопрос:
Я запускаю логистическую модель с взаимодействием между дихотомической и непрерывной переменной:
aidslogit<-glm(cd4~ AGE ANTIRET AGE*ANTIRET, data = aidsdata, family = "binomial")
summary(aidslogit, digits=3)
Deviance Residuals:
Min 1Q Median 3Q Max
-1.870 -1.190 0.771 1.056 1.586
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -0.599565 0.313241 -1.914 0.0556 .
AGE -0.008340 0.008849 -0.942 0.3459
ANTIRET 1.308591 0.198031 6.608 3.9e-11 ***
AGE:ANTIRET -0.013547 0.005507 -2.460 0.0139 *
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
(Dispersion parameter for binomial family taken to be 1)
Null deviance: 9832.8 on 7264 degrees of freedom
Residual deviance: 9434.9 on 7261 degrees of freedom
(654 observations deleted due to missingness)
AIC: 9442.9
Number of Fisher Scoring iterations: 4
Что я хотел бы сделать, так это рассчитать OR и 95% CI для использования антиретровирусных препаратов в разном возрасте, то есть в возрасте 20, 30 и 40 лет. Я думаю, я мог бы вывести ковариации и сделать это вручную, но, похоже, должен быть способ сделать это автоматически.
Для сравнения:
В SAS это выглядело бы так:
proc logistic data=aidsdata descending;
model cd4=antiret age antiret*age;
oddsratio antiret /at (age=20 30 40);
run;
Комментарии:
1. проверьте
emmeans
пакет.
Ответ №1:
Для регрессии без взаимодействий отношение шансов для каждого коэффициента равно exp(coef(aidslogit))
. Это отношения шансов для изменения на единицу в данной переменной.
Но при взаимодействии необходимо учитывать как основной эффект, так и взаимодействие. В этом случае AGE
является вторым коэффициентом и AGE:ANTIRET
является четвертым коэффициентом, поэтому:
# Odds ratio for a one-unit change in AGE when ANTIRET=0
OR = exp(coef(aidslogit)[2])
# Odds ratio for a one-unit change in AGE when ANTIRET=1
OR = exp(coef(aidslogit)[2] coef(aidslogit)[4])
Чтобы рассчитать отношение шансов для других AGE
различий, умножьте коэффициенты на эту сумму. Например, чтобы получить отношение шансов для изменения на 10 единиц в AGE
:
# Odds ratio for a 10-unit change in AGE when ANTIRET=0
OR = exp(10 * coef(aidslogit)[2])
# Odds ratio for a 10-unit change in AGE when ANTIRET=1
OR = exp(10 * (coef(aidslogit)[2] coef(aidslogit)[4]))
Комментарии:
1. Спасибо — я должен был добавить, что большая проблема заключается в получении доверительного интервала.
2. В таком случае дайте нам знать,
emmeans
(как предложено выше @BenBollker) делает ли то, что вам нужно.3. Если я достаточно поработаю с emmeans, я смогу получить бета-коэффициенты и связанный SE, но я не смог заставить его напрямую выводить коэффициенты шансов для такого анализа. (Я уверен, что есть способ; я не опытный пользователь R.) Если кто-то может опубликовать код, я был бы признателен.