혼합 효과 모델의 모델 행렬


10

에서 lmer내 기능 lme4R임의 효과의 모델 매트릭스 구성에 대한 요구가 같은 설명, 여기 , 페이지 7-9.Z

계산 하는 것은 J_iX_i 의 두 행렬의 KhatriRao 및 / 또는 Kronecker 곱을 수반 합니다. J i X iZJiXi

행렬 Ji 는 한 입 가득입니다. "그룹화 인자 지수의 지표 행렬"이지만 더 높은 계층 레벨에 해당하는 단위 (예 : 반복 측정 대상)를 "켜기"위해 더미 코딩을 사용하는 희소 행렬 인 것 같습니다. 모든 관찰. Xi 매트릭스는 모두 "선택자"의 조합은, 매트릭스를 수득 할 그래서, 하부 계층 레벨의 측정 선택기로서 작용하는 것으로 보인다 Zi 다음의 예를 통해 용지에 도시 된 형태 :

(f<-gl(3,2))

[1] 1 1 2 2 3 3
Levels: 1 2 3

(Ji<-t(as(f,Class="sparseMatrix")))

6 x 3 sparse Matrix of class "dgCMatrix"
     1 2 3
[1,] 1 . .
[2,] 1 . .
[3,] . 1 .
[4,] . 1 .
[5,] . . 1
[6,] . . 1

(Xi<-cbind(1,rep.int(c(-1,1),3L)))
     [,1] [,2]
[1,]    1   -1
[2,]    1    1
[3,]    1   -1
[4,]    1    1
[5,]    1   -1
[6,]    1    1

이러한 각 행렬을 전치하고 Khatri-Rao 곱셈을 수행합니다.

[11......11......11][111111111111]=[11....11......11....11......11....11]

그러나 는 그 전치입니다.나는

(Zi<-t(KhatriRao(t(Ji),t(Xi))))

6 x 6 sparse Matrix of class "dgCMatrix"

[1,] 1 -1 .  . .  .
[2,] 1  1 .  . .  .
[3,] .  . 1 -1 .  .
[4,] .  . 1  1 .  .
[5,] .  . .  . 1 -1
[6,] .  . .  . 1  1

저자는의 데이터베이스 sleepstudy를 사용 lme4하지만이 특정 연구에 적용 할 때 디자인 매트릭스를 자세히 설명하지는 않습니다. 따라서 위의 논문에서 작성된 코드가 어떻게 더 의미있는 sleepstudy예로 해석되는지 이해하려고합니다 .

시각적 단순성을 위해 데이터 세트를 "309", "330"및 "371"의 세 가지 주제로 줄였습니다.

require(lme4)
sleepstudy <- sleepstudy[sleepstudy$Subject %in% c(309, 330, 371), ]
rownames(sleepstudy) <- NULL

간단한 OLS 회귀를 개별적으로 고려할 경우 각 개인은 매우 다른 절편과 기울기를 나타냅니다. 이는 피험자에 해당하는 더 높은 계층 또는 단위 수준의 혼합 효과 모델이 필요함을 나타냅니다.

    par(bg = 'peachpuff')
    plot(1,type="n", xlim=c(0, 12), ylim=c(200, 360),
             xlab='Days', ylab='Reaction')
    for (i in sleepstudy$Subject){
            fit<-lm(Reaction ~ Days, sleepstudy[sleepstudy$Subject==i,])
            lines(predict(fit), col=i, lwd=3)
            text(x=11, y=predict(fit, data.frame(Days=9)), cex=0.6,labels=i)
        }

여기에 이미지 설명을 입력하십시오

혼합 효과 회귀 호출은 다음과 같습니다.

fm1<-lmer(Reaction~Days+(Days|Subject), sleepstudy)

함수에서 추출한 행렬은 다음과 같습니다.

parsedFormula<-lFormula(formula= Reaction~Days+(Days|Subject),data= sleepstudy)
parsedFormula$reTrms

$Ztlist
$Ztlist$`Days | Subject`
6 x 12 sparse Matrix of class "dgCMatrix"

309 1 1 1 1 1 1 1 1 1 1 . . . . . . . . . . . . . . . . . . . .
309 0 1 2 3 4 5 6 7 8 9 . . . . . . . . . . . . . . . . . . . .
330 . . . . . . . . . . 1 1 1 1 1 1 1 1 1 1 . . . . . . . . . .
330 . . . . . . . . . . 0 1 2 3 4 5 6 7 8 9 . . . . . . . . . .
371 . . . . . . . . . . . . . . . . . . . . 1 1 1 1 1 1 1 1 1 1
371 . . . . . . . . . . . . . . . . . . . . 0 1 2 3 4 5 6 7 8 9

이것은 옳은 것처럼 보이지만 그렇다면 그 뒤에 선형 대수학이란 무엇입니까? 나는 1개인의 선택 행을 이해합니다 . 예를 들어, 주제 309는 기준선 + 9 개의 관측치에 대해 설정되어 있으므로 4 등을 얻습니다 1. 두 번째 부분은 0기준선, 1수면 박탈 첫날 등 의 실제 측정치입니다 .

그러나 실제 무엇 매트릭스 및 대응 또는 , 어느 관련이 있습니까?제이나는 엑스나는 나는=(제이나는엑스나는) 나는=(제이나는엑스나는)

가능성이 있습니다.

[1111111111..............................1111111111.............................1111111111][1111111111012456789]=

[1111111111....................012456789.............................1111111111...................012456789..............................1111111111...................012456789]

문제는 lmer함수가 요구하는 것처럼 바뀌지 않고 를 만드는 규칙이 무엇인지 여전히 명확하지 않다는 것 입니다.엑스나는


1
이것은 당신이 만드는 것보다 훨씬 쉽습니다. 여기서 행렬은 단순히 디자인 행렬이있는 항등 행렬의 크로네 커 곱 (조작)입니다.
Donnie

힌트 주셔서 감사합니다. 이 함수의 선형 대수 골격에서 모든 하위 인덱스를 이해하는 데 계속 노력하겠습니다. 클릭하면 제 자신의 질문에 대답 할 것입니다. 그러나 간단하게 알고 있지만 수학 스캐 폴딩 명명법과 예제에 대한 응용 프로그램 간의 일치는 혼란 스럽습니다.
Antoni Parellada

1
당신을위한 또 다른 좋은 리소스는 lme4pureR 구현 일 수 있습니다 . 위의 비 네트와 함께오고 완전히 R로 작성되었습니다. 어쩌면 mkZt()( 여기서 검색 하십시오 ) 좋은 시작입니까?
alexforrence

답변:


5
  1. 생성 원 행렬은 3 단계의 제조 수반 ( , 및 (10 개)의 관찰 또는 측정을 각 () ). OP의 원래 링크에있는 코드를 따릅니다.제이나는309330371nrow(sleepstudy[sleepstudy$Subject==309,]) [1] 10

f <- gl(3,10) Ji<-t(as(f,Class="sparseMatrix"))

여기에 이미지 설명을 입력하십시오

  1. 건물 행렬은 함수를 사용하여 도움을받을 수있는 기준으로서이 :엑스나는getME

    library(lme4) sleepstudy <- sleepstudy[sleepstudy$Subject %in% c(309, 330, 371), ] rownames(sleepstudy) <- NULL fm1<-lmer(Reaction~Days+(Days|Subject), sleepstudy)

Xi <- getME(fm1,"mmList")

여기에 이미지 설명을 입력하십시오

조옮김이 필요하고 객체 Xi가 행렬이 아니기 때문에 다음과 같이 t(Xi)만들 수 있습니다.

t_Xi <- rbind(c(rep(1,30)),c(rep(0:9,3)))

  1. 나는 는 .나는=(제이나는엑스나는)

Zi<-t(KhatriRao(t_Ji,t_Xi)):

여기에 이미지 설명을 입력하십시오

이것은 원래 논문의 식 (6)에 해당 합니다 .

나는=(제이나는엑스나는)=[제이나는1엑스나는1제이나는2엑스나는2제이나는엑스나는]

그리고 이것을보기 위해 9 개의 측정 값과 기준선 (0) 대신 단 하나의 측정 값 (및 기준선) 만 있다고 상상함으로써 잘린 및 행렬로 대신 재생할 수 있습니다 . 결과 행렬은 다음과 같습니다. X T i제이나는엑스나는

X T가 나는 = [ 1 1 1 1 1 1 0 1 0 1 0 1 ]제이나는=[110000001100000011] 및 .엑스나는=[111111010101]

제이나는엑스나는=[(100)(10)(100)(11)(010)(10)(010)(11)(001)(10)(001)(11)]

=[제이나는1엑스나는1제이나는2엑스나는2제이나는엑스나는제이나는4엑스나는4제이나는5엑스나는5제이나는6엑스나는6]

=[110000010000001100000100000011000001] . 조옮김과 확장으로 인해 .나는=[100000110000120000001000001100001200000010000011000012]

  1. 랜덤 효과 계수 의 벡터 추출은 다음 함수를 사용하여 수행 할 수 있습니다.

b <- getME(fm1,"b")

[1,] -44.1573839
[2,]  -2.4118590
[3,]  32.8633489
[4,]  -0.3998801
[5,]  11.2940350
[6,]   2.8117392

이러한 값을 호출의 고정 효과에 추가 fm1<-lmer(Reaction~Days+(Days|Subject), sleepstudy)하면 인터셉트가 발생합니다.

205.3016 for 309; 282.3223 for 330; and 260.7530 for 371

그리고 슬로프 :

2.407141 for 309; 4.419120 for 330; and 7.630739 for 371

다음과 일치하는 값 :

library(lattice)
xyplot(Reaction ~ Days | Subject, groups = Subject, data = sleepstudy, 
       pch=19, lwd=2, type=c('p','r'))

여기에 이미지 설명을 입력하십시오

  1. 는로 계산할 수 있습니다 as.matrix(Zi)%*%b.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.