首页 文章

绘制没有协方差矩阵的lmer模型

提问于
浏览
0

我试图为纸张绘制一些lmer模型 . 我不得不通过降低随机斜率和截距之间的相关性来简化随机效应结构(Barr et al . ,2013) . 但是,当我尝试使用sjp.lmer函数绘图时,我收到以下错误:

数组中的错误(NA,c(J,K)):'dims'的长度不能为0另外:警告消息:在ranef.merMod中(对象,condVar = TRUE):条件差异当前没有通过ranef可用每个因素有多个术语

有没有潜在的解决办法?任何帮助将不胜感激 .

嗨Ben,这是我正在使用的一些数据:

> dput(df)
structure(list(Subject = c(1L, 2L, 3L, 5L, 6L, 6L, 6L, 7L, 7L, 
7L, 8L, 8L, 8L, 9L, 9L, 9L, 10L, 10L, 11L, 11L, 11L, 12L, 12L, 
13L, 13L, 14L, 14L, 15L, 15L, 16L, 16L, 16L, 17L, 17L, 17L, 18L, 
18L, 18L, 19L, 19L, 20L, 20L, 21L, 21L, 22L, 22L, 23L, 23L, 23L, 
24L, 24L, 25L, 25L, 25L, 26L, 26L, 26L, 27L, 27L, 28L, 28L, 29L, 
29L, 29L, 30L, 31L, 32L, 33L, 34L, 35L, 36L, 37L, 38L, 39L, 40L, 
41L, 42L, 43L, 44L, 45L, 46L, 47L, 48L, 49L, 50L, 51L, 52L, 53L, 
54L, 55L, 56L, 57L, 58L, 59L, 60L, 61L, 62L, 63L, 64L, 65L, 66L, 
67L, 68L, 69L, 70L, 71L, 72L, 73L, 74L, 75L, 76L, 77L, 78L, 79L, 
80L, 81L, 82L, 83L, 84L, 85L, 86L, 87L, 88L, 89L, 90L, 91L, 92L, 
93L, 94L, 95L, 96L, 97L, 98L, 99L, 100L, 101L, 102L, 103L, 104L, 
105L, 106L, 107L, 108L, 109L, 110L, 111L, 112L, 113L, 114L, 115L, 
116L), A = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), .Label = c("1", 
"2"), class = "factor"), B = structure(c(1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
3L, 3L), .Label = c("1", "2", "3"), class = "factor"), C = c(9.58, 
9.75, 15, 10.75, 13.3, 14.42, 15.5, 9.25, 10.33, 11.33, 9.55, 
11, 11.92, 14.25, 15.5, 16.42, 14.92, 16.17, 10.83, 11.92, 12.92, 
7.5, 8.5, 10.33, 11.25, 13.08, 13.83, 14.92, 15.92, 9.58, 14.83, 
11.92, 8.33, 9.5, 10.5, 6.8, 7.92, 9, 13.5, 10.92, 10, 11, 13, 
15.58, 12.92, 11.8, 5.75, 6.75, 7.83, 11.12, 12.25, 12.08, 13.08, 
14.58, 8.08, 9.17, 10.67, 10.6, 12.67, 7.83, 8.83, 9.67, 10.58, 
11.75, 7, 17.17, 11.25, 13.75, 11.83, 16.92, 8.83, 7.07, 7.83, 
15.08, 15.83, 16.67, 18.87, 11.92, 12.83, 7.83, 12.33, 10, 11.08, 
12.08, 15.67, 11.75, 15, 14.308, 15.9064, 16.161, 16.9578, 8.90197, 
16.2897, 9.05805, 10.5969, 5.15334, 9.1046, 14.1019, 18.9736, 
10.9447, 14.5455, 16.172, 6.65389, 11.3171, 12.2864, 17.9929, 
10.5778, 16.9195, 7.6, 7.8, 7.2, 16.7, 17, 16.5, 17, 15.1, 16, 
16.4, 13.8, 13.8, 14.5, 16.1, 15.8, 15, 14.1, 15, 14.7, 15, 14.5, 
10.8, 11.4, 11.3, 10.9, 11.2, 9.3, 10.8, 9.7, 8, 8.2, 8.2, 17.5, 
12.6, 11.6, 10.8, 11.8, 12.3, 16.3, 17.1, 9.626283368, 14.6, 
13.7), D = structure(c(2L, 1L, 1L, 2L, 1L, 1L, 1L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 2L, 2L, 1L, 1L, 1L, 
1L, 1L, 1L, 2L, 2L, 2L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 
2L, 2L, 2L, 2L, 1L, 1L, 1L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 2L, 1L, 2L, 1L, 2L, 2L, 2L, 1L, 
1L, 1L, 2L, 1L, 1L, 2L, 1L, 2L, 1L, 2L, 2L, 1L, 2L, 1L, 2L, 1L, 
1L, 2L, 1L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 1L, 2L, 1L, 2L, 
1L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), .Label = c("1", 
"2"), class = "factor"), Frontal_FA = c(0.4186705, 0.4151535, 
0.4349945, 0.4003705, 0.403488, 0.407451, 0.3997135, 0.38826, 
0.3742275, 0.3851655, 0.3730715, 0.3825115, 0.3698805, 0.395406, 
0.39831, 0.4462415, 0.413532, 0.419088, 0.4373975, 0.4633915, 
0.4411375, 0.3545255, 0.389322, 0.349402, 0.352029, 0.367792, 
0.365298, 0.3790775, 0.379298, 0.36231, 0.3632755, 0.357868, 
0.3764865, 0.3726645, 0.351422, 0.3353255, 0.334196, 0.3462365, 
0.367369, 0.3745925, 0.3610755, 0.360576, 0.357035, 0.3554905, 
0.3745615, 0.38828, 0.3293275, 0.3246945, 0.3555345, 0.375563, 
0.38116, 0.387508, 0.357707, 0.413193, 0.3658075, 0.3776355, 
0.362678, 0.3824945, 0.3771, 0.375347, 0.362468, 0.367618, 0.3630925, 
0.3763995, 0.359458, 0.3982755, 0.3834765, 0.386135, 0.3691575, 
0.388099, 0.350435, 0.3629045, 0.3456775, 0.4404815, 0.4554165, 
0.425763, 0.4491515, 0.461206, 0.453745, 0.4501255, 0.4451875, 
0.4369835, 0.456838, 0.437759, 0.4377635, 0.44434, 0.4436615, 
0.437532, 0.4335325, 0.4407995, 0.470447, 0.4458525, 0.440322, 
0.4570775, 0.4410335, 0.436045, 0.4721345, 0.4734515, 0.4373905, 
0.4139465, 0.440213, 0.440281, 0.425746, 0.454377, 0.4457435, 
0.488561, 0.4393565, 0.4610565, 0.3562055, 0.381041, 0.353253, 
0.4265975, 0.4069595, 0.40092, 0.4261365, 0.429605, 0.425479, 
0.4331755, 0.3981285, 0.4206245, 0.3798475, 0.3704155, 0.395192, 
0.404436, 0.4148915, 0.416144, 0.384652, 0.3916045, 0.41005, 
0.3940605, 0.3926085, 0.383909, 0.391792, 0.372398, 0.3531025, 
0.414441, 0.404335, 0.3682095, 0.359976, 0.376681, 0.4173705, 
0.3492685, 0.397057, 0.3940605, 0.398825, 0.3707115, 0.400228, 
0.3946595, 0.4278775, 0.384037, 0.43577)), .Names = c("Subject", 
"A", "B", "C", "D", "Frontal_FA"), class = "data.frame", row.names = c(NA, 
-151L))

这是我正在运行的代码

lmer fit

FA <- lmer(Frontal_FA ~ poly(C) + A + B + D + (poly(C)||Subject), data = df)

情节lmer合身

sjp.lmer(FA)

谢谢你的帮助 .

1 回答

  • 1

    sjp.lmer ,默认情况下,绘制模型的随机效果 . 但是,它使用 arm:se.ranef 函数绘制带置信区间的随机效应(BLUP) . 此函数会导致您收到第一条错误消息:

    arm::se.ranef(FA)
    > Error in array(NA, c(J, K)) : 'dims' cannot be of length 0
    

    然后, se.ranef 函数使用参数 condVar = TRUE 调用 lme4::ranef 函数,该函数尚未针对lme4中的特定条件(如您的)实现 . 因此,您会收到额外的警告

    In ranef.merMod(object, condVar = TRUE) :
      conditional variances not currently available via ranef when there are multiple terms per factor
    

    如果您对绘制随机效果特别感兴趣,可以使用lme4实现的 dotplot -function:

    lattice::dotplot(ranef(FA))
    

    enter image description here

    如果您对任何其他绘图类型(固定效果,边际效果,预测等)感兴趣,请参阅 ?sjp.lmer 或某些示例at his page .

    Edit 如果您不介意从GitHub安装( devtools::install_github("sjPlot/devel") ,我已经提交了一个小更新,那么您可以使用 show.ci = FALSE 来避免计算随机效果的置信区间:

    sjp.lmer(FA, type = "re", show.ci = F, sort.est = "(Intercept)")
    

    enter image description here

相关问题