Кто-то нарисовал для меня эти данные в призме, используя KW и Данна, и я хотел сделать это в R, но я получаю совершенно разные результаты R. Например, в призме существуют значительные различия между контролем и лечением по всем трем аспектам. Также я получаю сообщение об ошибке:
Предупреждающие сообщения:
1: Ошибка вычислений в stat_signif ()
.
Вызвано ошибкой в kruskal.test.default()
:
! все наблюдения находятся в одной группе
2: Ошибка вычислений в stat_signif ()
.
Вызвано ошибкой в kruskal.test.default()
:
! все наблюдения находятся в одной группе
library(tidyverse)
library(ggpubr)
library(FSA)
library(rcompanion)
DTData <- read.csv("C:/Users/Coral HD/R/Amox/LiquidInhibition/LiquidInhib_ZeroAmox.csv")
data$Day <- as.factor(data$Day)
data$Treatment <- as.factor(data$Treatment)
# Create a faceted bar plot
p <- ggplot(data, aes(x=Treatment, y=CFUs, fill=Treatment)) +
geom_bar(stat = "summary", fun=mean) +
facet_wrap(~ Day, scales = "fixed") +
labs(title = "CFUs by Treatment across Different Days", y = "Mean CFUs", x = "Treatment") +
theme_bw()
print(p)
# Perform Kruskal-Wallis Test by Day
kw_results <- data %>%
group_by(Day) %>%
summarise(Kruskal_Wallis = kruskal.test(CFUs ~ Treatment)$p.value)
# Print Kruskal-Wallis results
print(kw_results)
# Perform Dunn's Test for multiple comparisons
dunn_results <- list()
for (day in unique(data$Day)) {
subset_data <- data[data$Day == day,]
dunn_test <- dunnTest(CFUs ~ Treatment, data = subset_data, method = "bonferroni")
dunn_results[[as.character(day)]] <- dunn_test
}
# Print Dunn's Test results
print(dunn_results)
# Adding significance brackets
# Please note: Adjusting manually as per p-values might be necessary
p + stat_compare_means(label = "p.signif", method = "kruskal.test",
comparisons = list(c("0", "100"), c("0", "400"), c("100", "400")),
label.y = c(300, 400, 500))
structure(list(Day = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L,
3L, 3L, 3L, 3L), levels = c("1", "14", "28"), class = "factor"),
Treatment = structure(c(1L, 1L, 1L, 2L, 2L, 2L, 3L, 3L, 3L,
1L, 1L, 1L, 2L, 2L, 2L, 3L, 3L, 3L, 1L, 1L, 1L, 2L, 2L, 2L,
3L, 3L, 3L), levels = c("0", "100", "400"), class = "factor"),
CFUs = c(138L, 148L, 141L, 0L, 0L, 0L, 0L, 0L, 0L, 348L,
290L, 321L, 0L, 0L, 0L, 0L, 0L, 0L, 250L, 215L, 218L, 28L,
45L, 34L, 35L, 41L, 28L)), row.names = c(NA, -27L), class = "data.frame")
Обновлен код для исправления DTData. Перейдите к данным. Но мой вопрос все еще остается. Ожидая получить
library(tidyverse)
library(ggpubr)
library(FSA)
library(rcompanion)
data <- read.csv("C:/Users/Coral HD/R/Amox/LiquidInhibition/LiquidInhib_ZeroAmox.csv")
data$Day <- as.factor(data$Day)
data$Treatment <- as.factor(data$Treatment)
# Create a faceted bar plot
p <- ggplot(data, aes(x=Treatment, y=CFUs, fill=Treatment)) +
geom_bar(stat = "summary", fun=mean) +
facet_wrap(~ Day, scales = "fixed") +
labs(title = "CFUs by Treatment across Different Days", y = "Mean CFUs", x = "Treatment") +
theme_bw()
print(p)
# Perform Kruskal-Wallis Test by Day
kw_results <- data %>%
group_by(Day) %>%
summarise(Kruskal_Wallis = kruskal.test(CFUs ~ Treatment)$p.value)
# Print Kruskal-Wallis results
print(kw_results)
# Perform Dunn's Test for multiple comparisons
dunn_results <- list()
for (day in unique(data$Day)) {
subset_data <- data[data$Day == day,]
dunn_test <- dunnTest(CFUs ~ Treatment, data = subset_data, method = "bonferroni")
dunn_results[[as.character(day)]] <- dunn_test
}
# Print Dunn's Test results
print(dunn_results)
# Adding significance brackets
# Please note: Adjusting manually as per p-values might be necessary
p + stat_compare_means(label = "p.signif", method = "kruskal.test",
comparisons = list(c("0", "100"), c("0", "400"), c("100", "400")),
label.y = c(300, 400, 500)) # Adjust these y values as needed based on your plot scale
Получение ошибки
Вот обновленный код, использующий пользовательскую функцию Крускала-Уоллиса:
Я получаю эту ошибку:
Ошибка в summarise()
:
ℹ В споре: Kruskal_Wallis = kruskal.test(CFUs ~ Treatment)$p.value
.
ℹ В 1 группе: Day = 1
.
Вызвано ошибкой в kruskal.test()
:
! аргумент «y» отсутствует, без значения по умолчанию
Запустите rlang::last_trace()
, чтобы увидеть, где произошла ошибка.
library(tidyverse)
library(ggpubr)
library(FSA)
library(rcompanion)
data <- read.csv("C:/Users/Coral HD/R/Amox/LiquidInhibition/LiquidInhib_FortyAmox.csv")
View(data)
data$Day <- as.factor(data$Day)
data$Treatment <- as.factor(data$Treatment)
# Create a faceted bar plot
p <- ggplot(data, aes(x=Treatment, y=CFUs, fill=Treatment)) +
geom_bar(stat = "summary", fun=mean, show.legend = FALSE, color = "black", width = 0.65) +
facet_wrap(~ Day, scales = "fixed") +
ylim(0,550) +
labs(title = "", y = "Mean CFUs", x = "Treatment") +
theme_bw() + scale_fill_brewer(palette = "Greys") +
theme(axis.text = element_text(size = 11), axis.title = element_text(size = 14),
strip.text = element_text(size = 15))
print(p)
#Custom KW
kruskal.test <- function(x, y, paired = FALSE) {
stats:::kruskal.test.default(x = c(x,y), g = rep(1:2, c(length(x), length(y))))
}
# Perform Kruskal-Wallis Test by Day
kw_results <- data %>%
group_by(Day) %>%
summarise(Kruskal_Wallis = kruskal.test(CFUs ~ Treatment)$p.value)
# Print Kruskal-Wallis results
print(kw_results)
# Perform Dunn's Test for multiple comparisons
dunn_results <- list()
for (day in unique(data$Day)) {
subset_data <- data[data$Day == day,]
dunn_test <- dunnTest(CFUs ~ Treatment, data = subset_data, method = "bonferroni")
dunn_results[[as.character(day)]] <- dunn_test
}
# Print Dunn's Test results
print(dunn_results)
# Adding significance brackets
# Please note: Adjusting manually as per p-values might be necessary
p + stat_compare_means(label = "p.signif", method = "kruskal.test",
comparisons = list(c("0", "100"), c("0", "400"), c("100", "400")),
label.y = c(350, 400, 475))
Я обновил DTData до data. Но моя проблема все еще остается. Я также добавил фигуру призмы. "Каких ценностей ты ожидаешь?" Я ожидал значительных значений для 0–100, 0–400 в каждом аспекте. Я думаю, это как-то связано с нулями в моих данных, но я не уверен.
Что означают звездочки в ожидаемых результатах? Знаете ли вы значения значимостей, рассчитанные Prism?
Я добавил значения значимости в призму выше — спасибо.
Я думаю, что ваша проблема, по крайней мере частично, связана со значениями, которые кто-то рассчитал в Prism. Тест KW является непараметрическим, что означает, что учитываются только ранги данных, а не сами значения (поэтому тот факт, что ваши полосы ошибок малы, не имеет значения; вам нужно будет использовать t-критерий или что-то подобное, чтобы получить это учитывать). Таким образом, значения 0 против 100 и 0 против 400 должны быть одинаковыми в каждом случае. Это не то, что показано, что позволяет предположить, что тест KW не использовался (или использовался неправильно...).
Я думаю, что kruskal.test()
принимает x, g
(значения и индикатор группы), а не x, y
(значения в двух группах). Вам нужно будет завернуть kruskal.test
. Сейчас нет времени показать, как это сделать...
Вы можете рассчитать правильные значения «вручную», поместив значения в каждой группе в список. Итак, для третьего графика: kruskal.test(list(x[19:21,"CFUs"],x[22:24,"CFUs"]))$p.value
и kruskal.test(list(x[19:21,"CFUs"],x[25:27,"CFUs"]))$p.value
. Оба дают одинаковое значение p, 0.04953461
.
Это не отвечает ни на один вопрос об исправлениях множественных сравнений, но написание kruskal.test()
, которое принимает x
и y
вместо x
и g
и передает его в базу-R kruskal.test
, похоже, делает то, что вы хотите...
kruskal.test <- function(x, y, paired = FALSE) {
stats:::kruskal.test.default(x = c(x,y), g = rep(1:2, c(length(x), length(y))))
}
p + stat_compare_means(label = "p.signif", method = "kruskal.test",
comparisons = list(c("0", "100"), c("0", "400"), c("100", "400")))
(из комментариев: «незначительный» отображается как NS. для значений p, точно равных 1, в противном случае ns)
Спасибо за помощь. Пара вещей. Я обнаружил, что "Я тоже столкнулся с этой проблемой. Строка NS. отображается для p-значений, равных 1, строка ns - во всех остальных (незначимых) случаях. При этом последняя скрыта, когда скрыть.ns = TRUE, первого нет». Кредит github.com/kassambara/ggpubr/issues/171#issuecomment-621024736 Также в kruskal.test(CFUs ~ Treatment)$p.value); Все заработало, когда я заменил ~ на запятую.
Я думаю, что kruskal.test(CFUs, Treatment)
, возможно, делает не то, что ты хочешь/то, что ты думаешь... !
Да, ты прав. Я получаю сообщение об ошибке при использовании вашей пользовательской функции KW. Можете ли вы взглянуть выше? Я ввел обновленный код и получаю сообщение об ошибке. Извините за новизну.
Сначала вы загружаете CSV в
DTdata
, а затем работаете сdata
?????