【发布时间】:2014-05-07 17:02:48
【问题描述】:
我已经使用package nlme 中的nlme() 拟合了一个模型。
现在我想模拟一些预测区间,考虑到参数的不确定性。
为此,我需要提取固定效应的方差矩阵。
据我所知,有两种方法可以做到这一点:
vcov(fit)
和
summary(fit)$varFix
这两个给出相同的矩阵。
但是,如果我检查
diag(vcov(fit))^.5
它与summary(fit)中报告的标准错误不同
期望这两者相同,我错了吗?
编辑:这是一个代码示例
require(nlme)
f=expression(exp(-a*t))
a=c(.5,1.5)
pts=seq(0,4,by=.1)
sim1=function(t) eval(f,list(a=a[1],t))+rnorm(1)*.1
y1=sapply(pts,sim1)
sim2=function(t) eval(f,list(a=a[2],t))+rnorm(1)*.1
y2=sapply(pts,sim2)
y=c(y1,y2)
t=c(pts,pts)
batch=factor(rep(1:2,82))
d=data.frame(t,y,batch)
nlmeFit=nlme(y~exp(-a*t),
fixed=a~1,
random=a~1|batch,
start=c(a=1),
data=d
)
vcov(nlmeFit)
summary(nlmeFit)$varFix
vcov(nlmeFit)^.5
summary(nlmeFit)
【问题讨论】:
-
如果您提供您的数据集或至少一个有代表性的样本,并展示您用于获得合适的代码,您更有可能获得帮助。
-
我同意。但是数据集不是我的,我推断任何可能能够回答的人过去都会使用 nlme,因此可以轻松获得 nlme 拟合。由于我指出了一个通常应该与数据无关的问题,因此我希望它不会成为问题。也就是说,如果人们无法在他们自己的示例中确认两个矩阵的不相等性,那将是一个很大的暗示,表明我做错了。但是,如果您认为有帮助,我可以离开并模拟一个数据集。
-
是的,证明您可以发布的数据存在问题很重要。
-
已编辑帖子以模拟数据。每次运行代码块时,您都会得到两个标准差/标准误差估计的不同答案。
-
这更容易重现:
library(nlme); example(nlme); all.equal(sqrt(diag(vcov(fm2))),summary(fm2)$tTable[,"Std.Error"])