R 到 SAS:从 glmer 到 PROC NLMIXED

问题描述 投票:0回答:1

我知道我的问题可能不完全是关于通常的话题,但我真的很绝望。 几个月来我一直在试图找出我的代码有什么问题。

我需要与

PROC NLMIXED
等效的 SAS 来获得该模型的完整方差-协方差矩阵,用 R 写成
lme4::glmer
:

(“中毒”我的生存数据后,它看起来像下面的片段。

Var1
var2
cov
是因子变量)

 data_pois = poissonize(data, interval.width = interval.width, factors = c ('var1', 'var2', 'cov'), compress = FALSE)
head(data_pois)
     id event  var1    var2 cov         time interval
1225  1     0 -0.5       13   1 0.0005669899        0
822   2     1 -0.5        9   1 0.0947011826        0
611   3     1 -0.5        7   1 0.0951096974        0
235   4     1 -0.5        3   0 0.1028146920        0
1847  5     0 -0.5       19   1 0.1122793044        0
1321  6     1 -0.5       14   1 0.1298256694        0
    mod    =  lme4::glmer(
      formula = event ~ -1 + interval : factor(var1) + cov + offset(log(time))+ (0 + var1 | var2 ) + (1| var3 ),
      data = data_pois, 
      family = poisson(link = "log"),
      control=glmerControl(optCtrl=list(maxfun=2e5), optimizer="bobyqa"))
r sas lme4 proc
1个回答
0
投票

显示您目前拥有的 NLMIXED 代码可能会有所帮助。您的代码片段没有包含足够的信息来给出完整的答案 - 因素的水平是什么,

var3
是什么?我也不完全理解你在从第一个因素中删除截距时试图用你的随机效应做什么,我假设你想要一个整体独立的随机截距和每个非参考水平的另一组相关的截距
var1
。正如所写,它的全部在 NLMIXED 中可能是可能的,也可能是不可能的:多个随机效果必须都是层次结构的一部分,即一个嵌套在另一个中。

根据您提供的信息以及我对两种语言和基础统计数据的无可否认的肤浅知识,我认为匹配的 NLMIXED 调用可能如下所示:

proc nlmixed data=data_pois;
   /* Create dummies as needed/desired - more will be required if >2 levels exist. */
   dummy_var1 = (var1 eq -0.5);
   dummy_cov = (cov eq 1);

   /* Random effects, see caveats below. */
   random r1 ~ normal(0, rsig1) subject=var2;
   random r2 ~ normal(0, rsig2) subject=var2(var3);

   /* Linear predictor. */
   eta = b1*interval + b2*dummy_var1*interval + b3*dummy_cov1 + r1*dummy_var1 + r2 + log(time);
   mu = log(eta);

   /* Option 1: use built-in distribution. */
   model event ~ poisson(mu);
   /* Option 2: write out log-likelihood by hand. */
   ll = event * eta - mu - lgamma(event + 1);
   model event ~ general(ll); /* The DV can be anything here, its value doesn't matter. */
run;

这是非常简单的,我几乎肯定会添加一个

parms
语句来将模型参数初始化为更合理的值,例如从固定效果模型预先计算的值。通常也是一个好主意,以对数标度表达差异(这将兼作
bounds
语句)并在进行任何转换之前添加额外的边界检查。您可能还希望在 NLMIXED 调用中包含额外的调整和/或收敛选项。

最后,回到随机效果,这实际上取决于您想要在这里做什么。如前所述,它们必须嵌套,我假设

var2
包含在此处的
var3
中。如果有超过 2 个级别的
r1
,仍然由您来定义额外级别的
var1
(待添加)协变,我相信
glmer
默认情况下会使其变得非结构化。

© www.soinside.com 2019 - 2024. All rights reserved.