Analisis de frecuencias
library(vcd)
## Loading required package: grid
library(gmodels)
library(tidyverse)
## ── Attaching packages ─────────────────────────────────────── tidyverse 1.3.1 ──
## ✔ ggplot2 3.3.6 ✔ purrr 0.3.4
## ✔ tibble 3.1.7 ✔ dplyr 1.0.9
## ✔ tidyr 1.2.0 ✔ stringr 1.4.0
## ✔ readr 2.1.2 ✔ forcats 0.5.1
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
Tablas de frecuencia y contingencia
Para generar tablas de frecuencia, R tiene varias herramientas, en
particular podemos trabajar con table
, xtab
,
prop.table
y margin.tables
. Iniciaremos con
ejemplos de tablas de variables categóricas. Usaremos los datos de R en
la librería vcd
.
Tablas de una via
La forma más directa para generar una tabla de variables en R es con
el comando table()
usaremos los datos en
Arthritis
. Sabemos que tiene las variables: Treatment. Sex,
and Improved, todas variables categóricas.
head(Arthritis)
## ID Treatment Sex Age Improved
## 1 57 Treated Male 27 Some
## 2 46 Treated Male 29 None
## 3 77 Treated Male 30 None
## 4 17 Treated Male 32 Marked
## 5 36 Treated Male 46 Marked
## 6 23 Treated Male 58 Marked
<- with(Arthritis, table(Improved))
mytable mytable
## Improved
## None Some Marked
## 42 14 28
# for percentage table
prop.table(mytable)*100
## Improved
## None Some Marked
## 50.00000 16.66667 33.33333
Tablas de dos-vias
Como ejemplo: datos del estado de California en el uso del cinturón de seguridad en el auto, se compara el uso del cinturón de seguridad en el auto comparando si el hecho del que los padres de menores usen el cinturón de seguridad esto resulte en que los menores también usen el cinturón de seguridad.
Se genera una tabla de contingencia:
<- read_csv("~/Dropbox/GitHub/ProbEstad/DataSets/ch12_all/CaliforniaBuckleChild.csv", show_col_types = FALSE)
Buckle_child # to build a two-way table
<- xtabs(~ Parent + Child, data=Buckle_child)
BuckleChild head(BuckleChild)
## Child
## Parent buckled un-buckled
## buckled 56 8
## un-buckled 2 16
La repuesta parece obvia, pero se puede usar la \(\chi^2\) para demostrar la correlación.
Estas tablas de contingencia se pueden tabular otras propiedades de los
datos, podemos estimar las distribuciones marginales. Resultados de
proporción prop.table()
y de de frecuencia.
addmargins(BuckleChild)
## Child
## Parent buckled un-buckled Sum
## buckled 56 8 64
## un-buckled 2 16 18
## Sum 58 24 82
# porportions with respect to the first variable Parent
prop.table(BuckleChild, 1)
## Child
## Parent buckled un-buckled
## buckled 0.8750000 0.1250000
## un-buckled 0.1111111 0.8888889
addmargins(prop.table(BuckleChild))
## Child
## Parent buckled un-buckled Sum
## buckled 0.68292683 0.09756098 0.78048780
## un-buckled 0.02439024 0.19512195 0.21951220
## Sum 0.70731707 0.29268293 1.00000000
Para calcular la probabilidad parcial de la distribución de infantes
con el cinturon de seguridad abrochado de la tabla con los marginales
podemos estimar los siguientes parciales:
\(n_r\) número de renglones (el número
de niveles \(r\))
\(n_c\) número de columnas (número de
niveles \(c\))
\(Y_{ij}\) variable aleatoria de
acuerdo a la frecuencia de celda \(i,j\)
\(p_{ij}\) la probabilidad de la celda
\(i,j\)
Las probabilidades marginales son: \(P_i^r\), \(P_j^c\), son la probabilidad marginal igual
a la suma de las probabilidades por renglǿn \(p_i^r = p_{i1} + p_{i2} + \dots +
p_{in_r}\).
La hipótesis nula es que la variable columna es independiente de
la variable renglón, es decir: \(H_0:
p_{ij} = p_i^r p_j^c\).
La hipótesis nula se expresa como \(H_0:
\verb+las variables son independientes+\) y la hipótesis
alternativa es \(H_A: \verb+las variables no
son independientes+\).
Por ejemplo de la tabla addmargins(BuckleChild)
se obtienen
valores estimados de probabilidad \(\hat
p\).
Prueba de Independencia
Para la prueba de independencia en variables categóricas se pueden hacer varias estimaciones usando tablas de contingencia y para estimar la independencia entre variables se puede usar la prueba \(\chi^2\), esta prueba está basada en la distribución de \(\chi^2\) definida por:
\[ \chi^2 = \sum_{i=1}^{k} \frac{(\verb+OBSERVADO - ESPERADO+)^2}{\verb+ESPERADO+} \]
La distribución \(\chi^2\) como
prueba de independencia. Si usamos la cantidad esperada por celda como
\(n\hat{p}_{ij}\) se puede escribir
como \(R_iC_j/n\) con \(R_i\) la suma del renglón (i), y
\(C_j\) la suma de la columna
(j) y se puede escribir la estadística \(\chi^2\) como:
\[
\chi^2 = \sum_{i=1}^{n_r} \sum_{j=1}^{n_c} \frac{(Y_{ij} -
n\hat{p}_{ij})^2}{n \hat{p}_{ij}}
\] con \(\chi^2\) con \((n_r - 1)(n_c - 1)\) grados de libertad.
Esta estadística estima la componente para la celda. Para R la
independencia de la variable renglón contra la variable columna una
tabla ya “formada” se puede usar la prueba chisq.test()
también la función fisher.test()
.
chisq.test(BuckleChild)
##
## Pearson's Chi-squared test with Yates' continuity correction
##
## data: BuckleChild
## X-squared = 35.995, df = 1, p-value = 1.978e-09
fisher.test(BuckleChild)
##
## Fisher's Exact Test for Count Data
##
## data: BuckleChild
## p-value = 2.112e-09
## alternative hypothesis: true odds ratio is not equal to 1
## 95 percent confidence interval:
## 9.60524 538.85662
## sample estimates:
## odds ratio
## 51.34668
# From SAS and SPSS the gmodels library have a CrossTable that does all in one step
CrossTable(BuckleChild, chisq = TRUE, fisher = TRUE)
##
##
## Cell Contents
## |-------------------------|
## | N |
## | Chi-square contribution |
## | N / Row Total |
## | N / Col Total |
## | N / Table Total |
## |-------------------------|
##
##
## Total Observations in Table: 82
##
##
## | Child
## Parent | buckled | un-buckled | Row Total |
## -------------|------------|------------|------------|
## buckled | 56 | 8 | 64 |
## | 2.544 | 6.148 | |
## | 0.875 | 0.125 | 0.780 |
## | 0.966 | 0.333 | |
## | 0.683 | 0.098 | |
## -------------|------------|------------|------------|
## un-buckled | 2 | 16 | 18 |
## | 9.046 | 21.861 | |
## | 0.111 | 0.889 | 0.220 |
## | 0.034 | 0.667 | |
## | 0.024 | 0.195 | |
## -------------|------------|------------|------------|
## Column Total | 58 | 24 | 82 |
## | 0.707 | 0.293 | |
## -------------|------------|------------|------------|
##
##
## Statistics for All Table Factors
##
##
## Pearson's Chi-squared test
## ------------------------------------------------------------
## Chi^2 = 39.5993 d.f. = 1 p = 3.117954e-10
##
## Pearson's Chi-squared test with Yates' continuity correction
## ------------------------------------------------------------
## Chi^2 = 35.99532 d.f. = 1 p = 1.977918e-09
##
##
## Fisher's Exact Test for Count Data
## ------------------------------------------------------------
## Sample estimate odds ratio: 51.34668
##
## Alternative hypothesis: true odds ratio is not equal to 1
## p = 2.112173e-09
## 95% confidence interval: 9.60524 538.8566
##
## Alternative hypothesis: true odds ratio is less than 1
## p = 1
## 95% confidence interval: 0 365.59
##
## Alternative hypothesis: true odds ratio is greater than 1
## p = 2.112173e-09
## 95% confidence interval: 11.71007 Inf
##
##
##
Si se tiene suficiente evidencia para desechar la hipótesis nula de
independencia entre las variables, entonces la atención se turna en
estimar una medida de asociación entre dichas variables. La función
assocstats()
de la librería vcd
se puede usar
para estimar los parámetros \(\phi\),
de contingencia y de Cramer. En general a mayor valor de estos índices
se tiene una mayor asociación.
# Association tests parameters
assocstats(BuckleChild)
## X^2 df P(> X^2)
## Likelihood Ratio 38.359 1 5.8843e-10
## Pearson 39.599 1 3.1180e-10
##
## Phi-Coefficient : 0.695
## Contingency Coeff.: 0.571
## Cramer's V : 0.695
Ejemplo ácido fólico durante el embarazo
“In 1992, the U.S. Public Health Service and the Centers for Disease Control and Prevention recommended that all women of childbearing age consume \(400 \mu g\) of folic acid daily to reduce the risk of having a pregnancy that is affected by a neural tube defect such as spina bifida or anencephaly. In a study by Stepanuk et al., 693 pregnant women called a teratology information service about their use of folic acid supplementation. The researchers wished to determine if preconceptional use of folic acid and race are independent. The data appear in EXA_C12_S04_01.csv”
<- read_csv("~/Dropbox/GitHub/ProbEstad/DataSets/ch12_all/EXA_C12_S04_01.csv", show_col_types = FALSE)
FolicAcid
# to build a two-way table, race vs folic acid
<- xtabs(~ Race + FolicAcid, data = FolicAcid)
FA_table <- table(FolicAcid$Race, FolicAcid$FolicAcid)
FA_tabSimp head(FA_table)
## FolicAcid
## Race No Yes
## Black 41 15
## Other 14 7
## White 299 260
head(FA_tabSimp)
##
## No Yes
## Black 41 15
## Other 14 7
## White 299 260
# to estimate the marginal values of the table
addmargins(FA_table)
## FolicAcid
## Race No Yes Sum
## Black 41 15 56
## Other 14 7 21
## White 299 260 559
## Sum 354 282 636
# porportions with respect to the first variable Race
prop.table(FA_table, 1)
## FolicAcid
## Race No Yes
## Black 0.7321429 0.2678571
## Other 0.6666667 0.3333333
## White 0.5348837 0.4651163
addmargins(prop.table(FA_table))
## FolicAcid
## Race No Yes Sum
## Black 0.06446541 0.02358491 0.08805031
## Other 0.02201258 0.01100629 0.03301887
## White 0.47012579 0.40880503 0.87893082
## Sum 0.55660377 0.44339623 1.00000000
addmargins(prop.table(FA_tabSimp))
##
## No Yes Sum
## Black 0.06446541 0.02358491 0.08805031
## Other 0.02201258 0.01100629 0.03301887
## White 0.47012579 0.40880503 0.87893082
## Sum 0.55660377 0.44339623 1.00000000
# Independence tests
chisq.test(FA_table)
##
## Pearson's Chi-squared test
##
## data: FA_table
## X-squared = 9.0913, df = 2, p-value = 0.01061
fisher.test(FA_table)
##
## Fisher's Exact Test for Count Data
##
## data: FA_table
## p-value = 0.009282
## alternative hypothesis: two.sided
# To estimate the SAS type contingency table estimations
CrossTable(FA_table, prop.t = TRUE, prop.chisq = TRUE,
chisq = TRUE, fisher = TRUE, format = c("SAS"))
##
##
## Cell Contents
## |-------------------------|
## | N |
## | Chi-square contribution |
## | N / Row Total |
## | N / Col Total |
## | N / Table Total |
## |-------------------------|
##
##
## Total Observations in Table: 636
##
##
## | FolicAcid
## Race | No | Yes | Row Total |
## -------------|-----------|-----------|-----------|
## Black | 41 | 15 | 56 |
## | 3.100 | 3.892 | |
## | 0.732 | 0.268 | 0.088 |
## | 0.116 | 0.053 | |
## | 0.064 | 0.024 | |
## -------------|-----------|-----------|-----------|
## Other | 14 | 7 | 21 |
## | 0.457 | 0.574 | |
## | 0.667 | 0.333 | 0.033 |
## | 0.040 | 0.025 | |
## | 0.022 | 0.011 | |
## -------------|-----------|-----------|-----------|
## White | 299 | 260 | 559 |
## | 0.474 | 0.595 | |
## | 0.535 | 0.465 | 0.879 |
## | 0.845 | 0.922 | |
## | 0.470 | 0.409 | |
## -------------|-----------|-----------|-----------|
## Column Total | 354 | 282 | 636 |
## | 0.557 | 0.443 | |
## -------------|-----------|-----------|-----------|
##
##
## Statistics for All Table Factors
##
##
## Pearson's Chi-squared test
## ------------------------------------------------------------
## Chi^2 = 9.091262 d.f. = 2 p = 0.01061347
##
##
##
## Fisher's Exact Test for Count Data
## ------------------------------------------------------------
## Alternative hypothesis: two.sided
## p = 0.009281515
##
##
assocstats(FA_table)
## X^2 df P(> X^2)
## Likelihood Ratio 9.4808 2 0.0087352
## Pearson 9.0913 2 0.0106135
##
## Phi-Coefficient : NA
## Contingency Coeff.: 0.119
## Cramer's V : 0.12
Dados los valores de p, resultado de la pruebas de
independencia (y de la tabla CrossTable
) podemos rechazar
la hipótesis nula \(H_0\), y por lo
tanto podemos concluir que hay una relación entre la raza y el uso
durante el embarazo de ácido fólico. Aunque el efecto no es grande, como
resultado de los valores bajos de los coeficientes de contingencia y
Cramer V.