Continuamos con el seguimiento de lo que aprendimos de ANOVA, que me ayuda a hacer comparaciones en variables numericas. Pero ¿que pasa cuando las variables son categoricas?
Por ejemplo
¿Fuma? → Sí / No ¿Enfermó? → Sí / No
No puedo calcular una media de “Sí” y “No”. Necesitamos otra herramienta, esto resulta practico si lo pensamos orientado a la agronomia, con la deficiencia de potasio o nitrogeno, con una tabla de informacion de si y no con la deficiencia dependiendo del color de las hojas.
Entonces el siguiente codigo va a tratarse sobre la deficiencia de las hojas que se estan midiendo de N-P-K por ejemplo en las hojas. La verdadera pregunta es cuántas plantas esperarías en cada celda si el suelo y la deficiencia fueran completamente independientes.
tabla_plantas <- matrix (
c( 30, 10, 5,
8, 25, 7,
7, 10, 18),
nrow = 3,
byrow = TRUE,
dimnames = list (
Deficiencia = c("N", "P", "K"),
Suelo = c("Ácido", "Neutro", "Alcalino")
)
)
tabla_plantas
## Suelo
## Deficiencia Ácido Neutro Alcalino
## N 30 10 5
## P 8 25 7
## K 7 10 18
chisq.test(tabla_plantas)
##
## Pearson's Chi-squared test
##
## data: tabla_plantas
## X-squared = 40.696, df = 4, p-value = 3.107e-08
El p-valor esta muy por debajo del valor 0.05 entonces rechazamos la hipotesis nula y tomamos la hipotesis alterna.
H₀ = el tipo de suelo y la deficiencia son INDEPENDIENTES H₁ = el tipo de suelo y la deficiencia están RELACIONADOS
H₀ = “no pasa nada” → independencia, igualdad, no efecto H₁ = “sí pasa algo” → dependencia, diferencia, efecto real
Con un p-valor de 3.107e-08 rechazamos H₀ y aceptamos H₁, concluyendo que el tipo de suelo y la deficiencia nutricional son dependientes entre sí. Es decir, el tipo de suelo acido, neutro o alcalino influye en qué nutriente le falta a la planta.
Recordemos entonces que pocos datos de prueba = pocos datos para distribuir en la celda y si hay un valor muy elevado se dañan los demás datos; En chi cuadrado es critico entonces voy a correr el siguiente codigo
chisq.test(tabla_plantas)$expected
## Suelo
## Deficiencia Ácido Neutro Alcalino
## N 16.875 16.875 11.25
## P 15.000 15.000 10.00
## K 13.125 13.125 8.75
Chi cuadrado seguira siendo confiable en la medida de >5, cuando este por debajo de ese valor ya no se puede confiar en la fiabilidad de esta prueba.
Probemos un ejemplo con E = 1 Y O = 3
$ ^2 = {1}$
El resultado que vamos a obtener es
$ {1} = 4$
¿Ves lo que pasa? Con E muy pequeño, cualquier diferencia pequeña entre O y E se infla enormemente en el resultado final.
E < 5 en alguna celda → Chi-cuadrado inflado → resultado no confiable → usar prueba de Fisher exacta
Para la prueba de fisher el codigo que usaremos es el siguiente.
fisher.test(tabla_plantas)
##
## Fisher's Exact Test for Count Data
##
## data: tabla_plantas
## p-value = 1.259e-07
## alternative hypothesis: two.sided
Como podemos evidenciar el p-valor esta muy por debajo del resultado 0.05 para rechazar la hipotesis nula entonces tomaremos tambien en el Fisher la hipotesis alterna.
(table_of_decision_making <- data.frame(
situacion <- c("Todas las celdas esperadas ≥ 5", "Alguna celda esperada < 5", "Tabla 2×2 con pocos datos"),
prueba_recomendada <- c("Chi-cuadrado","Fisher exacto","Fisher exacto")
))
## situacion....c..Todas.las.celdas.esperadas...5....Alguna.celda.esperada...5...
## 1 Todas las celdas esperadas ≥ 5
## 2 Alguna celda esperada < 5
## 3 Tabla 2×2 con pocos datos
## prueba_recomendada....c..Chi.cuadrado....Fisher.exacto....Fisher.exacto..
## 1 Chi-cuadrado
## 2 Fisher exacto
## 3 Fisher exacto
sessionInfo()
## R version 4.2.3 (2023-03-15)
## Platform: x86_64-apple-darwin17.0 (64-bit)
## Running under: macOS Big Sur 11.7.11
##
## Matrix products: default
## BLAS: /Library/Frameworks/R.framework/Versions/4.2/Resources/lib/libRblas.0.dylib
## LAPACK: /Library/Frameworks/R.framework/Versions/4.2/Resources/lib/libRlapack.dylib
##
## locale:
## [1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
##
## attached base packages:
## [1] stats graphics grDevices utils datasets methods base
##
## loaded via a namespace (and not attached):
## [1] digest_0.6.39 R6_2.6.1 lifecycle_1.0.5 jsonlite_2.0.0
## [5] evaluate_1.0.5 cachem_1.1.0 rlang_1.1.7 cli_3.6.5
## [9] rstudioapi_0.18.0 jquerylib_0.1.4 bslib_0.10.0 rmarkdown_2.30
## [13] tools_4.2.3 xfun_0.56 yaml_2.3.12 fastmap_1.2.0
## [17] compiler_4.2.3 htmltools_0.5.9 knitr_1.51 sass_0.4.10