我正在尝试在R中复制我的SAS工作,但我得到的结果略有不同 - 差异无法通过舍入错误来解释。
这是我的SAS代码:
proc qlim data=mydata;
model y = x1 x2 x3/ discrete(d=probit);
output out=outdata marginal;
title "just ran QLIM model";
run;
quit;
这是我的R代码:
mymodel <- glm(y ~ x1 + x2 + x3, family=binomial(link="probit"), data=mydata)
我不确定为什么会得到不同的结果,并且非常感谢您的解释。
EDIT 这是我的数据:
2.66 20 0 0
2.89 22 0 0
3.28 24 0 0
2.92 12 0 0
4.00 21 0 1
2.86 17 0 0
2.76 17 0 0
2.87 21 0 0
3.03 25 0 0
3.92 29 0 1
2.63 20 0 0
3.32 23 0 0
3.57 23 0 0
3.26 25 0 1
3.53 26 0 0
2.74 19 0 0
2.75 25 0 0
2.83 19 0 0
3.12 23 1 0
3.16 25 1 1
2.06 22 1 0
3.62 28 1 1
2.89 14 1 0
3.51 26 1 0
3.54 24 1 1
2.83 27 1 1
3.39 17 1 1
2.67 24 1 0
3.65 21 1 1
4.00 23 1 1
3.1 21 1 0
2.39 19 1 1
这是我的估计系数(parant中的std错误):
SAS: -7.452320 (2.542536)
1.625810 (0.693869)
0.051729 (0.083891)
1.426332 (0.595036)
R: -7.25319 (2.50977)
1.64888 (0.69427)
0.03989 (0.07961)
1.42490 (0.58347)
答案 0 :(得分:3)
可能在默认情况下使用的对比度矩阵中。 R使用治疗对比,而SAS使用它自己。在帮助中查找对比和contr.SAS。如果你正在使用SAS对比很多,你可能只想设置选项。
options(contrasts=c("contr.SAS", "contr.poly"))
要了解这会如何影响事物,请观察治疗和SAS对比度矩阵的差异
contr.treatment(4)
2 3 4
1 0 0 0
2 1 0 0
3 0 1 0
4 0 0 1
contr.SAS(4)
1 2 3
1 1 0 0
2 0 1 0
3 0 0 1
4 0 0 0
答案 1 :(得分:1)
当我使用您的数据和代码在R中运行它时,我得到了您为SAS结果显示的答案(接近):
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -7.45231 2.57152 -2.898 0.00376 **
x1 1.62581 0.68973 2.357 0.01841 *
x2 0.05173 0.08119 0.637 0.52406
x3 1.42633 0.58695 2.430 0.01510 *
标准错误减少了几个百分点,但这并不令人惊讶。
我也在glmmADMB
(可用于R-forge)中运行它,这是一个完全不同的实现,并且估计距离稍微远一点,但标准误差更接近于SAS - 比您最初的差异小得多无论如何报道。
library(glmmADMB)
> mm2 <- glmmadmb(y~x1+x2+x3,family="binomial",link="probit",data=mydata)
["estimated covariance may be non-positive-definite warnings"]
> summary(mm2)
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -7.4519 2.5424 -2.93 0.0034 **
x1 1.6258 0.6939 2.34 0.0191 *
x2 0.0517 0.0839 0.62 0.5375
x3 1.4263 0.5950 2.40 0.0165 *
您使用的是什么版本的R? (它可能可能版本之间发生了某些变化,虽然glm
是非常稳定的代码......)你确定你没有弄乱一些东西吗?
> sessionInfo()
R Under development (unstable) (2011-10-06 r57181)
Platform: i686-pc-linux-gnu (32-bit)
attached base packages:
[1] grid stats graphics grDevices utils datasets methods
[8] base
other attached packages:
[1] glmmADMB_0.6.4
答案 2 :(得分:0)
我是R新手,但我有一个建议。
尝试使用另一个R包运行probit ...尝试Zelig。
mymodel <- zelig(y ~ x1 + x2 + x3, model="probit", data=mydata)
summary(mymodel)
此模型中的回归系数是否不同?
答案 3 :(得分:0)
这是一个很好的来源http://sas-and-r.blogspot.com/
答案 4 :(得分:0)
您应该比较报告最高对数可能性的软件。这些数字可能不同,因为终止标准在两种算法中都不同。例如,大多数算法使用梯度范数作为停止规则(即:小于0.0005时),但每个软件都使用自己的规范。 取决于它停止的位置,这些估计的方差将明显不同,因为它们是通过反转Hessian(在它停止的地方进行评估)获得的。 为了100%确定,您可以使用报告最高对数似然性的R或SAS值进行检查。或者您可以使用这些值手动计算对数似然。 如果有人要求您在R和SAS中报告完全相同的值,只需触摸两种算法的收敛标准即可。在两种情况下都设置一些非常严格的参数&lt; 0.00000005,两个程序都应报告相同的值。
(除非你的可能性有多个最大值,这似乎不是这里的问题;在这种情况下,最终的估计将取决于你的初始值)