想要使用nlme将proc nlmixed转换为R代码转换SAS代码

时间:2014-10-31 08:27:15

标签: r lme4 nlme

问题类似于以下帖子中的问题:

" troubles converting proc nlmixed (SAS) to nlme (R) "

1 个答案:

答案 0 :(得分:2)

这根本不像混合模型 - 随机效应是什么?它看起来像一个略微不寻常的广义线性模型:我认为这样做。

glm((1-p)~d1+d2+d3+d4-1,family=binomial(link="log"))

(你必须自己翻转参数的标志)。

Tiwari et al. 2006适合此类型的模型。

R等价物:

dd <- read.table("sas_vals.txt",header=TRUE,na.string=".")
g1 <- glm((1-Y)~d1+d2+d3+d4-1,family=binomial(link="log"),data=dd,
    start=rep(-0.1,4))

这有点困难,可能部分是因为微小的数据集(我假设这是真实数据的一个子集 - 将21个二进制观察拟合4个参数将是一个非常糟糕的想法......)

或者:

library("bbmle")
g2 <- mle2(Y~dbinom(prob=1-exp(-p),size=1),
           parameters=list(p~d1+d2+d3+d4-1),
           start=list(p=0.1),
           data=dd)

对数似然性表明mle2拟合更好,并且重新设置glm与这些起始值的拟合效果更好:

g3 <- update(g1,start=-coef(g2))
g4 <- mle2(Y~dbinom(prob=1-(exp(-p)^exp(b*Treat)),size=1),
           parameters=list(p~d1+d2+d3+d4-1),
           start=list(p=0.1,b=0),
           data=dd)
summary(g4)
##      Estimate Std. Error z value  Pr(z)
## p.d1 0.106163   0.088805  1.1955 0.2319
## p.d2 0.241029   0.178263  1.3521 0.1763
## p.d3 0.105970   0.113455  0.9340 0.3503
## p.d4 0.179232   0.189951  0.9436 0.3454
## b    0.559624   0.740500  0.7557 0.4498

这似乎与SAS的结果非常吻合。