我是一个更熟悉 R 的用户,并且一直试图在 5 年内为四个栖息地变量估计大约 35 个人的随机斜率(选择系数)。响应变量是位置是“使用”(1) 还是“可用”(0) 栖息地(以下“使用”)。
我使用的是 Windows 64 位计算机。
在 R 版本 3.1.0 中,我使用下面的数据和表达式。PS、TH、RS 和 HW 是固定效应(标准化、测量到栖息地类型的距离)。lme4 V 1.1-7。
str(dat)
'data.frame': 359756 obs. of 7 variables:
$ use : num 1 1 1 1 1 1 1 1 1 1 ...
$ Year : Factor w/ 5 levels "1","2","3","4",..: 4 4 4 4 4 4 4 4 3 4 ...
$ ID : num 306 306 306 306 306 306 306 306 162 306 ...
$ PS: num -0.32 -0.317 -0.317 -0.318 -0.317 ...
$ TH: num -0.211 -0.211 -0.211 -0.213 -0.22 ...
$ RS: num -0.337 -0.337 -0.337 -0.337 -0.337 ...
$ HW: num -0.0258 -0.19 -0.19 -0.19 -0.4561 ...
glmer(use ~ PS + TH + RS + HW +
(1 + PS + TH + RS + HW |ID/Year),
family = binomial, data = dat, control=glmerControl(optimizer="bobyqa"))
glmer 为我提供了对我有意义的固定效应的参数估计,当我对数据进行定性调查时,随机斜率(我将其解释为每种栖息地类型的选择系数)也有意义。该模型的对数似然为 -3050.8。
然而,大多数动物生态学研究不使用 R,因为对于动物位置数据,空间自相关会使标准错误容易出现 I 类错误。虽然 R 使用基于模型的标准误差,但首选经验(也是 Huber-white 或三明治)标准误差。
虽然 R 目前不提供此选项(据我所知 - 请纠正我,如果我错了),SAS 提供 - 虽然我无法访问 SAS,但一位同事同意让我借用他的计算机以确定标准错误使用经验方法时发生显着变化。
首先,我们希望确保在使用基于模型的标准误差时,SAS 会产生与 R 相似的估计值——以确保在两个程序中以相同的方式指定模型。我不在乎它们是否完全相同 - 只是相似。我试过(SAS V 9.2):
proc glimmix data=dat method=laplace;
class year id;
model use = PS TH RS HW / dist=bin solution ddfm=betwithin;
random intercept PS TH RS HW / subject = year(id) solution type=UN;
run;title;
我还尝试了其他各种形式,例如添加线条
random intercept / subject = year(id) solution type=UN;
random intercept PS TH RS HW / subject = id solution type=UN;
我试过没有指定
solution type = UN,
或注释掉
ddfm=betwithin;
无论我们如何指定模型(并且我们尝试了很多方法),我都无法让 SAS 中的随机斜率与 R 的输出很相似——即使固定效果足够相似。当我的意思是不同时,我的意思是甚至符号都不相同。SAS 中的 -2 对数似然是 71344.94。
我无法上传完整的数据集;所以我做了一个玩具数据集,只有三个人的记录。SAS 在几分钟内给我输出;在 R 中需要一个多小时。奇怪的。有了这个玩具数据集,我现在得到了对固定效应的不同估计。
我的问题:谁能解释为什么 R 和 SAS 之间的随机斜率估计可能如此不同?我可以在 R 或 SAS 中做些什么来修改我的代码,以便调用产生类似的结果?我宁愿更改 SAS 中的代码,因为我“相信”我的 R 估计更多。
我真的很关心这些差异,并想深入了解这个问题!
我的玩具数据集的输出仅使用了 R 和 SAS 的完整数据集中 35 个人中的三个,被包含为 jpeg。
编辑和更新:
正如@JakeWestfall 帮助发现的那样,SAS 中的斜率不包括固定效应。当我添加固定效果时,结果如下 - 将 R 斜率与 SAS 斜率进行比较,以获得程序之间的一个固定效果“PS”:(选择系数 = 随机斜率)。请注意 SAS 中增加的变化。