Chi-Cuadrado
El estadístico de chi-cuadrado, es útil cuando estamos trabajando con variables nominales, categóricas o estamos trabajando con alguna clase de clasificación Su fórmula estadística esta dada por:
Figura 1. Ecuación para obtener el chi-cuadrado
calculado
Donde: O= se refiere a las frecuencias observadas E= frecuencias esperadas
Requerimientos para trabajar con la distribución de chi-cuadrado:
1- La muestra debe ser tomadas al azar 2- Variables medidas deben ser independientes 3- Los datos deben ser reportados en frecuencias absolutas (no porcentajes) 4- Valores / categorías de variables deben ser mutuamente excluyentes 5- Frecuencias observadas no deben pequeñas
Pruebas de Bondad de Ajuste (pruebas de una vía)
Uno de los usos de la distribución de Chi-Cuadrada es para hacer pruebas de Bondad de Ajuste. O sea para probar si un conjunto de datos que sigue una distribución predeterminada.
Entonces este estadístico de chi resulta útil para trabajar datos, como frecuencias, o categóricos, y es muy común usarlo en biología, como por ejemplo: Biologos especialistas en aves, estudian los choques de aves en ventanas, para lo cual diseñan calcomanias para pegar a las ventanas con diferentes patrones, que luego será comparado con la cantidad de choques de aves: el primero son calcomanías con patrones de ramas, el segundo es cuadriculado, y el tercero calcomanias de otras aves: el total de aves que chocaron despúes de 6 meses de puestas las calcomanias. Los resultados según el orden descrito son: 27, 10 y 15. La pregunta de investigación sería si existe alguna diferencia significativa entre los diferentes patrones de calcomanías, en otras palabras, es lo observado igual a lo esperado o no?
Tipo de calcomanias
A nivel de Chi-Cuadrado las pruebas de bondad de ajustes se pueden describir con las siguientes hipótesis:
Ho=Observado es igual al esperado
H1=Existen diferencias entre O&E
####Primero puedo revisar el chi-cuadrado teórico o tabular o crítico de la prueba al 95% de confianza, y usando los grados de libertad, en este caso la prueba posee 3 categorías, por lo tanto los grados de libertad sería 2, y se expresa k-r, donde k es igual al numero de grupos para los que las frecuencias observadas y esperadas están disponibles, y r es el número de restricciones impuestas sobre las comparaciones dadas. En este caso hay 3 tipos categorías menos 1 restricción (3-1)
qchisq(.95,2)
## [1] 5.991465
Como ingreso los datos:
ventanas <- c(10,27,15)
Para el cálculo del valor esperado se obtiene de (10+27+15)/3=17.333. Pero tambien se puede obtener de la siguiente manera:
chisq.test(ventanas)$expected
## [1] 17.33333 17.33333 17.33333
La prueba de chi-cuadrada de una sóla vía se obtiene:
chisq.test(ventanas)
##
## Chi-squared test for given probabilities
##
## data: ventanas
## X-squared = 8.8077, df = 2, p-value = 0.01223
En este resultado se puede observar que el valor de chi-cuadrado calculado, supera el teórico, por lo que queda por fuera de la región de las hipotésis nulas, llegando a cncluir que sí existe una diferencia significativa entre los diferentes patrones de las ventanas, sin embargo la prueba no indica en cual, esto se debe observar en los datos, debido a que el patrón que presenta menos choques en aves es el cuadriculado.
Otro ejemplo pero sólo 1 grado de libertad: Es conocido que la temperatura de un nido de tortuga marina tiene una relación en la diferenciación sexual de los embriones, la temperatura óptima para tener una proporción igual entre machos y hembras es 28°C, por lo que se desea probar esta teória, y se resguarda el nido a esa temperatura óptima y se le da seguimiento hasta la eclosión, al final se obtiene 15 hembras y 19 machos en un nido. Como ven en los datos, no nos interesa cada dato como independiente, si no como su frecuencia de la clase o categoria dada, en este caso la clase es el sexo (hembras y machos).
El valor observado es 15 y 19. Para el cálculo del valor esperado se obtiene de (15+19)/2=17. Resumiéndose la informacion queda de la siguiente manera:
En R resulta muy fácil el cálculo de chi-cuadrado, tanto para su estadístico como valores esperados
frec<-c(15,19)
chisq.test(frec)
##
## Chi-squared test for given probabilities
##
## data: frec
## X-squared = 0.47059, df = 1, p-value = 0.4927
El valor calculado del chi-cuadrado es de 0.47
Los grados de libertad son calculados a partir de n-1 (número de categorías menos uno).
Si esta interesado en obtener el valor critico teórico o tabular de chi-cuadrado, al 95% con un grado de libertad se escribe:
qchisq(0.95,1)
## [1] 3.841459
Los valores esperados son calculados por:
chisq.test(frec)$expected
## [1] 17 17
Todo lo anteriormente descrito para pruebas de bonda de ajuste de un sólo grado de libertad tiene un problema y es que se deben hacer las correciones de Yates a la fórmula original, por ende, la fórmula debe ser modificada de la siguiente manera:
####Esa resta de 0.5 a la ecuación, que es la correción de yates, el
comando chisq.test() no lo hace, por lo que se debe proceder a realizar
la operación a mano, y calcular chi-cuadrado acá uno de los métodos que
se pueden usar:
((abs(15 - 17) - 0.5)^2/17) + ((abs(19 - 17) - 0.5)^2/17)
## [1] 0.2647059
Observese que el valor de chi-cuadrado cambia, de la forma calculada anteriormente con el comando chiq.test() y esto podría afectar la aceptación o rechazo de la hipótesis nula
Pruebas de más de una vía
En la distribución de chi-cuadrada se pueden realizar pruebas Independecia o Asociación, además de pruebas de homogenidad, estas pruebas son de más de una vía, por lo que sus resultados se presentan en tablas de contigencia, donde se indican los valores observados. Por lo que datos obtenidos se puede incluir en una matriz de datos. Por lo queen una tabla de contingencia, los datos están arreglados en filas y columnas, como veremos mas adelante.
La expresión de una matriz se realiza con el comando “matrix”
Estos se deben observar como los datos observados en una tabla de contingencia de 2 renglones y 4 columnas
matrix<-matrix(c(4,11,10,13,3,4,6,8),nrow=2)
matrix
## [,1] [,2] [,3] [,4]
## [1,] 4 10 3 6
## [2,] 11 13 4 8
Para realizar el test de chi cuadrado, se incluye al comando el nombre de la matriz con “chisq.test(x)”, de un vector “x” cualquiera.
chisq.test(matrix)
## Warning in chisq.test(matrix): Chi-squared approximation may be incorrect
##
## Pearson's Chi-squared test
##
## data: matrix
## X-squared = 1.2845, df = 3, p-value = 0.7328
Como se observa los resultados de la prueba, da no significativa (p=0.7328). Así mismo, observamos un “Warning”, esto es debido a que posiblemente los valores esperados sean menores a cinco, o la proporción supera al 20% de las celdas, con valores observados inferiores a cinco. Cuando esto sucede es recomendable utilizar un test de independencia denominado Fishers test.
Los grados de libertad para una matrix o tabla de contingencia en chi-cuadrado son calculados de m-1 x n-1 (columnas menos uno x filas menos uno).
FISHER TEST
Es una prueba de significación estadística, utilizadas en el análisis de tablas de contingencia cuando los tamaños de las muestras son pequeños (y frecuencias esperadas menores a 5).
fisher.test(matrix)
##
## Fisher's Exact Test for Count Data
##
## data: matrix
## p-value = 0.7229
## alternative hypothesis: two.sided
Podemos adicionalmente, aumentar el poder de la prueba, aumentando el número de réplicas o permutaciones.
Llame la ayuda de fisher.test, para ver los atributos del comando de la prueba.
El test de Fisher también es recomendado para tablas de contingencia de 2 x 2, donde los valores esperados son menores a cinco.
La prueba exacta de Fisher se basa en el modelo de la distribución hipergeométrica,para estimar la probabilidad de obtener las frecuencias observadas en la tabla. Y lo quen hace la diferencia de aplicar Fisher es que aplica una corrección por continuidad para tablas 2x2.
?fisher.test
## starting httpd help server ... done
Realicemos una prueba con los datos anteriormente incluidos
fisher.test(matrix,simulate.p.value=TRUE, B=2e3)
##
## Fisher's Exact Test for Count Data with simulated p-value (based on
## 2000 replicates)
##
## data: matrix
## p-value = 0.7206
## alternative hypothesis: two.sided
Si usted quiere tener el valor de chi-cuadrado, aún para muestras pequeñas (valores esperados menores a cinco), puede calcularlo de la siguiente manera:
chisq.test(matrix,simulate.p.value=T)
##
## Pearson's Chi-squared test with simulated p-value (based on 2000
## replicates)
##
## data: matrix
## X-squared = 1.2845, df = NA, p-value = 0.7291
Como estamos trabajando una matriz de datos, es posible calcular las proporciones que corresponden los datos, tanto para las columnas como para las filas.
prop.table(matrix) # Porcentaje de las celdas
## [,1] [,2] [,3] [,4]
## [1,] 0.06779661 0.1694915 0.05084746 0.1016949
## [2,] 0.18644068 0.2203390 0.06779661 0.1355932
Esta tabla resulta útil para darnos las frecuencias de los valores en términos de porcentaje, y nos resulta fácil a la hora de la interpretación de una variable. La variable [1,]- [,3], tiene un porcentaje de ocurrencia de 5.1%. La variable [2,]- [,4], tiene un porcentaje de ocurrencia del 13.6 %, y así sucesivamente.
Recuerde que para dar un resultado con cierto número de decimales puede utilizar la opcion de “options(digits=3)” para tres decimales.
redondear = options(digits=3)
Así mismo podemos visualizar si estamos interesados en la proporción de los datos respecto las filas.
prop.table(matrix, 1) # proporción de las filas
## [,1] [,2] [,3] [,4]
## [1,] 0.174 0.435 0.130 0.261
## [2,] 0.306 0.361 0.111 0.222
O de forma alternativa la proporción de los datos respecto a las columnas.
prop.table(matrix, 2) # proporción de las columnas
## [,1] [,2] [,3] [,4]
## [1,] 0.267 0.435 0.429 0.429
## [2,] 0.733 0.565 0.571 0.571
ATENCIÓN: Estos últimos dos cálculos solo resultan, cuando los datos están hechos bajo un matriz.
En ocasiones es posible que nuestros datos se encuentren dentro de una matriz compleja. Aprenderemos a como sintetizar o extraer solo parte de esa información
library(MASS) # Carga el paquete MASS
data(survey)
head(survey) # se refiere a la base de datos que estamos utilizando y que contiene los datos
## Sex Wr.Hnd NW.Hnd W.Hnd Fold Pulse Clap Exer Smoke Height M.I
## 1 Female 18.5 18.0 Right R on L 92 Left Some Never 173 Metric
## 2 Male 19.5 20.5 Left R on L 104 Left None Regul 178 Imperial
## 3 Male 18.0 13.3 Right L on R 87 Neither None Occas NA <NA>
## 4 Male 18.8 18.9 Right R on L NA Neither None Never 160 Metric
## 5 Male 20.0 20.0 Right Neither 35 Right Some Never 165 Metric
## 6 Female 18.0 17.7 Right L on R 64 Right Some Never 173 Imperial
## Age
## 1 18.2
## 2 17.6
## 3 16.9
## 4 20.3
## 5 23.7
## 6 21.0
names(survey)# visualiza títulos de las columnas de los datos
## [1] "Sex" "Wr.Hnd" "NW.Hnd" "W.Hnd" "Fold" "Pulse" "Clap" "Exer"
## [9] "Smoke" "Height" "M.I" "Age"
cuadro<- table(survey$Smoke, survey$Sex)
cuadro
##
## Female Male
## Heavy 5 6
## Never 99 89
## Occas 9 10
## Regul 5 12
Observe que la base que contiene los datos se llama survey, y para seleccionar una porción de los datos se utiliza el coomando de $.
EJERCICIOS
EJEMPLO 1
Ejemplo 1. Realice un cuadro que contenga la una matriz de fumadores (Smoke) vrs ejercicios (Exer).
cuadro2<-table(survey$Smoke, survey$Exer)
cuadro2
##
## Freq None Some
## Heavy 7 1 3
## Never 87 18 84
## Occas 12 3 4
## Regul 9 1 7
b. Obtenga el test de independencia. Explore las múltiples formas de desarrollarlo.
Opción a:
chisq.test(cuadro2)
## Warning in chisq.test(cuadro2): Chi-squared approximation may be incorrect
##
## Pearson's Chi-squared test
##
## data: cuadro2
## X-squared = 5, df = 6, p-value = 0.5
Opción b:
fisher.test(cuadro2,simulate.p.value=TRUE)
##
## Fisher's Exact Test for Count Data with simulated p-value (based on
## 2000 replicates)
##
## data: cuadro2
## p-value = 0.4
## alternative hypothesis: two.sided
Note que usted puede aumentar o disminuir el número de réplicas.
fisher.test(cuadro2,simulate.p.value=TRUE,B=5000)
##
## Fisher's Exact Test for Count Data with simulated p-value (based on
## 5000 replicates)
##
## data: cuadro2
## p-value = 0.4
## alternative hypothesis: two.sided
Opción c:
chisq.test(cuadro2,simulate.p.value=T, B=5000)
##
## Pearson's Chi-squared test with simulated p-value (based on 5000
## replicates)
##
## data: cuadro2
## X-squared = 5, df = NA, p-value = 0.5
Formas gráficas explorables para los test de independencia, tablas de contingencia o Chi-cuadrado.
PLOT DE MOSAICO
Un gráfico de mosaico despliega informacion para examinar la relaciÓn entre dos o más variables categÓricas.
mosaicplot(cuadro2, color=TRUE, main="Plot de mosaico")
c. obtenga el mosaico para los datos del vector “cuadro”.
mosaicplot(cuadro, color=TRUE, main="Plot de mosaico")
Analice bien los ejes de cada gráfico para una interpretación precisa.
Utilice el comando prop.table para ver la proporción de cada categoría y analice si tiene sentido la figura.
BAR PLOT
El barplot describe las frecuencias de todas las observaciones de las variables categoricas.
barplot(cuadro2, legend = rownames(cuadro2), beside=F, axis.lty = 1)
Otra forma de presentar es ajustándolo las categorías en orden separado, dependiendo de cuál es el interés en la forma de como presentar sus resultados.
barplot(cuadro2, legend = rownames(cuadro2), beside=T,axis.lty = 2)
EJEMPLO 2
Ejemplo 2. Utilice ahora la base de datos “Traffic” (efecto del límite de velocidad de suizos en accidentes automovilísticos).
Utilice las variables de años (year) y limites (limit), genere un vector que se llame “traficO”
Analice si existe una dependencia de los accidentes y la velocidad limite excedida por años (1961-1962). _____________________________________________________________________________________________________________________________________________________________________________________________________________________
Genere un plot de mosaico, utilizando la función shade=T (muestra los residuos estandarizados de sus valores. ______________________________________________________________________________________________________________________________________________
Calcule los residuos estandarizados (para ello lea el help de la prueba) ______________________________________________________________________________________________________________________________________________
EJEMPLO 3
Ejemplo 3. Supongamos que se quiere estudiar la posible asociación entre el hecho de que una gestante fume durante el embarazo y que el niño presente bajo peso al nacer. Por lo tanto, se trata de ver si la probabilidad de tener bajo peso es diferente en gestantes que fumen o en gestantes que no fumen durante la gestacion. Para responder a esta pregunta se realiza un estudio de seguimiento sobre una cohorte de 2000 gestantes, a las que se interroga sobre su habito durante la gestacion y se determina ademas el peso del recien nacido. Los resultados de este estudio se muestran a continuacion: tomado de: http://www.fisterra.com/mbe/investiga/chi/chi.asp.
Cuadro. 1. Tabla de contingencia para estudiar la asociación entre fumar durante la gestacion y el bajo peso del niño al nacer. Estudio de seguimiento de 2000 gestantes
Planteamiento de la hipotesis:
H0: No hay asociación entre las variables (en el ejemplo, el bajo peso del niño y el hecho de fumar durante la gestación son independientes o no están asociados).
H1: Si hay asociación entre las variables, es decir, el bajo peso y el fumar durante la gestación están asociados.
Solución:
Si<-c(43,105)
No<-c(207,1645)
cuadro3<-data.frame(Si,No)
rownames(cuadro3)<-c("Fumadores","No fumadores")
cuadro3
## Si No
## Fumadores 43 207
## No fumadores 105 1645
chisq.test(cuadro3)
##
## Pearson's Chi-squared test with Yates' continuity correction
##
## data: cuadro3
## X-squared = 38, df = 1, p-value = 6e-10
fisher.test(cuadro3)
##
## Fisher's Exact Test for Count Data
##
## data: cuadro3
## p-value = 2e-08
## alternative hypothesis: true odds ratio is not equal to 1
## 95 percent confidence interval:
## 2.16 4.83
## sample estimates:
## odds ratio
## 3.25
Observe que la forma de como NO aplicar la corrección de Yates es:
chisq.test(cuadro3,correct=F)
##
## Pearson's Chi-squared test
##
## data: cuadro3
## X-squared = 40, df = 1, p-value = 2e-10
Sin embargo esto es muy riesgoso, porque podriamos tener casos, que sin la corrección de Yates cometamos un error de tipo II (aceptar la H0, cuando es una decisión incorrecta).
Podemos obtener una tabla de frecuencias porcentuales de nuestros datos con el comando de “prop.table”
prop.table(cuadro3) # Porcentaje de las celdas
## Si No
## Fumadores 0.0215 0.103
## No fumadores 0.0525 0.823
Visualizamos de forma gráfica.
mosaicplot(cuadro3, color=TRUE, main="Plot de mosaico")
Si usted esta interesado en obtener los valores esperados
E <- chisq.test(cuadro3)$expected; E
## Si No
## Fumadores 18.5 232
## No fumadores 129.5 1620
Conclusión: Sí existe una asociación entre las variables, es decir, el bajo peso y el fumar durante la gestacion estan asociados de manera significativa (Chi2=38.42, gl = 1, p-value <0.05).
EJEMPLO 4
Ejemplo 4. Se sabe que en un cruce T x T de palma, la descendencia de duras, teneras y pisiferas está en una proporción de 1:2:1. En una muestra de 104 palmas se obtuvieron 28 duras, 49 teneras y 27 pisiferas. Se ajustan estos datos a la proporción esperada? Tomado de: http://costaricalinda.com/Estadistica/JiCuad.htm
Solución
Denote que la proporción corresponde a 1:2:1, que se simplifica en un total a 1+2+1=4, para obtener la proporción de 1/4, 2/4, 1/4.
Ho: Los datos corresponden a una proporción de 1:2:1 H1: Los datos no corresponden a una proporción de 1:2:1
chisq.test(c(28,49,27), p=c(1/4,2/4,1/4))
##
## Chi-squared test for given probabilities
##
## data: c(28, 49, 27)
## X-squared = 0.4, df = 2, p-value = 0.8
Para observar los valores esperados, utilizamos nuevamente la función $expected.
pro<-chisq.test(c(28,49,27), p=c(1/4,2/4,1/4))
pro
##
## Chi-squared test for given probabilities
##
## data: c(28, 49, 27)
## X-squared = 0.4, df = 2, p-value = 0.8
pro$expected
## [1] 26 52 26