El estadistico de chi-cuadrado, es util cuando estamos trabajando con variables nominales, categoricas o estamos trabajando con alguna clase de clasificacion Su formula estadistica esta dada por:
alt text
Donde: O= se refiere a las frecuencias observadas E= frecuencias esperadas
Requerimientos para trabajar con la distribucion de chi-cuadrado:
La muestra debe ser tomadas al azar >Variables medidas deben ser independientes; >Los datos deben ser reportados en frecuencias absolutas (no porcentajes); >Valores / categorias de variables deben ser mutuamente excluyentes; >Frecuencias observadas no deben pequeñas.
El estadistico de chi resulta util para trabajar datos, como frecuencias, o categoricos, como por ejemplo: hay 15 hombres y 19 mujeres en un aula de clase. 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 genero (hombres y mujeres).
El valor observado es 15 y 19. Para el calculo del valor esperado se obtiene de (15+19)/2=17. Resumiendose la informacion queda de la siguiente manera:
alt text
En R resulta muy facil el calculo de chi-cuadrado, tanto para su estadistico 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
Los grados de libertad son calculados a partir de n-1 (numero de categorias menos uno).
Si esta interesado en obtener el valor critico 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
El test estadistico de chi-cuadrado pude encontrarse en la literatura tambien como bondad de ajuste. El test de bondad de ajuste (goodness of fit tests), se le denomina asi, cuando los objetos pertenecen a una matriz de datos. Otros nombres que suele darse es tabla de contingencia, y es cuando los datos estan arreglados en filas y columnas, como veremos mas adelante.
La expresion de una matriz se realiza con el comando “matrix”
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 la bondad de ajuste lo aplicamos 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). Asi 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 Fischers test.
Los grados de libertad para una matrix o tabla de contingencia en chi-cuadrado son calculados de C-1 x F-1 (columnas menos uno x filas menos uno).
Es una prueba de significacionn estadistica, utilizadas en el analisis 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 numero de replicas o permutaciones.
Llame la ayuda de Fisher, para ver los atributos del comando de la prueba.
El test de Fisher tambien 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 Fisdher es que aplica una corrección por continuidad para tablas 2x2.
?fisher.test
## starting httpd help server ...
## done
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.7101
## alternative hypothesis: two.sided
Si usted quiere tener el valor de chi-cuadrado, aun para muestras pequenas (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.7366
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 util para darnos las frecuencias de los valores en terminos de porcentaje, y nos resulta facil a la hora de la interpretacion 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 asi sucesivamente.
Recuerde que para dar un resultado con cierto numero de decimales puede utilizar la opcion de “options(digits=3)” para tres decimales.
redondear = options(digits=3)
Asi 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
Esto ultimos dos calculos 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 informacion
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
## 1 Female 18.5 18.0 Right R on L 92 Left Some Never 173
## 2 Male 19.5 20.5 Left R on L 104 Left None Regul 178
## 3 Male 18.0 13.3 Right L on R 87 Neither None Occas NA
## 4 Male 18.8 18.9 Right R on L NA Neither None Never 160
## 5 Male 20.0 20.0 Right Neither 35 Right Some Never 165
## 6 Female 18.0 17.7 Right L on R 64 Right Some Never 173
## M.I Age
## 1 Metric 18.2
## 2 Imperial 17.6
## 3 <NA> 16.9
## 4 Metric 20.3
## 5 Metric 23.7
## 6 Imperial 21.0
names(survey)# visualiza títulos de las columnas de los datos
## [1] "Sex" "Wr.Hnd" "NW.Hnd" "W.Hnd" "Fold" "Pulse" "Clap"
## [8] "Exer" "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 $.
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
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 replicas.
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
Un grafico de mosaico despliega informacion para examinar la relacion entre dos o más variables categoricas.
mosaicplot(cuadro2, color=TRUE, main="Plot de mosaico")
mosaicplot(cuadro, color=TRUE, main="Plot de mosaico")
Analice bien los ejes de cada grafico para una interpretación precisa.
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 ajustandolo las categorias en orden separado, dependiendo de cual es el interes en la forma de como presentar sus resultados.
barplot(cuadro2, legend = rownames(cuadro2), beside=T,axis.lty = 2)
Utilice las variables de años (year) y limites (limit), genere un vector que se llame “trafico”
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) ______________________________________________________________________________________________________________________________________________
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
alt text
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 gestacion son independientes o no estan asociados).
H1: Si hay asociación entre las variables, es decir, el bajo peso y el fumar durante la gestacion estan asociados.
Solucion:
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 = 40, 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 decision 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 grafica.
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
Conclusion: 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. Se sabe que en un cruce T x T de palma, la descendencia de duras, teneras y pisiferas esta 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
Solucion
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
Conclusion: Los datos corresponden a una proporción de 1:2:1 de manera no significativa (Chi2=0.36, gl = 2, p-value >0.05).
Uno de los ejemplos clasicos para el uso de proporciones es en el campo de la genetica.
Ejemplo 5. Se quiere demostrar bajo un experimento genetico, si nuestros datos se ajustan a la proporción Mendeliana 9:3:3:1.
Ho: los datos se ajustan a la proporción Mendeliana 9:3:3:1. H1: los datos no se ajustan a la proporción Mendeliana 9:3:3:1.
Valores observados: . 318 semillas redondas, color amarillo . 103 semillas redondas, color verde . 99 semillas arrugadas, color amarillo . 30 semillas arrugadas, color verde