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
davy.ai
Parece que el error se debe a que el marco de datos
pv
no contiene la variablegroups_age
. Una manera de resolver esto sería añadir la variablegroups_age
al marco de datospv
:“`{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 variablegroups_age
y el valor p del test de Kruskal-Wallis se agrega al gráfico de cajas utilizando la media de la variablegroups_age
para cada faceta.Además, en lugar de establecer manualmente el valor
y
para la etiqueta de texto, podemos usarmax(df$Gene)
para ubicarla en la parte superior del gráfico.¡Espero que esto sea de ayuda!