为什么R和SAS中的日志二项式回归结果不同?

时间:2014-08-27 05:13:00

标签: r sas glm

我是R新手,我一直在玩数据集来学习R.我的大部分经验都是在SAS。因此,在尝试对二分类结果和暴露变量进行对数二项式回归时,我立即注意到R产生的结果与我做的应急分析不一致,即产生粗略的相对风险估计,并且来自SAS结果。

数据集有400个观测值。结果是接受大学(1 =是,0 =否),自变量是高中班级(1 =高,0 =低)。

我创建了一个2x2表:

      Admission     Row Total
Rank   1      0
   1  87    125     212
   0  40    148     188

在这里可以看出,高排名使得入读大学的概率增加了1.9 [(87/212)/(40/188)]。粗略估计将产生约0.65(ln 1.9)的β系数。然而,当我在R中运行对数二项式回归时,它产生的β系数为0.289。

这是我的代码:

glm(formula = admit ~ rank, family = binomial(link = log), data = my data)

我知道在R中我必须将数值变量转换为“因子”并对它们进行排序。两个变量的参考组都是0.

在SAS中,我使用的代码是:

proc genmod data=temp; model admit=rank/link=log dist=binomial;
estimate 'Prob of admission by rank' rank 1/exp;
run;  

排名的测试版为0.657(RR = 1.93)。我错过了什么吗?我知道这似乎是一个基本问题,但我找不到我的错误。

2 个答案:

答案 0 :(得分:1)

使你的指示组1而不是0似乎解决了它

# change the reference level:
x$rank <-  relevel(factor(x$rank),"1")
x$admit <- relevel(factor(x$admit),"1")

fit <- glm(admit ~ rank, data=x, family=binomial(link="log"))
coef(fit)
#(Intercept)       rank0 
# -1.5475625   0.6568844 
exp(coef(fit))
#(Intercept)       rank0 
#   0.212766    1.928774 

这是否是一件好事还是有点可疑 - 请在此处阅读更多内容:

http://r.789695.n4.nabble.com/Relative-Risk-in-logistic-regression-td4657040.html

答案 1 :(得分:1)

(您的数字错误:基于排名的赔率是(87/125)/(40/148)= 2.5752,以及 log-odds ,这是逻辑回归系数,为0.946。)

默认情况下,R选择因子的第一级作为参考级别。然而,SAS选择最后一级。有一个contr.SAS功能专门用于复制SAS结果。你也可以使用relevel作为@thelatemail说的。

> df <- data.frame(rank=factor(0:1), admit=c(40, 87), nonadmit=c(148, 125))
> contrasts(df$rank) <- contr.SAS(2)
> glm(cbind(admit, nonadmit) ~ rank, family=binomial, data=df)

Call:  glm(formula = cbind(admit, nonadmit) ~ rank, family = binomial, 
    data = df)

Coefficients:
(Intercept)        rank1  
    -0.3624      -0.9459  

Degrees of Freedom: 1 Total (i.e. Null);  0 Residual
Null Deviance:      18.31 
Residual Deviance: 2.043e-14    AIC: 15.07