在github上尝试使用gnlrim
。它可以使用参数边界进行最大似然估计。只需将随机截距方差pmix
的起始值、下限和上限设置为相同的值,它就会保持不变。
下面是一个示例,展示了gnlrim
估计与REML=FALSE
的lmer
相同的模型。第一部分是易于复制和粘贴的代码块;随后的代码块显示了相关行的执行。
安装包、数据和适合的模型(复制和粘贴代码块):
library(devtools)
devtools::install_github("hrbrmstr / libstableR")
devtools::install_github( "swihart/gnlrim")
dose <- c(9,12,4,9,11,10,2,11,12,9,9,9,4,9,11,9,14,7,9,8)
y <- c(8.674419, 11.506066, 11.386742, 27.414532, 12.135699, 4.359469,
1.900681, 17.425948, 4.503345, 2.691792, 5.731100, 10.534971,
11.220260, 6.968932, 4.094357, 16.393806, 14.656584, 8.786133,
20.972267, 17.178012)
id <- rep(1:4, each=5)
lmer_fit <- lme4::lmer(y~dose + (1|id), REML=FALSE)
gnlrim_fit <-
gnlrim(y,
mu=~a+b*dose+rand,
random="rand",
nest=id,
pmu=c(a=8.7,b=0.25),
pshape = c(shape=1),
pmix=c(var=3.0938^2),
p_uppb = c(10, 1, 5, 3.0938^3),
p_lowb = c( 5, -1, 0, 0)
)
运行以下代码,查看模型之间的相似度(复制并粘贴代码块):
summary(lmer_fit)$coeff[,1]
gnlrim_fit$coeff[1:2]
summary(lmer_fit)$varcor
sqrt(exp(gnlrim_fit$coeff[3]))
summary(lmer_fit)$varcor
sqrt(gnlrim_fit$coeff[4])
summary(lmer_fit)$logLik
-gnlrim_fit$maxlike
使用相同的模型,但设置并保持随机效应方差不变(复制并粘贴代码块):
gnlrim_fit2 <-
gnlrim(y,
mu=~a+b*dose+rand,
random="rand",
nest=id,
pmu=c(a=8.7,b=0.25),
pshape = c(shape=1),
pmix=c(var=9^2),
p_uppb = c(10, 1, 5, 9^2),
p_lowb = c( 5, -1, 0, 9^2)
)
gnlrim_fit2$coeff
gnlrim_fit2$se
执行显示模型相似的行:
>
>
> summary(lmer_fit)$coeff[,1]
(Intercept) dose
8.7117914 0.2488724
> gnlrim_fit$coeff[1:2]
[1] 8.7118426 0.2488648
>
>
>
> summary(lmer_fit)$varcor
Groups Name Std.Dev.
id (Intercept) 3.0938
Residual 5.5880
> sqrt(exp(gnlrim_fit$coeff[3]))
[1] 5.587926
>
>
>
> summary(lmer_fit)$varcor
Groups Name Std.Dev.
id (Intercept) 3.0938
Residual 5.5880
> sqrt(gnlrim_fit$coeff[4])
[1] 3.094191
>
>
> summary(lmer_fit)$logLik
'log Lik.' -64.64964 (df=4)
> -gnlrim_fit$maxlike
[1] -64.64958
执行保持方差不变的线路:
>
>
>
>
> gnlrim_fit2 <-
+ gnlrim(y,
+ mu=~a+b*dose+rand,
+ random="rand",
+ nest=id,
+ pmu=c(a=8.7,b=0.25),
+ pshape = c(shape=1),
+ pmix=c(var=9^2),
+ p_uppb = c(10, 1, 5, 9^2),
+ p_lowb = c( 5, -1, 0, 9^2)
+ )
>
> gnlrim_fit2$coeff
[1] 9.1349920 0.2012785 3.4258404 81.0000000
> gnlrim_fit2$se
[1] 6.1006729 0.4420228 0.3485940 0.0000000
R
包中获得所需的结果,如果是这种情况,可能需要进行一些理论分析来展示如何首先进行计算,这将使您再次回到统计站点...。 - whuber