Chi-Cuadrado

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

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

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).

TEST DE INDEPENDENCIA - FISCHERS TEST

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 $.

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 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

Formas gráficas explorables para los test de independencia, tablas de contingencia o Chi-cuadrado.

PLOT DE MOSAICO

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")

c. obtenga el mosaico para los datos del vector “cuadro”.

mosaicplot(cuadro, color=TRUE, main="Plot de mosaico")

Analice bien los ejes de cada grafico 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 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)

Ejemplo 2. Utilice ahora la base de datos “Traffic” (efecto de la velocidad limite de suizos en accidentes automovilisticos).

  1. Utilice las variables de años (year) y limites (limit), genere un vector que se llame “trafico”

  2. Analice si existe una dependencia de los accidentes y la velocidad limite excedida por años (1961-1962). _____________________________________________________________________________________________________________________________________________________________________________________________________________________
  3. Genere un plot de mosaico, utilizando la función shade=T (muestra los residuos estandarizados de sus valores. ______________________________________________________________________________________________________________________________________________

  4. Calcule los residuos estandarizados (para ello lea el help de la prueba) ______________________________________________________________________________________________________________________________________________

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

alt text

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

  1. Desarrolle el calculo estadistico, b) obtenga los valores esperados y c) su conclusion._____________________________________________________________