22 votos

¿Cómo solucionar el problema de este cómic de XKCD?

Slope Hypothesis Testing Prueba de la hipótesis de la pendiente (Randall Munroe, xkcd )


El problema de este cómic es, obviamente, que las "mediciones" no son independientes, lo que viola un supuesto clave para calcular valores p válidos. Pero también veo un posible problema en el hecho de que la variable dependiente "nota" sea constante para cada alumno.

¿Cuál es la forma correcta de analizar estos datos?

He extraído los datos y he probado un modelo de efectos aleatorios, pero no estaba claro cómo especificar la estructura del modelo. Hasta ahora he obtenido los mejores resultados utilizando el método lm.cluster de la función miceadds y especificando cada estudiante como su propio clúster. Aun así, obtengo un valor p de 0,12, que dista mucho del valor p original de 0,586.

graph depicting grade/loudness points from the comic

Ejemplo reproducible:

pane3 <-
structure(list(loudness = c(86.23265220830784, 86.525433974655584, 
86.70530770034479, 86.885181426033995, 88.689627893786295, 88.892405630102843, 
89.049912682657435, 89.207285400838856, 92.147394659462378, 92.417541083929137, 
92.575182470856902, 92.709919847157337), grade = c(75.96108780990194, 
76.148932041733218, 76.064749167873202, 75.980566294013173, 93.944878128871437, 
94.130035673239107, 94.134737376300436, 94.049882830574518, 89.122721912921492, 
89.220338224099606, 89.314596175948196, 89.139513709569087), 
    student = c("A", "A", "A", "A", "B", "B", "B", "B", "C", 
    "C", "C", "C")), row.names = c(NA, -12L), class = c("spec_tbl_df", 
"tbl_df", "tbl", "data.frame"), spec = structure(list(cols = list(
    loudness = structure(list(), class = c("collector_double", 
    "collector")), grade = structure(list(), class = c("collector_double", 
    "collector"))), default = structure(list(), class = c("collector_guess", 
"collector")), delim = ","), class = "col_spec"))

ggplot(pane3, aes(x = loudness, y = grade)) +
  geom_point() +
  geom_smooth(method = "lm")

summary(lm(grade ~ loudness, pane3))

library(lme4)
summary(lmer(grade ~ loudness + (1 | student), pane3))

library(miceadds)
summary(lm.cluster(data = pane3, formula = grade ~ loudness, cluster = "student"))

8voto

Lewian Puntos 296

"¿Cuál es la forma correcta de analizar estos datos?".

Ya se han dado buenas respuestas sugiriendo análisis. Me gustaría añadir que no existe un único análisis "correcto" de los datos. Por ejemplo, ¿tiene sentido suponer linealidad dado que la escala de calificaciones es limitada? Obviamente un modelo lineal será erróneo, pero entonces "todos los modelos son erróneos pero algunos son útiles" - éste puede o no ser útil, y un tamaño de muestra efectivo de tres (más allá del cual no se repiten observaciones para los tres estudiantes) seguro que no es suficiente para evaluar lo bueno o perjudicial que es realmente el supuesto de linealidad. Se podría hacer algo como una transformación logit de las calificaciones (porcentuales) del examen, y basándose en el hecho de que esto al menos produce el rango de valores correcto (a menos que la gente puntúe 0 o 100, pero esto es fácil de reparar, si no de una manera exclusivamente correcta) podría decirse que esto debería ser preferible, pero una vez más los datos no permiten evaluar esto en detalle. Además, si estamos hablando de alumnos de la misma clase, puede haber dependencia incluso entre los alumnos, para lo cual no hay forma de evaluarlo sólo a partir de los datos - y recoger más alumnos de la misma clase tampoco ayudará con eso.

Así que la línea de base es que cualquier análisis requerirá decisiones subjetivas a favor o en contra de las que puede haber argumentos, de una forma u otra teniendo en cuenta conocimientos previos que pueden ir más allá de lo que realmente sabemos (como las distribuciones de notas de cursos anteriores), pero no hay una forma formal "objetiva" de decidir entre ellas (aparte de señalar fallos obvios en ciertos análisis como la ignorancia de la dependencia en la viñeta), y por tanto no hay una única "forma correcta" de analizar estos datos (o cualquier otro).

6voto

user164061 Puntos 281

Su pregunta se compone de varias preguntas/cuestiones. Puedo responder a la primera, la segunda sigue sin quedarme clara.

summary(lmer(grado ~ sonoridad + (1 | alumno), pane3))

Lo que ocurre aquí es que el modelo de efectos mixtos está ajustando tres líneas que tienen diferentes interceptos (aleatorios), en lugar de una única línea. El resultado para los efectos fijos es el siguiente

Fixed effects:
            Estimate Std. Error t value
(Intercept)   76.521     11.866   6.449
loudness       0.111      0.119   0.933

la pendiente de $\beta = 0.111$ en lugar de $\beta = 1.94$ es más un efecto dentro de los sujetos que entre sujetos. Podría ser posible que el efecto del volumen tuviera un efecto dentro de los sujetos y, midiendo a los sujetos muchas veces, se podría observar un efecto significativo.


summary(lm.cluster(data = pane3, formula = grade ~ loudness, cluster = "student"))

para continuar, no está tan claro lo que hace este método, pero dar un valor p de 0,12 es realmente extraño


Además, tiene una tercera pregunta

¿Cómo solucionar el problema de este cómic de XKCD?

Esto se arregla tomando muestras de más gente.

Alternativamente, puede tomar muestras de las mismas personas varias veces*. Este debe reducir el ruido en el caso de que no sólo haya un error de persona a persona, sino también dentro de las personas. Si se toman muestras de la misma persona varias veces, se obtiene información más precisa sobre el rendimiento medio de esa persona y se reduce la influencia del ruido debido a que la misma persona puede tener resultados de examen diferentes.

En el primer panel de la imagen XKCD, los resultados fueron muy variables. En el tercer panel seguía igual.

El cómic XKCD, escenifica la situación en la que la nota del examen es no muy variable dentro de una misma persona. (O incluso es la misma porque parece que sólo han repetido las mediciones de sonoridad y las variaciones en la nota del examen se deben a su raspado de datos).

Es decir no necesariamente el caso cuando se realiza algún remuestreo. Consideremos lo siguiente

example of different case

Por supuesto, aún podría dudarse de si la inferencia con sólo tres puntos de datos es una buena idea. Y posiblemente habría que utilizar un modelo que tuviera en cuenta el error en la variable x (como la regresión de Deming). Pero la cuestión es que las repeticiones dentro de los sujetos pueden mejorar la precisión de las estimaciones.


*De hecho, esta forma podría ser incluso mejor, ya que permite observar el error dentro del sujeto y evaluar la bondad del ajuste. Esta es la razón por la que a los científicos de campos cuantitativos les gusta realizar mediciones por duplicado o triplicado.

4voto

roberto Puntos 1

Esto se puede hacer con los paquetes nlme o lme4 fácilmente, todo lo que tiene que añadir es un efecto aleatorio para los estudiantes (y la pendiente).

> library(nlme)
> summary(lme(grade~loudness,random=~1|student/loudness,data=pane3))
    ...
Random effects:
 Formula: ~1 | student
        (Intercept)
StdDev:    9.131586

 Formula: ~1 | loudness %in% student
        (Intercept)   Residual
StdDev:  0.04725001 0.07510526

Fixed effects: grade ~ loudness 
               Value Std.Error DF  t-value p-value
(Intercept) 76.52081 11.866096  8 6.448693  0.0002
loudness     0.11097  0.118994  8 0.932552  0.3783
    ...

sonoridad no significativa.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X