#r #statistics #anova #factors
Вопрос:
Вот краткий контекст:
Были проведены эксперименты (Эксперимент A
и Эксперимент B
). Каждый эксперимент был разделен на категории ( Low
и High
). Каждая из категорий оценивалась с использованием 3 образцов (Образец 1
, Образец 2
и Образец 3
). value
Каждую пробу анализировали 3 раза. С помощью этой информации была получена следующая база данных
Experiment <- c(rep("A", 18), rep("B", 18))
Level <- rep((c(rep("Low", 9), rep("High", 9))), 2)
Sample_ID <- rep((c(rep(1,3), rep(2,3), rep(3,3))), 4)
Values <- rnorm(36)
DF <- data.frame(Experiment, Level, Sample_ID, Values)
DF$Experiment <- factor(DF$Experiment,
levels = c("A", "B"))
DF$Level <- factor(DF$Level,
levels = c("Low", "High"))
DF$Sample_ID <- factor(DF$Sample_ID,
levels = c(1, 2, 3))
Я начал с проверки нормальности каждого образца, классифицируя анализ по Experiment
Level
и Sample_ID
. Я использовал RVAideMemoire
пакет, который позволяет выполнять тест Шапиро-Уилка таким образом, с помощью функции byf.shapiro()
library(RVAideMemoire)
byf.shapiro(Values ~ Experiment*Level*Sample_ID, data = DF)
Shapiro-Wilk normality tests
data: Values by Experiment:Level:Sample_ID
W p-value
A:Low:1 0.9143 0.43251
B:Low:1 0.9880 0.79001
A:High:1 0.7771 0.06098 .
B:High:1 0.9959 0.87703
A:Low:2 0.9905 0.81312
B:Low:2 0.9573 0.60234
A:High:2 0.8126 0.14497
B:High:2 0.9980 0.91461
A:Low:3 0.9698 0.66665
B:Low:3 0.9893 0.80236
A:High:3 0.7659 0.03534 *
B:High:3 0.9906 0.81418
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Я попытался выполнить 1-полосный тест ANOVA между образцами 1
, 2
, и 3
для каждого Level
и для каждого Experiment
, используя следующую функцию:
ANOVA <- aov(Values ~ Experiment*Level*Sample_ID, data = DF)
summary(ANOVA)
Результат этой функции, я думаю, показывает результат 3-стороннего теста ANOVA вместо 1-стороннего теста ANOVA между тремя образцами каждого Level
и также разделенными Experiment
.
Кто-нибудь знает, как я могу выполнить 1-полосный тест ANOVA между уровнями и экспериментами? Или кто-нибудь знает какие-либо пакеты, которые делают эту дифференциацию?
Просто чтобы графически прояснить мой вопрос, вот таблица, в которой я показываю группировку значений для выполнения 1-стороннего теста ANOVA
Ответ №1:
С помощью rstatix
пакета можно создавать функции каналов, указывающие, где следует выполнять статистический анализ:
library(rstatix)
Experiment <- c(rep("A", 18), rep("B", 18))
Level <- rep((c(rep("Low", 9), rep("High", 9))), 2)
Sample_ID <- rep((c(rep(1,3), rep(2,3), rep(3,3))), 4)
Values <- rnorm(36)
DF <- data.frame(Experiment, Level, Sample_ID, Values)
DF$Experiment <- factor(DF$Experiment,
levels = c("A", "B"))
DF$Level <- factor(DF$Level,
levels = c("Low", "High"))
DF$Sample_ID <- factor(DF$Sample_ID,
levels = c(1, 2, 3))
# Shapiro-Wilk test
my.shapiro <- DF %>%
group_by(Level, Experiment, Sample_ID) %>%
shapiro_test(Values) %>%
add_significance()
my.shapiro
# ANOVA
ANOVA <- DF %>%
group_by(Level, Experiment) %>%
anova_test(Values ~ Sample_ID) %>%
add_significance()
ANOVA