2014-05-07 78 views
6

我已經安裝了package nlmenlme()模型。nlme fit:vcov與彙總

現在我想模擬一些預測區間,考慮到參數的不確定性。

爲此,我需要提取固定效應的方差矩陣。

據我所知,這樣做有兩種方式:

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) 
+0

你更可能如果您提供您的數據集或至少一個有代表性的樣本,並顯示您用來找到合適的代碼,請獲得幫助。 – jlhoward

+0

我同意。但數據集不是我的,我推斷任何可能能夠回答的人都會在過去使用nlme,因此nlme適合隨時可用。既然我指出了一個普遍應該是數據獨立的問題,我希望它不會成爲一個問題。也就是說,如果人們不能證實他們自己的例子中的兩個矩陣的不平等,這將是一個非常大的暗示,我做錯了什麼。 但是我可以走開並模擬一個數據集,如果你認爲這將有所幫助。 –

+1

是的,證明您可以發佈數據的問題非常重要。 – jlhoward

回答

4

這是由於偏置校正項;它記錄在?summary.lme

adjustSigma:一個可選的邏輯值。如果'TRUE'和用於獲得'object'的估計方法具有最大可能性,則殘差標準誤差乘以sqrt(nobs /(nobs - npar)),將其轉換爲類似REML的估計值。此參數 僅在將單個擬合對象傳遞給 函數時使用。默認值爲'TRUE'。

如果往裏nlme:::summary.lme(其是用於產生nlme對象的總結以及,由於其具有c("nlme", "lme")類中的方法),可以看到:

... 
stdFixed <- sqrt(diag(as.matrix(object$varFix))) 
... 
if (adjustSigma && object$method == "ML") 
    stdFixed <- stdFixed * sqrt(object$dims$N/(object$dims$N - 
     length(stdFixed))) 

即,標準誤差正在按sqrt(n/(n-p))縮放,其中n是觀測次數和p固定效應參數的數量。讓我們來看看這個:

library(nlme) 
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)) 
summary(fm1)$tTable[,"Std.Error"] 
##  Asym   R0  lrc 
## 2.46169512 0.31795045 0.03427017 

nrow(Loblolly) ## 84 
sqrt(diag(vcov(fm1)))*sqrt(84/(84-3)) 
##  Asym   R0  lrc 
## 2.46169512 0.31795045 0.03427017 

我不得不承認,我找到了答案的代碼,然後纔回頭看,這是完全清楚的文件中指出...

+0

太棒了!非常感謝 - 我從來沒有想過要查看摘要文檔。也許我在懶惰中不看代碼。我相信我已經接受並贊成你的回答。 –