es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Error al agregar el valor de p de Kruskal Wallis en los gráficos de cajas con facet_grid en R.

Estoy tratando de agregar el valor p de Kruskal Wallis a mis diagramas de caja y aunque he visto muchos mensajes con la solución, no puedo hacer que funcione.

Estos son mis datos y el código para ejecutar los diagramas de caja:

biblioteca(ggplot2)
biblioteca(dplyr)
set.seed(1234)
Gene <- floor(runif(25, min=0, max=101))
Age <- floor(runif(25, min=18, max=75))
Group <- c(“Group1”, “Group1”, “Group3”, “Group2”, “Group1”, “Group3”, “Group2”, “Group2”, “Group2”, “Group1”, “Group1”, “Group3”, “Group1”, “Group2”, “Group1”, “Group2”, “Group3”, “Group1”, “Group3”, “Group3”, “Group2”, “Group1”, “Group3”, “Group3″,”Group2”)

df <- data.frame(Gene, Age, Group)

mybreaks <- seq(min(df$Age)-1, to=max(df$Age)+10, by=10)
df$groups_age <- cut(df$Age, breaks = mybreaks, by=10)

bp <- ggplot(df, aes(x=groups_age, y=Gene, group=groups_age)) +
geom_boxplot(aes(fill=groups_age)) +
facet_grid(. ~ Group)

bp

En este post (https://stackoverflow.com/questions/46536090/r-ggplot2-kruskal-wallis-test-per-facet), veo una forma de hacerlo, pero cuando trato de hacer lo mismo, obtengo este error “Error in FUN(X[[i]], …) : object ‘groups_age’ not found” y el gráfico no se muestra.

El código:

pv <- df %>%
group_by(Group) %>%
summarize(Kruskal_pvalue = kruskal.test(Gene ~ groups_age)$p.value)

bp <- ggplot(df, aes(x=groups_age, y=Gene, group=groups_age)) +
geom_boxplot(aes(fill=groups_age)) +
facet_grid(. ~ Group) +
geom_text(data=pv, aes(x=2, y=75, label=paste0(“Kruskal-Wallis\n p=”,Kruskal_pvalue)))
bp

Tenga en cuenta que puse x e y manualmente, solo para colocar el valor. Sin embargo, me gustaría hacerlo de forma más automática, dependiendo del valor del gen si cambia.

¿Alguien sabe por qué estoy obteniendo ese error y por qué no funciona?

Muchas gracias de antemano

Saludos

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Parece que el error se debe a que el marco de datos pv no contiene la variable groups_age. Una manera de resolver esto sería añadir la variable groups_age al marco de datos pv:

    “`{r}
    pv <- df %>%
    group_by(Group) %>%
    summarize(Kruskal_pvalue = kruskal.test(Gene ~ groups_age)$p.value,
    groups_age = unique(groups_age))

    bp <- ggplot(df, aes(x=groups_age, y=Gene, group=groups_age)) +
    geom_boxplot(aes(fill=groups_age)) +
    facet_grid(. ~ Group) +
    geom_text(data=pv, aes(x=mean(as.numeric(groups_age)), y=max(df$Gene)+10,
    label=paste0(“Kruskal-Wallis p=”, Kruskal_pvalue)))

    bp
    “`

    De esta manera, el marco de datos pv tiene la variable groups_age y el valor p del test de Kruskal-Wallis se agrega al gráfico de cajas utilizando la media de la variable groups_age para cada faceta.

    Además, en lugar de establecer manualmente el valor y para la etiqueta de texto, podemos usar max(df$Gene) para ubicarla en la parte superior del gráfico.

    ¡Espero que esto sea de ayuda!

Comments are closed.