2013-10-31 8 views
4

선형 혼합 효과 모델은 전통적으로 다음과 같이 공식화됩니다. Ri = Xi × β + Zi × bi + εi 여기서 β는 추정 된 고정 효과를 나타내고 Z는 임의 효과를 나타낸다. 따라서 X는 고전적인 디자인 매트릭스입니다. R을 사용하여, nlme 패키지에서 lme를 사용하여 모델을 피팅 한 후이 두 행렬을 추출 할 수 있기를 원합니다. 예를 들어, nlme 패키지에있는 "Rails"데이터 세트에는 무작위로 선택된 6 개의 레일에서 초음파 이동 시간에 대한 세 가지 개별 측정 값이 포함되어 있습니다. 절편 고정 효과와 각 레일에 대한 무작위 효과가있는 간단한 모델을 다음과 같이 맞출 수 있습니다.nlme에서 무작위 효과 디자인 매트릭스 추출

library(nlme) 
lmemodel<-lme(travel ~ 1, random = ~ 1 | Rail, data=Rail) 

는 X 디자인 매트릭스 그냥 18x1 매트릭스 단결 (6 개 레일 * 3 개 측정)이고 쉽게 다음과 같은 방법으로 추출이 : 내가하고 싶은 무엇

model.matrix(lmemodel, data=Rail) 
    (Intercept) 
1   1 
2   1 
3   1 
4   1 
5   1 
6   1 
7   1 
8   1 
9   1 
10   1 
11   1 
12   1 
13   1 
14   1 
15   1 
16   1 
17   1 
18   1 
attr(,"assign") 
[1] 0 

은 추출입니다 임의 효과 디자인 매트릭스 Z. 나는 내가 lme4 패키지를 사용하여 동일한 모델을 맞는 경우, 이것은 다음과 같은 방법으로 수행 할 수 있습니다 실현 :

library(lme4) 
lmermodel<-lmer(travel ~ 1 + (1|Rail),data=Rail) 
t([email protected]) ##takes the transpose of [email protected] 
[email protected] ## extracts the X matrix 

을하지만, 나는이 마트를 추출하는 방법에 관해서 딱하다 x lme fitted 모델에서.

+0

향후 내부 표현이 변경 될 경우 객체의 슬롯에 직접 액세스하지 말고'getME (lmermodel, "Z")'또는'getME (lmermodel, "X")를 사용하는 것이 더 좋습니다. –

+0

팁 주셔서 감사. – iantist

답변

2

Z 행렬은 lme 개체의 어느 위치에도 저장되지 않습니다. 가장 좋은 방법은 modelStruct$reStruct 구성 요소 (탐색하려면 names(modelfit); str(modelfit); sapply(modelfit,class) 등을 시도하십시오)에 있지만, 내가 말할 수있는 한 거기에는 없습니다. 실제로 lme.default의 용기로 파고 들어가면 Z 행렬이 실제로 명시 적으로 구성되지 않을 수도 있습니다. 내부적으로 lme은 구조체를 그룹화하는 대신 작동합니다. 하나의 임의 효과가 있기 때문에

2
model.matrix(formula(lmemodel$modelStruct$reStr)[[1]],data=lmemodel$data) 

1이 예에 좀 다릅니다 ... 당신은 물론

Z <- model.matrix(~Rail-1,data=Rail) 

을 할 수 있지만 당신이 생각했던 것을 아마 아니다. 무작위 효과가 여러 개있을 때 다른 Z_i를 함께 쌓기 위해 좀 더 자동 프로그래밍을 할 수 있습니다.