错误:“mutate()”列出现问题 (...) 大小必须为 15 或 1,而不是 17192

Pål*_*tan 5 r lme4 dplyr

lme4::lmer我目前正在尝试按照本教程绘制函数的结果。我已经尝试了教程中的代码,它按预期工作。\n在教程中,在pred_dist绘图之前将一列添加到数据集中以用于拟合函数。当我用自己的数据尝试此操作时,出现以下错误:

\n
Error: Problem with `mutate()` column `pred_dist`.\n\xe2\x84\xb9 `pred_dist = fitted(model0)`.\n\xe2\x84\xb9 `pred_dist` must be size 15 or 1, not 17192.\n\xe2\x84\xb9 The error occurred in group 1: sgroup = 578, group = 1.\n
Run Code Online (Sandbox Code Playgroud)\n

样本数据

\n

我的代码:

\n
# Loaded libraries\nlibrary(dplyr)\nlibrary(ggplot2)\nlibrary(lme4)\nlibrary(lmerTest)\nlibrary(lattice)\n\n# My lmer model. myData is fairly \nmodel0 <- lmer(outcome ~ (1|group), data=myData, REML = FALSE)\nsummary(model0)\n\nmyData %>% \n    # save predicted values\n    mutate(pred_dist = fitted(model0)) \n
Run Code Online (Sandbox Code Playgroud)\n

我想了解的是:是什么导致了此错误消息,以及如何解决它?

\n
\n
更新:
\n

根据bouncyballungroup()的评论,我在之前添加了\n mutate()。这适用于我的初始模型,但不适用于后续模型。\n我尝试了以下操作:

\n
> model1 <- lmer(outcome ~ predictor + (1|group), myData, REML=FALSE) \n\n> plotVar$pred_dist = fitted(model1). \n\nError: Assigned data \'value\' must be compatible with existing data. \n\xe2\x9c\x96 Existing data has 17192 rows. \n\xe2\x9c\x96 Assigned data has 16794 rows. \n\xe2\x84\xb9 Only vectors of size 1 are recycled.\n\n> plotVar %>% ungroup(.) \n          %>% mutate(pred_dist = fitted(model1)) \n\nError: Problem with \'mutate()\' column \'pred_dist\'. \n\xe2\x84\xb9 \'pred_dist = fitted(model1)\'. \n\xe2\x84\xb9 \'pred_dist\' must be size 17192 or 1, not 16794.\n
Run Code Online (Sandbox Code Playgroud)\n

Ben*_*ker 9

我强烈猜测这里发生了两种不同的事情:(1)分组(2)NA值。

\n

让我们构建一个分组又包含NA值的示例:

\n
library(dplyr)\nlibrary(lme4)\nss <- sleepstudy |> group_by(Subject)\nss$Days[1:5] <- NA\n\nm0 <- lmer(Reaction ~ Days + (Days | Subject), ss)\n
Run Code Online (Sandbox Code Playgroud)\n

尝试一下原来的代码:

\n
ss |> mutate(pred = fitted(m0))\n
Run Code Online (Sandbox Code Playgroud)\n
\n

\xe2\x84\xb9 的pred大小必须为 10 或 1,而不是 175。
\n\xe2\x84\xb9 组 1 中发生错误:主题 = 308。

\n
\n

尝试使用ungroup()

\n
ss |> ungroup() |> mutate(pred = fitted(m0))\n
Run Code Online (Sandbox Code Playgroud)\n
\n

\xe2\x84\xb9 pred = fitted(m0)
\n\xe2\x84\xb9 的pred大小必须为 180 或 1,而不是 175。

\n
\n

我们仍然收到错误,但请注意尺寸不同。

\n

现在使用更新模型na.action = na.exclude(这可以在第一个模型中完成,或者可以通过设置来完成options(na.action = "na.exclude")

\n
m1 <- update(m0, na.action = na.exclude)\nss |> ungroup() |> mutate(pred = fitted(m1))\n
Run Code Online (Sandbox Code Playgroud)\n

  • `|&gt;` 是 R 版本 4.0 中的新增内容。它*不可*互换: /sf/ask/4734311571/ Between-rs-new-native-pipe-and-the-magrittr-pipe 。我喜欢它,因为它没有依赖项,尽管在本例中这并不重要,因为我们无论如何都使用“dplyr”。 (3认同)