繁体   English   中英

无法运行双向重复测量方差分析; 0(非NA)案例

[英]Unable to run Two-way repeated measures ANOVA; 0 (non-NA) cases

我正在尝试按照 Datanovia 的教程进行双向重复测量 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未知”。 有谁知道为什么会这样?

我试图在没有保证我的数据是正态分布的情况下继续并尝试运行方差分析

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

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

我已经用返回 FALSE 的any(is.na(richness))检查了 NA 值。 我还检查了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

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

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

其次,对于方差分析,这对我有用。

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 的解决方案有效。

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

重复测量方差分析对我来说非常合适,因为我一直在跟踪抽样单位。

在此处输入图片说明

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

newModel<-ezANOVA(data = dataFrame, dv = .(结果变量), wid = .(识别参与者的变量), inside = .(重复测量预测变量), between = . (组间预测变量), detail = FALSE,类型 = 2)

示例:bushModel<-ezANOVA(data = longBush, dv = .(Retch), wid = .(Participant), inside = .(Animal), detail = TRUE, type = 3)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM