首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在nlme的lme中访问随机效应方差估计

在nlme的lme中访问随机效应方差估计
EN

Stack Overflow用户
提问于 2013-05-20 20:52:10
回答 3查看 3.6K关注 0票数 2

有没有办法获得nlme包lme模型中随机项的方差?

代码语言:javascript
复制
Random effects:
 Formula: ~t | UID
 Structure: General positive-definite, Log-Cholesky parametrization
            StdDev     Corr  
(Intercept) 520.310397 (Intr)
t             3.468834 0.273 
Residual     31.071987

换句话说,在上面,我想得到的是3.468834。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-05-20 22:59:51

这并不困难;VarCorr访问器方法正是为恢复这些信息而设计的。由于VarCorr方法将方差-协方差作为字符矩阵而不是数值返回(我使用storage.mode在不丢失结构的情况下将其转换为数值,而使用suppressWarnings忽略有关NAs的警告),所以它比预期的要难一点。

代码语言:javascript
复制
library(nlme)
fit <- lme(distance ~ Sex, data = Orthodont, random = ~ age|Subject)
vc <- VarCorr(fit)
suppressWarnings(storage.mode(vc) <- "numeric")
vc[1:2,"StdDev"]
## (Intercept)         age 
##   7.3913363   0.6942889 

在您的示例中,您将使用vc["t","StdDev"]

票数 4
EN

Stack Overflow用户

发布于 2013-05-20 22:00:51

这是在一个打印方法(我怀疑是print.summary.pdMat)中计算出来的。最简单的方法是捕获输出。

代码语言:javascript
复制
library(nlme)

fit <- lme(distance ~ Sex, data = Orthodont, random = ~ age|Subject)
summary(fit)

# Linear mixed-effects model fit by REML
# Data: Orthodont 
# AIC      BIC    logLik
# 483.1635 499.1442 -235.5818
# 
# Random effects:
#   Formula: ~age | Subject
# Structure: General positive-definite, Log-Cholesky parametrization
#                StdDev    Corr  
# (Intercept) 7.3913363 (Intr)
# age         0.6942889 -0.97 
# Residual    1.3100396  
# <snip/>

ttt <- capture.output(print(summary(fit$modelStruct), sigma = fit$sigma))
as.numeric(unlist(strsplit(ttt[[6]],"\\s+"))[[2]])
#[1] 0.6942889

下面是计算它的方法:

代码语言:javascript
复制
fit$sigma * attr(corMatrix(fit$modelStruct[[1]])[[1]],"stdDev")
#(Intercept)         age 
#  7.3913363   0.6942889 
票数 1
EN

Stack Overflow用户

发布于 2014-04-20 04:18:32

代码语言:javascript
复制
> fit <- lme(distance ~ Sex, data = Orthodont, random = ~ age|Subject)
> getVarCov(fit)
Random effects variance covariance matrix
            (Intercept)      age
(Intercept)     54.6320 -4.97540
age             -4.9754  0.48204
  Standard Deviations: 7.3913 0.69429 
> # In contrast to VarCorr(), this returns a numeric matrix:
> str(getVarCov(fit))
 random.effects [1:2, 1:2] 54.632 -4.975 -4.975 0.482
 - attr(*, "dimnames")=List of 2
  ..$ : chr [1:2] "(Intercept)" "age"
  ..$ : chr [1:2] "(Intercept)" "age"
 - attr(*, "class")= chr [1:2] "random.effects" "VarCov"
 - attr(*, "group.levels")= chr "Subject"
> unclass(getVarCov(fit))
            (Intercept)       age
(Intercept)   54.631852 -4.975417
age           -4.975417  0.482037
attr(,"group.levels")
[1] "Subject"
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16649956

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档