4 votos

N-1 Prueba de Chi-Cuadrado de Pearson en R

Tengo dos variables categóricas y estaba pensando en hacer una prueba de chi-cuadrado. Luego noté que tenía algunas frecuencias bajas en mi tabla de contingencia y pensé que la Prueba Exacta de Fisher podría ser útil. Ahora he vuelto al principio después de hacer algunas lecturas y quiero usar el Chi Cuadrado de Pearson con corrección n-1. ¿Hay alguna forma en R de ejecutar chisq.test con la corrección n-1 (discutida aquí: Dada la potencia de las computadoras en estos días, ¿hay alguna razón para hacer una prueba de chi-cuadrado en lugar de una prueba exacta de Fisher?)?

Si no, ¿cómo aplicaría la corrección a la salida del chi-cuadrado de Pearson?

Suponiendo un tamaño de muestra de 80:

(80-1)/80 = 0.9875

¿Simplemente multiplico la estadística de Chi-Cuadrado por 0.9875 y luego uso este valor para derivar el valor p?

2.9687 * 0.9875 = 2.931591

1-pchisq(2.931591,4)

p = 0.569338

1 votos

Mientras parece que tu entendimiento es correcto, dado que la función chisq.test ya incluye la capacidad de simular para obtener el valor de p (que funciona perfectamente incluso con valores esperados muy pequeños y puede ser tan preciso como desees, simplemente simulando más), ¿por qué harías esto?

1 votos

Simplemente porque he visto algunas fuentes que recomiendan usarlo (sin haberlo escuchado antes de hoy). Por ejemplo, el enlace en mi pregunta y el enlace proporcionado por Peter sugieren usar la corrección n-1 para cuando hay bajas frecuencias de celdas. Sin embargo, me interesaría el método de simulación. Si tienes algún enlace adecuado para obtener más información al respecto (además de la página de ayuda de R), te estaría agradecido.

0 votos

El documento de Campbell 2007 sobre el ajuste n-1, que se menciona en la respuesta a la que enlazaste, solo trata con tablas de contingencia 2x2. En el cálculo de ejemplo que proporcionaste tienes 4 grados de libertad (df), lo que significa que tienes una tabla más grande (como la mía). ¿Se puede hacer el ajuste n-1 independientemente del tamaño de la tabla? Yo pensaría que sí, porque la distribución chi-cuadrado se encarga de los grados de libertad, pero esto es solo una sensación. ¿Alguien puede comentar sobre esto? ¿O sería mejor comenzar una nueva pregunta?

4voto

Laís Minchillo Puntos 11

Siguiendo las discusiones anteriores, escribí una función de R implementando la política recomendada mencionada en el documento de Campbell (2007) que es:

  1. Donde todos los números esperados son al menos 1, analizar por la prueba chi-cuadrado 'N 1' (la prueba chi-cuadrado de K. Pearson pero con N reemplazado por N 1).
  2. De lo contrario, analizar por la prueba de Fisher-Irwin, con pruebas de dos lados llevadas a cabo según la regla de Irwin (tomando tablas de ambos extremos como igual de probables, o menos, que lo observado).
campbell2x2.test <- function(t) {
  min_exp_val <- min(colSums(t))*min(rowSums(t))/sum(t)

  if (min_exp_val < 1) {
    # en la denominación de Campbell: prueba de Fisher-Irwin según la regla de Irwin
    result <- fisher.test(t, alternative = "two.sided")
    result$method <- paste("Prueba 2x2 óptima según la recomendación de Campbell(2007)\n\n",
                       paste("Recuento mínimo de celdas esperadas: ", round(min_exp_val, 3), "\n\n", sep = ""),
                       paste("Realizando", result$method)
    )
    return(result)
  } else {
    # Prueba chi-cuadrado de 'N 1' de Pearson
    n1chisq.test <- function(t) {
      chisqtst <- chisq.test(t, correct = FALSE)
      N <- sum(chisqtst$observed)
  chisqtst$statistic = ((N-1)/N) * chisqtst$statistic
  chisqtst$p.value <- 1 - pchisq(chisqtst$statistic, chisqtst$parameter)
      chisqtst$method <- paste("'N-1'", chisqtst$method)
      return(chisqtst)
    }
    result <- n1chisq.test(t)
    result$method <- paste("Prueba 2x2 óptima según la recomendación de Campbell(2007)\n\n",
                       paste("Recuento mínimo de celdas esperadas: ", round(min_exp_val, 3), "\n\n", sep = ""),
                       paste("Realizando", result$method)
    )
    return(result)
  }
}

Ejemplo de uso:

campbell2x2.test(matrix(c(1, 5, 3, 2), nrow = 2))

1 votos

Este es un gran trabajo y merece algo de aprecio. Espero que no te importe que haga referencia a la función n1chisq.test, ver aquí, y aquí

0 votos

¡Oh, gracias! ¡Claro, haz buen uso de ello!

3voto

Zizzencs Puntos 1358

Según esta página, la corrección N-1 es muy simple; simplemente multiplicar $\chi^2$ por (N-1)/N. Luego podrías usar la función pchisq en R para obtener el valor p correcto (creo que el código exacto sería algo como

newchisq = ((N-1)/N) * oldchisq
newp <- 1 - pchisq(newchisq, df)

3 votos

¿Quisiste decir multiplicar por (N-1)/N en el código, para que coincida con tu texto?

0 votos

Peter, la página a la que haces referencia está equivocada y parece que eso te llevó a proponer dos respuestas contradictorias: una en el texto y otra en el código. No encuentro posible determinar cuál es correcta porque no logro entender a qué te refieres con el valor "antiguo" de chi-cuadrado. ¿Podrías arreglar esto?

0 votos

¿Qué está mal con la página referenciada por Peter? En mi opinión, es correcta. Las fórmulas dadas allí coinciden con, por ejemplo, Campbell (2007) [iancampbell.co.uk/twobytwo/background.htm, Sección "Versiones de la prueba de chi cuadrado"] y ahora todas las fórmulas en la respuesta de Peter son correctas.

1voto

Marcell Puntos 16

Busing, Weaver and Dubois (2015) (http://onlinelibrary.wiley.com/doi/10.1002/sim.6808/full) dan buenos consejos sobre cómo implementar la prueba de chi-cuadrado N-1 en diferentes paquetes de software.

Una posibilidad es utilizar la estadística de chi-cuadrado de Mantel-Haenszel no corregida, que es equivalente a utilizar chi-cuadrado N-1 cuando se está analizando una sola tabla 2x2.

En R, el chi-cuadrado de Mantel-Haenszel no corregido se puede obtener de la siguiente manera:

estrato <- rep(1, N)
mantelhaen.test(variable1, variable2, estrato, correct = FALSE)

Para que el código funcione como se espera, los elementos en el vector de estrato deben tener todos el mismo valor.

0 votos

¿Qué significa "el estrato tiene que ser constante"?

0 votos

No estoy seguro del idioma correcto aquí. La prueba de Mantel-Haenszel utiliza un vector de longitud N para identificar a qué estratos pertenecen los elementos correspondientes en var1 y var2. Para que el código funcione como se pretende, los elementos en este vector deben tener todos el mismo valor.

0 votos

Ahora editado para mayor claridad.

1voto

Zaur Puntos 131

Disculpas por llegar tan tarde a esta fiesta. De repente me encontré con esta discusión y vi que estaban discutiendo algunos de mis apuntes. Supongo que esta es la sección de las notas que estaba causando confusión para algunas personas:

Donde Campbell describe reemplazar N por N -1, se refiere a esta fórmula para el chi-cuadrado de Pearson:

        chi-cuadrado = N(ad-bc)^2 / (mnrs)

donde:

N es el número total de observaciones
a, b, c y d son los recuentos observados en las 4 celdas
^2 significa "al cuadrado"
m, n, r, s son los 4 totales marginales

Si uno tiene el chi-cuadrado de Pearson regular (por ejemplo, en la salida de un software estadístico), se puede convertir en el chi-cuadrado 'N - 1' de la siguiente manera:

           chi-cuadrado 'N -1' = chi-cuadrado de Pearson x (N -1) / N

Si quieres que N(ad-bc)^2 / (mnrs) se convierta en (N-1)(ad-bc)^2 / (mnrs), seguramente debes dividir toda la expresión por N y luego multiplicar por (N-1).

Espero que esto aclare las cosas.

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