비선형 혼합 nlme
모형 의 예측에 대한 95 % 신뢰 구간을 얻고 싶습니다 . 아무것도 표준 내에서이 작업을 수행하기 위해 제공되기 때문에 nlme
, 나는 "인구 예측 간격"의 방법을 사용하는 것이 올바른 것처럼, 궁금 모델의 맥락에서 벤 Bolker의 책 장에 설명 된 최대 우도에 맞게 의 아이디어를 기반으로, 적합 모형의 분산 공분산 행렬을 기반으로 고정 효과 매개 변수를 리샘플링하고이를 기반으로 예측을 시뮬레이션 한 다음 이러한 예측의 95 % 백분위 수를 사용하여 95 % 신뢰 구간을 얻습니까?
이를 수행하는 코드는 다음과 같습니다. (여기서는 nlme
도움말 파일 의 'Loblolly'데이터를 사용 합니다)
library(effects)
library(nlme)
library(MASS)
fm1 <- nlme(height ~ SSasymp(age, Asym, R0, lrc),
data = Loblolly,
fixed = Asym + R0 + lrc ~ 1,
random = Asym ~ 1,
start = c(Asym = 103, R0 = -8.5, lrc = -3.3))
xvals=seq(min(Loblolly$age),max(Loblolly$age),length.out=100)
nresamp=1000
pars.picked = mvrnorm(nresamp, mu = fixef(fm1), Sigma = vcov(fm1)) # pick new parameter values by sampling from multivariate normal distribution based on fit
yvals = matrix(0, nrow = nresamp, ncol = length(xvals))
for (i in 1:nresamp)
{
yvals[i,] = sapply(xvals,function (x) SSasymp(x,pars.picked[i,1], pars.picked[i,2], pars.picked[i,3]))
}
quant = function(col) quantile(col, c(0.025,0.975)) # 95% percentiles
conflims = apply(yvals,2,quant) # 95% confidence intervals
신뢰 한계가 있으므로 그래프를 만듭니다.
meany = sapply(xvals,function (x) SSasymp(x,fixef(fm1)[[1]], fixef(fm1)[[2]], fixef(fm1)[[3]]))
par(cex.axis = 2.0, cex.lab=2.0)
plot(0, type='n', xlim=c(3,25), ylim=c(0,65), axes=F, xlab="age", ylab="height");
axis(1, at=c(3,1:5 * 5), labels=c(3,1:5 * 5))
axis(2, at=0:6 * 10, labels=0:6 * 10)
for(i in 1:14)
{
data = subset(Loblolly, Loblolly$Seed == unique(Loblolly$Seed)[i])
lines(data$age, data$height, col = "red", lty=3)
}
lines(xvals,meany, lwd=3)
lines(xvals,conflims[1,])
lines(xvals,conflims[2,])
이 방법으로 얻은 95 % 신뢰 구간을 가진 도표는 다음과 같습니다.
이 방법이 유효합니까, 비선형 혼합 모형의 예측에 대한 95 % 신뢰 구간을 계산하는 다른 방법 또는 더 나은 방법이 있습니까? 모델의 랜덤 효과 구조를 다루는 방법을 완전히 확신하지 못합니다. 평균이 무작위 효과 수준을 초과해야합니까? 아니면 평범한 주제에 대한 신뢰 구간을 갖는 것이 좋을까요? 지금 가지고있는 것에 더 가까운 것 같습니다.