【发布时间】: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 <- richness$value + rnorm(190)之类的方式对其进行匿名化。 -
@Brian,我认为这不是问题所在。我假设同样的事情,并且有多个组,可能一个组太小而无法适应
shapiro.test的条件。但是在运行一个类似的示例并排除 3 以下的组之后,我遇到了同样的问题。错误代码似乎与dplyr的关系比与shapiro_test的关系更大。但我还没有查明错误。
标签: r statistics anova tibble