¿Alguien puede explicar por qué crear un histograma con dos condiciones muestra una distribución incorrecta en R?
Quiero crear un histograma con datos de dos condiciones diferentes (A y B en el ejemplo a continuación). Quiero trazar ambas distribuciones en la misma gráfica utilizando geom_histogram
en R.
Sin embargo, parece que para la condición A, se muestra la distribución de todo el conjunto de datos (en lugar de solo A).
En el ejemplo a continuación, se muestran tres casos:
1) Trazar A y B
2) Trazar solo A
3) Trazar solo B
Verás que la distribución de A no es la misma cuando se compara 1) y 2).
¿Alguien puede explicar por qué ocurre esto y cómo solucionar este problema?
set.seed(5)
<h1>Crear marco de datos de prueba</h1>
test <- data.frame(
condition=factor(rep(c("A", "B"), each=200)),
value =c(rnorm(200, mean=12, sd=2.5), rnorm(200, mean=13, sd=2.1))
)
<h1>Crear conjuntos de datos separados</h1>
test<em>a <- test[test$condition == "A",]
test</em>b <- test[test$condition == "B",]
<h1>1) Trazar A y B</h1>
ggplot(test, aes(x=value, fill=condition)) +
geom_histogram(binwidth = 0.25, alpha=.5) +
ggtitle("Test A y AB")
<h1>2) Trazar solo A</h1>
ggplot(test<em>a, aes(x=value, fill=condition)) +
geom</em>histogram(binwidth = 0.25, alpha=.5) +
ggtitle("Test A")
<h1>3) Trazar solo B</h1>
ggplot(test<em>b, aes(x=value, fill=condition)) +
geom</em>histogram(binwidth = 0.25, alpha=.5) +
ggtitle("Test B")
davy.ai
El problema aquí es que el argumento binwidth se aplica a todo el conjunto de datos en el primer gráfico, que incluye las condiciones A y B. Esto significa que los intervalos pueden no ser lo suficientemente anchos como para mostrar con precisión la distribución de la condición A únicamente.
Para solucionar esto, podemos especificar el binwidth por separado para cada condición utilizando el argumento breaks. Aquí está el código revisado:
“`{r}
1) Graficar A y B con binwidths separados
ggplot(test, aes(x=value, fill=condition)) +
geom_histogram(data=test_a, binwidth = 0.25, breaks=seq(5, 20, 0.25), alpha=.5) +
geom_histogram(data=test_b, binwidth = 0.25, breaks=seq(5, 20, 0.25), alpha=.5) +
ggtitle(“Test A and B”)
2) Graficar solo A con binwidth
ggplot(test_a, aes(x=value, fill=condition)) +
geom_histogram(binwidth = 0.25, breaks=seq(5, 20, 0.25), alpha=.5) +
ggtitle(“Test A”)
3) Graficar solo B con binwidth
ggplot(test_b, aes(x=value, fill=condition)) +
geom_histogram(binwidth = 0.25, breaks=seq(5, 20, 0.25), alpha=.5) +
ggtitle(“Test B”)
“`
Al especificar el argumento breaks, podemos asegurarnos de que el binwidth sea consistente para cada condición y represente con precisión la distribución de cada subconjunto.