作为对以后目标的完整性检查,我试图了解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对象中的对象是什么?