Не получаете той значимости, которая очевидна из моего графика (и с помощью Призмы) с тестом Краскала-Уоллиса, тестом Данна?

Кто-то нарисовал для меня эти данные в призме, используя 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))

Сначала вы загружаете CSV в DTdata, а затем работаете с data?????

IRTFM 01.07.2024 23:38

Я обновил DTData до data. Но моя проблема все еще остается. Я также добавил фигуру призмы. "Каких ценностей ты ожидаешь?" Я ожидал значительных значений для 0–100, 0–400 в каждом аспекте. Я думаю, это как-то связано с нулями в моих данных, но я не уверен.

RayzedByRobots 02.07.2024 14:14

Что означают звездочки в ожидаемых результатах? Знаете ли вы значения значимостей, рассчитанные Prism?

Dominic van Essen 02.07.2024 15:03

Я добавил значения значимости в призму выше — спасибо.

RayzedByRobots 02.07.2024 15:22

Я думаю, что ваша проблема, по крайней мере частично, связана со значениями, которые кто-то рассчитал в Prism. Тест KW является непараметрическим, что означает, что учитываются только ранги данных, а не сами значения (поэтому тот факт, что ваши полосы ошибок малы, не имеет значения; вам нужно будет использовать t-критерий или что-то подобное, чтобы получить это учитывать). Таким образом, значения 0 против 100 и 0 против 400 должны быть одинаковыми в каждом случае. Это не то, что показано, что позволяет предположить, что тест KW не использовался (или использовался неправильно...).

Dominic van Essen 02.07.2024 15:31

Я думаю, что kruskal.test() принимает x, g (значения и индикатор группы), а не x, y (значения в двух группах). Вам нужно будет завернуть kruskal.test. Сейчас нет времени показать, как это сделать...

Ben Bolker 02.07.2024 15:34

Вы можете рассчитать правильные значения «вручную», поместив значения в каждой группе в список. Итак, для третьего графика: 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.

Dominic van Essen 02.07.2024 15:36
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
7
82
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это не отвечает ни на один вопрос об исправлениях множественных сравнений, но написание 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-6210247‌​36 Также в kruskal.test(CFUs ~ Treatment)$p.value); Все заработало, когда я заменил ~ на запятую.

RayzedByRobots 10.07.2024 20:28

Я думаю, что kruskal.test(CFUs, Treatment), возможно, делает не то, что ты хочешь/то, что ты думаешь... !

Ben Bolker 10.07.2024 22:54

Да, ты прав. Я получаю сообщение об ошибке при использовании вашей пользовательской функции KW. Можете ли вы взглянуть выше? Я ввел обновленный код и получаю сообщение об ошибке. Извините за новизну.

RayzedByRobots 11.07.2024 14:30

Другие вопросы по теме