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.

¿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")
Tags:  , ,

Answer

  1. Avatar for 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.

Comments are closed.