문제 :
[R]의 혼합 효과 {lme4} 모델에 사용할 수없는 다른 게시물 을 읽었습니다 .predict
lmer
장난감 데이터 세트 로이 주제를 탐색하려고했습니다 ...
배경:
데이터 세트는 이 소스 에서 적용되며 다음과 같이 사용할 수 있습니다.
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
(단어의 감정 내포 기억하는) 또는 의 섭취 전에 테스트합니다.Caffeine
카페인이 많이 함유 된 유선 대상의 경우 기억하기 쉽지만 시간이 지남에 따라 피곤함으로 인해 능력이 저하됩니다. 부정적인 의미를 가진 단어는 기억하기가 더 어렵습니다. 교육은 예측 가능한 효과가 있으며, 심지어 강당까지도 역할을 수행합니다 (아마도 소음이 심하거나 덜 편안했습니다). 다음은 몇 가지 탐색 그림입니다.
(A)의 함수로서 회수 속도의 차이 Emotional Tone
, Auditorium
및 Education
:
데이터 클라우드에서 통화 라인을 피팅 할 때 :
fit1 <- lmer(Recall ~ (1|Subject) + Caffeine, data = data)
나는이 줄거리를 얻는다 :
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)
질문:
predict
이 lmer
모델 에서 기능 은 어떻게 작동 합니까? 분명히 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
이 게시물의 코드는 여기에 있습니다 .
?predict
에서 [R] 콘솔에서, 나는 ... 기본은 {통계}에 대한 예측 얻을
predict.merMod
... OP에서 볼 수 있듯이, 나는 단순히 전화했다 predict
...
lme4
패키지를 로드 한 다음 lme4 ::: predict.merMod를 입력하여 패키지 별 버전을 확인하십시오. 의 출력 lmer
은 class 객체에 저장됩니다 merMod
.
predict
을 수행하기 위해 호출되는 객체의 클래스에 따라해야 할 일을 알고 있다는 것입니다. 당신은 전화했다 predict.merMod
, 당신은 그것을 몰랐다.
predict
버전 1.0-0 이후이 패키지의 기능은 2013년 8월 1일을 발표했다. CRAN 의 패키지 뉴스 페이지를 참조하십시오 . 없는 경우으로 결과를 얻을 수 없었습니다predict
. R 명령 프롬프트에서 lme4 ::: predict.merMod를 사용하여 R 코드를보고 소스 패키지에서에 대한 기본 컴파일 된 함수가 있는지 소스를 검사하십시오lme4
.