lmer 혼합 효과 모델에 대한 predict () 함수


27

문제 :

[R]의 혼합 효과 {lme4} 모델에 사용할 수없는 다른 게시물 을 읽었습니다 .predictlmer

장난감 데이터 세트 로이 주제를 탐색하려고했습니다 ...

배경:

데이터 세트는 이 소스 에서 적용되며 다음과 같이 사용할 수 있습니다.

require(gsheet)
data <- read.csv(text = 
     gsheet2text('https://docs.google.com/spreadsheets/d/1QgtDcGJebyfW7TJsB8n6rAmsyAnlz1xkT3RuPFICTdk/edit?usp=sharing',
        format ='csv'))

다음은 첫 번째 행과 헤더입니다.

> head(data)
  Subject Auditorium Education Time  Emotion Caffeine Recall
1     Jim          A        HS    0 Negative       95 125.80
2     Jim          A        HS    0  Neutral       86 123.60
3     Jim          A        HS    0 Positive      180 204.00
4     Jim          A        HS    1 Negative      200  95.72
5     Jim          A        HS    1  Neutral       40  75.80
6     Jim          A        HS    1 Positive       30  84.56

우리는 Time지속적인 측정, 즉 Recall단어 의 비율, 무작위 효과 ( Auditorium시험이 일어난 곳; Subject이름)를 포함한 여러 설명 변수를 반복적으로 관찰했습니다 ( ). 및 고정 효과 등, Education, Emotion(단어의 감정 내포 기억하는) 또는 의 섭취 전에 테스트합니다.mgs.Caffeine

카페인이 많이 함유 된 유선 대상의 경우 기억하기 쉽지만 시간이 지남에 따라 피곤함으로 인해 능력이 저하됩니다. 부정적인 의미를 가진 단어는 기억하기가 더 어렵습니다. 교육은 예측 가능한 효과가 있으며, 심지어 강당까지도 역할을 수행합니다 (아마도 소음이 심하거나 덜 편안했습니다). 다음은 몇 가지 탐색 그림입니다.


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

(A)의 함수로서 회수 속도의 차이 Emotional Tone, AuditoriumEducation:

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


데이터 클라우드에서 통화 라인을 피팅 할 때 :

fit1 <- lmer(Recall ~ (1|Subject) + Caffeine, data = data)

나는이 줄거리를 얻는다 :

다음 코드와 함께 (<code> predict (fit1) </ code> 호출)

library(ggplot2)
p <- ggplot(data, aes(x = Caffeine, y = Recall, colour = Subject)) +
  geom_point(size=3) +
  geom_line(aes(y = predict(fit1)),size=1) 
print(p)

다음 모델 동안 :

fit2 <- lmer(Recall ~ (1|Subject/Time) + Caffeine, data = data)

통합 Time하고 병렬 코드는 놀라운 플롯을 얻습니다.

p <- ggplot(data, aes(x = Caffeine, y = Recall, colour = Subject)) +
  geom_point(size=3) +
  geom_line(aes(y = predict(fit2)),size=1) 
print(p)

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


질문:

predictlmer모델 에서 기능 은 어떻게 작동 합니까? 분명히 Time변수 를 고려하여 훨씬 더 밀착 Time되고 첫 번째 플롯 에 묘사 된 이 3 차원을 표시하려고하는 지그재그가 있습니다.

내가 전화 하면 첫 번째 항목을 predict(fit2)132.45609습니다. 첫 번째 지점에 해당합니다. 마지막 열로 head출력이 predict(fit2)첨부 된 데이터 집합 은 다음과 같습니다 .

> data$predict = predict(fit2)
> head(data)
  Subject Auditorium Education Time  Emotion Caffeine Recall   predict
1     Jim          A        HS    0 Negative       95 125.80 132.45609
2     Jim          A        HS    0  Neutral       86 123.60 130.55145
3     Jim          A        HS    0 Positive      180 204.00 150.44439
4     Jim          A        HS    1 Negative      200  95.72 112.37045
5     Jim          A        HS    1  Neutral       40  75.80  78.51012
6     Jim          A        HS    1 Positive       30  84.56  76.39385

계수 fit2는 다음과 같습니다.

$`Time:Subject`
         (Intercept)  Caffeine
0:Jason     75.03040 0.2116271
0:Jim       94.96442 0.2116271
0:Ron       58.72037 0.2116271
0:Tina      70.81225 0.2116271
0:Victor    86.31101 0.2116271
1:Jason     59.85016 0.2116271
1:Jim       52.65793 0.2116271
1:Ron       57.48987 0.2116271
1:Tina      68.43393 0.2116271
1:Victor    79.18386 0.2116271
2:Jason     43.71483 0.2116271
2:Jim       42.08250 0.2116271
2:Ron       58.44521 0.2116271
2:Tina      44.73748 0.2116271
2:Victor    36.33979 0.2116271

$Subject
       (Intercept)  Caffeine
Jason     30.40435 0.2116271
Jim       79.30537 0.2116271
Ron       13.06175 0.2116271
Tina      54.12216 0.2116271
Victor   132.69770 0.2116271

최선의 방법은 ...

> coef(fit2)[[1]][2,1]
[1] 94.96442
> coef(fit2)[[2]][2,1]
[1] 79.30537
> coef(fit2)[[1]][2,2]
[1] 0.2116271
> data$Caffeine[1]
[1] 95
> coef(fit2)[[1]][2,1] + coef(fit2)[[2]][2,1] + coef(fit2)[[1]][2,2] * data$Caffeine[1]
[1] 194.3744

대신 얻을 수식은 무엇입니까 132.45609?


빠른 액세스를위한 편집 ... 예측 된 값을 계산하는 공식 (허용 된 답변에 따라 ranef(fit2)출력을 기반으로 함) :

> ranef(fit2)
$`Time:Subject`
         (Intercept)
0:Jason    13.112130
0:Jim      33.046151
0:Ron      -3.197895
0:Tina      8.893985
0:Victor   24.392738
1:Jason    -2.068105
1:Jim      -9.260334
1:Ron      -4.428399
1:Tina      6.515667
1:Victor   17.265589
2:Jason   -18.203436
2:Jim     -19.835771
2:Ron      -3.473053
2:Tina    -17.180791
2:Victor  -25.578477

$Subject
       (Intercept)
Jason   -31.513915
Jim      17.387103
Ron     -48.856516
Tina     -7.796104
Victor   70.779432

... 첫 번째 진입 점의 경우 :

> summary(fit2)$coef[1]
[1] 61.91827             # Overall intercept for Fixed Effects 
> ranef(fit2)[[1]][2,]   
[1] 33.04615             # Time:Subject random intercept for Jim
> ranef(fit2)[[2]][2,]
[1] 17.3871              # Subject random intercept for Jim
> summary(fit2)$coef[2]
[1] 0.2116271            # Fixed effect slope
> data$Caffeine[1]
[1] 95                   # Value of caffeine

summary(fit2)$coef[1] + ranef(fit2)[[1]][2,] + ranef(fit2)[[2]][2,] + 
                    summary(fit2)$coef[2] * data$Caffeine[1]
[1] 132.4561

이 게시물의 코드는 여기에 있습니다 .


3
이 되었음에 유의 predict버전 1.0-0 이후이 패키지의 기능은 2013년 8월 1일을 발표했다. CRAN패키지 뉴스 페이지를 참조하십시오 . 없는 경우으로 결과를 얻을 수 없었습니다 predict. R 명령 프롬프트에서 lme4 ::: predict.merMod를 사용하여 R 코드를보고 소스 패키지에서에 대한 기본 컴파일 된 함수가 있는지 소스를 검사하십시오 lme4.
EdM

1
고맙게도, 랜덤 효과를 무시하거나 포함하는 기능이 있습니다. 계산 방법을 어디에서 찾을 수 있는지 알고 있습니까? 내가 입력 한 경우 ?predict에서 [R] 콘솔에서, 나는 ... 기본은 {통계}에 대한 예측 얻을
안토니 Parellada

@ EdM ... 네, 이것은 새로운 것입니다 ... 감사합니다. 나는 전화하지 않았다 predict.merMod... OP에서 볼 수 있듯이, 나는 단순히 전화했다 predict...
Antoni Parellada

1
lme4패키지를 로드 한 다음 lme4 ::: predict.merMod를 입력하여 패키지 별 버전을 확인하십시오. 의 출력 lmer은 class 객체에 저장됩니다 merMod.
EdM

4
R의 아름다움 중 하나는 기능 predict을 수행하기 위해 호출되는 객체의 클래스에 따라해야 할 일을 알고 있다는 것입니다. 당신은 전화했다 predict.merMod, 당신은 그것을 몰랐다.
EdM

답변:


25

호출 할 때 계수 표시로 인해 혼동되기 쉽습니다 coef(fit2). fit2의 요약을보십시오 :

> summary(fit2)
Linear mixed model fit by REML ['lmerMod']
Formula: Recall ~ (1 | Subject/Time) + Caffeine
   Data: data
REML criterion at convergence: 444.5

Scaled residuals: 
 Min       1Q   Median       3Q      Max 
-1.88657 -0.46382 -0.06054  0.31430  2.16244 

Random effects:
 Groups       Name        Variance Std.Dev.
 Time:Subject (Intercept)  558.4   23.63   
 Subject      (Intercept) 2458.0   49.58   
 Residual                  675.0   25.98   
Number of obs: 45, groups:  Time:Subject, 15; Subject, 5

Fixed effects:
Estimate Std. Error t value
(Intercept) 61.91827   25.04930   2.472
Caffeine     0.21163    0.07439   2.845

Correlation of Fixed Effects:
 (Intr)
Caffeine -0.365

카페인 계수가 0.212 인 모델의 전체 절편은 61.92입니다. 따라서 카페인 = 95의 경우 평균 82.06 회수를 예측합니다.

를 사용하는 대신 다음 높은 수준의 중첩에서 평균 차단과 각 임의 효과 차단의 차이를 얻는 데 coef사용 ranef하십시오.

> ranef(fit2)
$`Time:Subject`
         (Intercept)
0:Jason    13.112130
0:Jim      33.046151
0:Ron      -3.197895
0:Tina      8.893985
0:Victor   24.392738
1:Jason    -2.068105
1:Jim      -9.260334
1:Ron      -4.428399
1:Tina      6.515667
1:Victor   17.265589
2:Jason   -18.203436
2:Jim     -19.835771
2:Ron      -3.473053
2:Tina    -17.180791
2:Victor  -25.578477
$Subject
       (Intercept)
Jason   -31.513915
Jim      17.387103
Ron     -48.856516
Tina     -7.796104
Victor   70.779432

시간이 0 일 때 Jim의 값은 해당 계수 Subject 그의 Time:Subject계수 의 합에 의해 평균값 82.06과 다릅니다 .

82.06+17.39+33.04=132.49

132.46의 반올림 오류 내에 있다고 생각합니다.

에 의해 반환 된 절편 값은 coef전체 차단을 더한 표현하는 것 Subject또는 Time:Subject그 사람들과 일에 더 열심히, 그래서 특정 차이를; coef값으로 위의 계산을 시도 하면 전체 절편을 두 번 계산합니다.


고맙습니다! 이것은 훌륭했습니다! 나는 열 떠나 어느 시점이이 ... 생각하지 않는다 가, 대답되지 않는 이유는 무엇입니까?
Antoni Parellada

ranef에서 R 코드를 검사 하여 힌트를 얻었 습니다 lme4. 나는 두 곳에서 프레젠테이션을 명확히했다.
EdM

(+1) 참고 : 사람 안에 중첩 된 시간 랜덤 효과는 어떻게 든 이상하게 보입니다.
Michael M

@MichaelM : 예, 제시된 데이터는 중첩 된 디자인이 아니라 교차 된 (Time x Subject) 것으로 보이지만 OP가 lme4출력 해석 방법에 대한 의문을 제기 한 방식 입니다. 또한 제시된 데이터는 실제 연구가 아닌 설명을위한 것으로 보입니다.
EdM
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.