Интерпретация вывода кусочно-смешанных эффектов

Я пытаюсь понять итоговый вывод из кусочно-смешанной модели эффектов и мог бы использовать некоторые идеи. В частности, я хочу знать, как получить перехваты и наклоны регрессии для линии слева и справа от точки останова. Из того, что я понимаю, пересечение, данное в выходных данных ниже, относится к линии регрессии слева от точки останова, а значение, данное для I(Days * (Days < 6.07)), представляет собой наклон этой линии. Тем не менее, я не думаю, что я (Days * (Days >= 6.07)) является наклоном для линии справа от точки останова, равно как и разница между двумя уклонами.

library(lme4)
sleepstudy<-as.data.frame(sleepstudy)

Я вытащил точку останова из предыдущего потока: https://stats.stackexchange.com/questions/19772/estimating-the-break-point-in-a-broken-stick-piecewise-linear-model-with-rando

Linear mixed model fit by REML ['lmerMod']
Formula: Reaction ~ I(Days * (Days < 6.07)) + I(Days * (Days >= 6.07)) +      (1 | Subject) 
   Data: sleepstudy 

REML criterion at convergence: 1784.369 

Random effects:
 Groups   Name        Variance Std.Dev.
 Subject  (Intercept) 1377.6   37.12   
 Residual              965.7   31.08   
Number of obs: 180, groups: Subject, 18

Fixed effects:
                         Estimate Std. Error t value
(Intercept)              252.2663    10.0545  25.090
I(Days * (Days < 6.07))   10.0754     1.3774   7.315
I(Days * (Days >= 6.07))  10.4513     0.8077  12.940

Correlation of Fixed Effects:
            (Intr) I(*(<6
I(D*(D<6.07 -0.409       
I(D*(D>=6.0 -0.374  0.630

Я попытался упростить, удалив случайный эффект: когда I() включен в модель lm, наклон / пересечение очень похожи на смешанную модель выше, и я все еще в замешательстве.

mod_lm<-lm (Реакция ~ I (Дни * (Дни <6.07)) + + I (Дни * (Дни>= 6.07)), data = sleepstudy) сводка (mod_lm)

Call:
lm(formula = Reaction ~ I(Days * (Days < 6.07)) + I(Days * (Days >= 
    6.07)), data = sleepstudy)

Residuals:
     Min       1Q   Median       3Q      Max 
-111.581  -27.632    1.614   26.994  141.443 

Coefficients:
                         Estimate Std. Error t value Pr(>|t|)    
(Intercept)               252.266      7.629  33.066  < 2e-16 ***
I(Days * (Days < 6.07))    10.075      2.121   4.751 4.17e-06 ***
I(Days * (Days >= 6.07))   10.451      1.243   8.405 1.37e-14 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 47.84 on 177 degrees of freedom
Multiple R-squared:  0.2867,    Adjusted R-squared:  0.2786 
F-statistic: 35.57 on 2 and 177 DF,  p-value: 1.037e-13

Однако, когда I() удаляется из формулы lm, я понимаю вывод, и результаты имеют смысл.

mod_lm<-lm (Реакция ~ Дни * (Дни <6.07) + Дни * (Дни>= 6.07), data = sleepstudy) сводка (mod_lm)

Call:
lm(formula = Reaction ~ Days * (Days < 6.07) + Days * (Days >= 
    6.07), data = sleepstudy)

Residuals:
     Min       1Q   Median       3Q      Max 
-114.214  -27.833    0.603   27.254  141.693 

Coefficients: (2 not defined because of singularities)
                      Estimate Std. Error t value Pr(>|t|)   
(Intercept)            207.008     64.211   3.224  0.00151 **
Days                    16.050      7.985   2.010  0.04595 * 
Days < 6.07TRUE         45.908     64.671   0.710  0.47872   
Days >= 6.07TRUE            NA         NA      NA       NA   
Days:Days < 6.07TRUE    -6.125      8.265  -0.741  0.45965   
Days:Days >= 6.07TRUE       NA         NA      NA       NA   
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 47.91 on 176 degrees of freedom
Multiple R-squared:  0.2887,    Adjusted R-squared:  0.2766 
F-statistic: 23.81 on 3 and 176 DF,  p-value: 5.526e-13

Когда члены I() удаляются из формулы lmer, однако lmer не запускается.

mod1<-lmer(Reaction ~ Days*(Days < 6.07) + Days*(Days>= 6.07) + (1|Subject), data = sleepstudy)
Error in lme4::lFormula(formula = Reaction ~ Days * (Days < 6.07) + Days *  : 
  rank of X = 4 < ncol(X) = 6

Может ли кто-нибудь сказать мне, как интерпретировать вывод lmer(), когда I() используется в предикторах модели, или подсказать, как запустить модель lmer() без I() в предикторах модели?

Я ценю любые доступные рекомендации, так как я не смог найти ничего на страницах справки R для этого!

Спасибо.

1 ответ

Я думаю, что вы можете получить то, что вы хотите, следующим образом:

library(lme4)
sleepstudy <- transform(sleepstudy,period=(Days<6.5))
(m0 <- lmer(Reaction ~ Days+ (1 | Subject), sleepstudy))
(m2 <- lmer(Reaction ~ Days*period+ (1 | Subject), sleepstudy))
## 
## Linear mixed model fit by REML ['lmerMod']
## Formula: Reaction ~ Days * period + (1 | Subject) 
##    Data: sleepstudy 
## REML criterion at convergence: 1773.86 
## Random effects:
##  Groups   Name        Std.Dev.
##  Subject  (Intercept) 37.12   
##  Residual             31.06   
## Number of obs: 180, groups: Subject, 18
## Fixed Effects:
##     (Intercept)             Days       periodTRUE  Days:periodTRUE  
##         207.008           16.050           45.908           -6.125  

Ваши результаты с I() строят числовые переменные, а не категориальные переменные (которые преобразуются в фиктивные переменные). Возможно, основная причина вашего замешательства заключается в том, что ваш первый набор моделей не допускает отдельных перехватов по периодам, только отдельные наклоны...

Причина того, что lmer не работает для вашего второго набора моделей является то, что lmer не так терпимо к чрезмерной параметризации (мультиколлинеарным предикторам), как lm есть, хотя версия для разработчиков (доступна на Github и скоро будет выпущена): если вы запустите mod1 он будет соответствовать модели и выведет сообщение "матрица модели с фиксированным эффектом имеет недостаток ранга, поэтому отбрасывает 2 столбца / коэффициента" (в отличие от lm, он не сохраняет отброшенные столбцы с NA коэффициенты, просто отбрасывает их целиком).

Обновление:

sleepstudy <- transform(sleepstudy,cDays=Days-6.5)
m3 <- lmer(Reaction ~ cDays:period+ (1 | Subject), sleepstudy)
library(ggplot2); theme_set(theme_bw())    
library(reshape2)
g0 <- ggplot(sleepstudy,aes(Days,Reaction,group=Subject))+geom_line()
pframe <- data.frame(Days=seq(0,8,length=101))
pframe <- transform(pframe,cDays=Days-6.5,period=Days>6.5)
## next line assumes latest version of lme4 -- you may need REform instead
pframe$Reaction <- predict(m3,newdata=pframe,re.form=NA)
pframe$Reaction2 <- predict(m0,newdata=pframe,re.form=NA)

Трудно увидеть разницу в склонах - довольно тонко.

g0 + geom_line(data=pframe,colour=2,aes(group=NA))+
     geom_line(data=pframe,colour=2,lty=2,
         aes(y=Reaction2,group=NA))+
     geom_vline(xintercept=6.5,lty=2)
Другие вопросы по тегам