在nme和R中为lme模型在MLE处评估得分函数

时间:2018-10-26 22:39:26

标签: r nlme

作为对以后目标的完整性检查,我试图了解lme对象的组件之间的关系。我正在尝试评估从使用gamm创建的lme对象获得的MLE处的得分函数,以检查它们是否等于零。我提供了一个最小的工作示例。我的得分函数是从https://arxiv.org/pdf/1612.04911.pdf中的方程式(7)获得的。

library(lme4)
library(mgcv)
library(lasso2) # for Prostate data set
data(Prostate)

model = gamm(lpsa ~lcavol + s(lweight), data=Prostate)$lme

我在这里计算评估得分函数所需的对象

X = model.matrix(formula(model), data=model$data)
YminXbeta = c(model$data$y - X %*% fixed.effects(model))
varcomps = VarCorr(model)
varcomps = as.numeric(varcomps[nrow(varcomps) - (1:0),1])
Sigmainv = solve(extract.lme.cov2(model, data=model$data)$V)
Sigmainvsq = Sigmainv %*% Sigmainv

ZVZT = (model$data$Xr %*% (getVarCov(model, 
 type='random.effects')/varcomps[1]) %*% t(model$data$Xr))
SigmainvZVZT = Sigmainv %*% ZVZT
SigmainvZVZTsq = SigmainvZVZT %*% SigmainvZVZT

现在,我在MLE上评估分数

# the scores
# the score for the mean parameter
sbeta = t(X) %*% Sigmainv %*% YminXbeta
#                 [,1]
# X(Intercept)    5.329071e-14
# Xlcavol         1.190159e-13
# Xs(lweight)Fx1 -1.110223e-15

# the score for the error variance parameter
ssigmasq = (-sum(diag(Sigmainv)) + YminXbeta %*% Sigmainvsq %*% 
YminXbeta)/2
# 3.664974e-08

# the score for the random effect parameter
stausq = (-sum(diag(SigmainvZVZT)) + YminXbeta %*% SigmainvZVZT 
%*% Sigmainv %*% YminXbeta)/2
# -7.507903

请注意,随机效应方差成分接近于零

varcomps[1] # 2.665509e-09

但我不确定是否会使导数为非零。

为什么方差成分项的得分函数不接近零?我是在犯错误还是误解了lme对象中的对象是什么?

0 个答案:

没有答案