【问题标题】:Unable to run Two-way repeated measures ANOVA; 0 (non-NA) cases无法运行双向重复测量方差分析; 0(非NA)案例
【发布时间】:2020-05-19 16:01:12
【问题描述】:

我正在尝试遵循 Datanovia 为 Two-way repeated measures ANOVA 提供的教程。

我的数据集的快速概览:

随着时间的推移,我测量了 12 个采样单位中不同细菌种类的数量。我有16个时间点和2组。我将我的数据组织为一个名为“丰富性”的小标题;

# A tibble: 190 x 4
   id    selection.group Day   value
   <fct> <fct>           <fct> <dbl>
 1 KRH1  KR              2      111.
 2 KRH2  KR              2      141.
 3 KRH3  KR              2      110.
 4 KRH1  KR              4      126 
 5 KRH2  KR              4      144 
 6 KRH3  KR              4      135.
 7 KRH1  KR              6      115.
 8 KRH2  KR              6      113.
 9 KRH3  KR              6      107.
10 KRH1  KR              8      119.

id指的是每个采样单元,选择组有两个因素(KR和RK)。

richness <- tibble(
  id = factor(c("KRH1", "KRH3", "KRH2", "RKH2", "RKH1", "RKH3")), 
  selection.group = factor(c("KR", "KR", "KR", "RK", "RK", "RK")), 
  Day = factor(c(2,2,4,2,4,4)), 
  value = c(111, 110, 144,  92,  85,  69))  # subset of original data

我的 tibble 似乎与教程中的格式相同;

> str(selfesteem2)
Classes ‘tbl_df’, ‘tbl’ and 'data.frame':   72 obs. of  4 variables:
 $ id       : Factor w/ 12 levels "1","2","3","4",..: 1 2 3 4 5 6 7 8 9 10 ...
 $ treatment: Factor w/ 2 levels "ctr","Diet": 1 1 1 1 1 1 1 1 1 1 ...
 $ time     : Factor w/ 3 levels "t1","t2","t3": 1 1 1 1 1 1 1 1 1 1 ...
 $ score    : num  83 97 93 92 77 72 92 92 95 92 ..

在运行重复测量方差分析之前,我必须检查数据的正态性。我复制了教程中提出的框架。

#my code
richness %>%
  group_by(selection.group, Day) %>%
  shapiro_test(value)

#tutorial code
selfesteem2 %>%
  group_by(treatment, time) %>%
  shapiro_test(score)

但是当我尝试运行代码时收到错误消息“错误:列variable 未知”。有谁知道为什么会这样?

我试图在没有保险的情况下继续,我的数据是正态分布的,并尝试运行 ANOVA

res.aov <- rstatix::anova_test(
  data = richness, dv = value, wid = id,
  within = c(selection.group, Day)
  )

但是得到这个错误信息; lm.fit(x, y, offset = offset,singular.ok =singular.ok, ...) 中的错误: 0(非NA)案例

我用any(is.na(richness)) 检查了NA 值,它返回FALSE。我还检查了table(richness$selection.group, richness$Day) 以确保我的设置正确


     2 4 6 8 12 16 20 24 28 29 30 32 36 40 44 50
  KR 6 6 6 6  6  6  6  6  6  6  6  5  6  6  6  6
  RK 6 6 6 6  6  5  6  6  6  6  6  6  6  6  6  6

而且设置看起来是正确的。我将非常感谢有关解决此问题的提示。

最好的问候玛德琳

以下是我的数据集的一个子集,格式可重现:

library(tidyverse)
library(rstatix)
library(tibble)

richness_subset = data.frame(
  id = c("KRH1", "KRH3", "KRH2", "RKH2", "RKH1", "RKH3"), 
  selection.group = c("KR", "KR", "KR", "RK", "RK", "RK"), 
  Day = c(2,2,4,2,4,4), 
  value = c(111, 110, 144,  92,  85,  69))

richness_subset$Day = factor(richness$Day)
richness_subset$selection.group = factor(richness$selection.group)
richness_subset$id = factor(richness$id)

richness_subset = tibble::as_tibble(richness_subset)

richness_subset %>%
  group_by(selection.group, Day) %>%
  shapiro_test(value)

# gives Error: Column `variable` is unknown
res.aov <- rstatix::anova_test(
  data = richness, dv = value, wid = id,
  within = c(selection.group, Day)
)

# gives Error in lm.fit(x, y, offset = offset, singular.ok = singular.ok, ...) : 
#  0 (non-NA) cases

【问题讨论】:

  • 请在reproducible format 中分享您的数据。查看print()str() 并不容易复制/粘贴数据来测试您的代码。
  • 错误:列变量未知 -> 变量名称输入错误可能会出现问题 您是否可能忘记将字母放在大写字母中?在 group_by(selection.group, Day) %>% 例如,我看到 Day 有一个大写字母 D
  • 查看shapiro_test 的源代码,我猜你有一组观察值都是 NA 或单行。查看您所做的测试,情况似乎并非如此。如果没有要测试的完整数据,就很难提供帮助。如果您不想分享它,您可以随时尝试使用richness$value &lt;- richness$value + rnorm(190) 之类的方式对其进行匿名化。
  • @Brian,我认为这不是问题所在。我假设同样的事情,并且有多个组,可能一个组太小而无法适应shapiro.test 的条件。但是在运行一个类似的示例并排除 3 以下的组之后,我遇到了同样的问题。错误代码似乎与dplyr 的关系比与shapiro_test 的关系更大。但我还没有查明错误。

标签: r statistics anova tibble


【解决方案1】:

我创建了类似于您的数据设计的东西:

set.seed(111)
richness = data.frame(id=rep(c("KRH1","KRH2","KRH3"),6),
selection.group=rep(c("KR","RK"),each=9),
Day=rep(c(2,4,6),each=3,times=2),value=rpois(18,100))

richness$Day = factor(richness$Day)
richness$id = factor(richness$id)

首先,shapiro_test,脚本中存在错误,您要测试的值不能命名为“值”:

# gives error Error: Column `variable` is unknown
richness %>% shapiro_test(value)

#works
richness %>% mutate(X = value) %>% shapiro_test(X)
# A tibble: 1 x 3
  variable statistic     p
  <chr>        <dbl> <dbl>
1 X            0.950 0.422
1 X            0.963 0.843

其次,对于 anova,这对我有用。

rstatix::anova_test(
  data = richness, dv = value, wid = id,
  within = c(selection.group, Day)
  )

在我的示例中,可以估计每个术语。我怀疑您的一个术语是另一个术语的线性组合。用我的例子,

set.seed(111)
richness =
data.frame(id=rep(c("KRH1","KRH2","KRH3","KRH4","KRH5","KRH6"),3),
selection.group=rep(c("KR","RK"),each=9),
Day=rep(c(2,4,6),each=3,times=2),value=rpois(18,100))

richness$Day = factor(richness$Day)
richness$id = factor(richness$id)

rstatix::anova_test(
  data = richness, dv = value, wid = id,
  within = c(selection.group, Day)
  )

Error in lm.fit(x, y, offset = offset, singular.ok = singular.ok, ...) : 
  0 (non-NA) cases

给出完全相同的错误。可以使用以下方法进行检查:

lm(value~id+Day:selection.group,data=richness)


   Call:
lm(formula = value ~ id + Day:selection.group, data = richness)

Coefficients:
           (Intercept)                     id1                     id2  
               101.667                  -3.000                  -6.000  
                   id3                     id4                     id5  
                -6.000                   1.889                  11.556  
Day2:selection.groupKR  Day4:selection.groupKR  Day6:selection.groupKR  
                 1.667                 -12.000                   9.333  
Day2:selection.groupRK  Day4:selection.groupRK  Day6:selection.groupRK  
                -1.667                      NA                      NA 

Day4:selection.groupRK 和 Day6:selection.groupRK 是不可估计的,因为它们被之前的因素的线性组合所覆盖。

【讨论】:

  • 我在shapiro_test 函数定义中查看了硬编码的variablevalue,并知道这是罪魁祸首,但无法弄清楚重命名变量是解决方案!
  • 将列名“值”更改为其他名称实际上有帮助!非常感谢!
  • 酷!很高兴它有帮助:)
  • 您能否解释一下为什么因素的线性组合会阻止 ANOVA 运行?
  • 我听从了您的建议,并尝试简单地删除 lm 系数中具有 NA 的时间点数据。但是,当我重新运行 ANOVA 时,新的最后一个时间点现在变为 NA。我再次删除,第二个最后一个时间点变成了 NA。这是正常的吗?如何解决这个问题?
【解决方案2】:

上面提出的运行 Shapiro_test 的解决方案奏效了。

我通过运行lm(value~id+Day:selection.group,data=richness) 发现我有一些线性组合。但是,我不明白为什么?我知道我有每个组的数据点(见图表)。这种线性组合从何而来?

重复测量方差分析对我来说似乎非常合适,因为我会随着时间的推移跟踪采样单位。

【讨论】:

    【解决方案3】:

    我有同样的问题。找不到解决办法。最后进行以下工作: 安装“ez”包

    newModel

    示例:bushModel

    【讨论】:

      猜你喜欢
      • 2020-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-07
      相关资源
      最近更新 更多