Unidad I. Regresiones y reducción de dimensionalidad.

Independencia de variables y medidas de asociación.

  • Distribución conjunta de variables aleatorias.
    • Tablas de Contingencia.
    • Concepto de independencia.

Llamamos distribución conjunta (o multivariada) de dos (distribución bivariada) o más variables aleatorias a la distribución de la intersección de las variables. En el caso de dos variables aleatorias $X$ e $Y$:

$$P(X=x, Y=y) = P(X=x|Y=y) \cdot P(Y=y) = P(Y=y|X=x) \cdot P(X=x)$$

Donde $P(x|y)$ es la probabilidad condicional de $x$ dado $y$.
La probabilidad conjunta cumple:
$$\sum_{i}\sum_{j} P(X=x_{i}, Y=y_{j}) = 1$$

Si $X$ e $Y$ son variables **independientes**, se cumple que:

$$P(X=x, Y=y) = P(X=x) \cdot P(Y=y)$$

Las definiciones anteriores son para dos variables categóricas, sin embargo la misma idea se extiende para variables continuas, donde la función de densidad de probabilidad (PDF) conjunta se define como:

$$PDF_{X,Y}(x,y) = PDF_{X|Y}(x|y) \cdot PDF_{Y}(y) = PDF_{Y|X}(y|x) \cdot PDF_{X}(x)$$

Donde $PDF_{X}(x)$ es la función de densidad de probabilidad marginal o distribución marginal.

$$PDF_{X}(x) = \int_{y} PDF_{X,Y}(x,y) dy = \int_{y} PDF_{X|Y}(x|y) \cdot PDF_{Y}(y) dy$$

En el caso de variables categóricas:

$$ P(X=x) = \sum_{y} P(X=x, Y=y) = \sum_{y} P(X=x|Y=y) \cdot P(Y=y)$$

La función de densidad de probabilidad acumulada (CDF) para dos variables se define como:

$$CDF_{X,Y}(x,y) = P(X \le x, Y \le y)$$

Tablas de Contingencia

Las tablas de contingencia representan todas las combinaciones de valores posibles para un determinado número de variables categóricas. Si por ejemplo tenemos tres variables categóricas $X$, $Y$ y $Z$, cada una con $i$, $j$ y $k$ niveles respectivamente. La tabla de contingencia que contiene la clasificación cruzada entre $X$ e $Y$ será una tabla $i \times j$ (two-way table). La tabla que además incluya a la variable $Z$ será una tabla $i \times j \times k$ (three-way contingency table).


In [1]:
using RDatasets
survey = dataset("MASS", "survey")

head(survey)


Out[1]:
SexWrHndNWHndWHndFoldPulseClapExerSmokeHeightMIAge
1Female18.518.0RightR on L92LeftSomeNever173.0Metric18.25
2Male19.520.5LeftR on L104LeftNoneRegul177.8Imperial17.583
3Male18.013.3RightL on R87NeitherNoneOccasNANA16.917
4Male18.818.9RightR on LNANeitherNoneNever160.0Metric20.333
5Male20.020.0RightNeither35RightSomeNever165.0Metric23.667
6Female18.017.7RightL on R64RightSomeNever172.72Imperial21.0

In [2]:
using FreqTables;

In [3]:
freqtable(survey, :Sex)


Out[3]:
2-element Named Array{Int64,1}
Sex    │ 
───────┼────
Female │ 118
Male   │ 118

In [4]:
freqtable(survey, :WHnd)


Out[4]:
2-element Named Array{Int64,1}
WHnd  │ 
──────┼────
Left  │  18
Right │ 218

In [5]:
# Nxy
conteos = freqtable(survey, :Sex, :WHnd)


Out[5]:
2×2 Named Array{Int64,2}
Sex ╲ WHnd │  Left  Right
───────────┼─────────────
Female     │     7    110
Male       │    10    108

In [6]:
# Nx.
marginal_Sex = sum(conteos,2)


Out[6]:
2×1 Named Array{Int64,2}
Sex ╲ WHnd │ sum(WHnd)
───────────┼──────────
Female     │       117
Male       │       118

In [7]:
# N.y
marginal_WHnd = sum(conteos,1)


Out[7]:
1×2 Named Array{Int64,2}
Sex ╲ WHnd │  Left  Right
───────────┼─────────────
sum(Sex)   │    17    218

In [8]:
# N
total = sum(conteos)


Out[8]:
235
$$ P(Right,Female) = \frac{N_{Right,Female}}{N}$$

In [9]:
# P(x,y)
probabilidades = conteos ./ total


Out[9]:
2×2 Named Array{Float64,2}
Sex ╲ WHnd │      Left      Right
───────────┼─────────────────────
Female     │ 0.0297872   0.468085
Male       │ 0.0425532   0.459574

In [10]:
sum(probabilidades)


Out[10]:
1.0
$$ P(Right|Female) = \frac{N_{Right,Female}}{N_{Female}}$$

In [11]:
# P(y|x)
condicionales_Sex = conteos ./ marginal_Sex


WARNING: Dropping mismatching names
Out[11]:
2×2 Array{Float64,2}:
 0.0598291  0.940171
 0.0847458  0.915254

In [12]:
sum(condicionales_Sex,2)


Out[12]:
2×1 Array{Float64,2}:
 1.0
 1.0

En caso como éstos, dónde una de las variables fue fijada en el diseño experimental (comúnmente las filas) la distribución conjunta de las dos variables carece de sentido. En su lugar, es la probabilidad condicional de la variable no fijada, dada la variable que se fijó en el muestreo, la que tiene sentido. Lo mismo sucede cuando tenemos una variable predictiva y una respuesta, en donde tiene sentido pensar en la probabilidad condicional de la respuesta dado un valor de la variable predictiva. Cada una de éstas probabilidades condicionales sigue una distribución binomial:


In [13]:
using Distributions

In [23]:
# P(Left|Female)
N = marginal_Sex["Female",1]


Out[23]:
117

In [24]:
Binomial(N, condicionales_Sex[1,1])


Out[24]:
Distributions.Binomial{Float64}(n=117, p=0.05982905982905983)

In [25]:
# P(Left|Male)
Binomial(marginal_Sex["Male",1], condicionales_Sex[2,1])


Out[25]:
Distributions.Binomial{Float64}(n=118, p=0.0847457627118644)

En algunos casos, ninguna de las variables está fijada. Sólo se fija el número total de elementos que se clasificaron de manera simultánea. En esas tablas de contingencia, los marginales no tiene un valor fijo, sólo se decide la suma total con el diseño experimental. En ese caso, cada la probabilidad de cada celda de la tabla es el parámetro de una distribución multinomial, donde cada celda es una categoría:

y₁ y₂
x₁ c₁ c₃
x₂ c₂ c₄

In [26]:
#                   total c₁   c₂   c₃   c₄
multi = Multinomial(100, [0.2, 0.2, 0.5, 0.1])


Out[26]:
Distributions.Multinomial{Float64}(n=100, p=[0.2,0.2,0.5,0.1])

In [27]:
tabla = rand(multi)


Out[27]:
4-element Array{Int64,1}:
 15
 25
 51
  9

In [28]:
reshape(tabla, (2,2))


Out[28]:
2×2 Array{Int64,2}:
 15  51
 25   9

Pearson's Chi-square Test

El test χ² de Pearson utiliza el estadístico X² bajo la hipótesis nula de que las variables son independientes. Es decir, $p_{ij} = p_{i} \cdot p_{j}$ para todo $i,j$ cuando $H_{0}$ es correcta. Siendo $\mu_{ij} = n \cdot p_{i} \cdot p_{j}$ la frecuencia esperada bajo $H_{0}$:

$$ X^{2} = \sum \frac{(n_{ij}-\mu_{ij})^{2}}{\mu_{ij}} $$

X² sigue aproximadamente una distribución χ² para tamaños muestrales grandes. El P value es el área a la derecha (right-tail probability) de X² (dado que grandes valores de X² se corresponden a una mayor distancia de $H_{0}$. La aproximación χ² mejora para grandes valores de $\mu_{ij}$, siendo suficiente $\mu_{ij} \ge 5$. Los grados de libertad para una tabla de contingencia $I \times J$ es $(I-1)(J-1)$. (Agresti 1996)

  • Agresti, A. (1996). An introduction to categorical data analysis (Vol. 135). New York: Wiley.
  • McDonald, John H. Handbook of biological statistics. Vol. 2. Baltimore, MD: Sparky House Publishing, 2009. Capítulo sobre χ²

In [29]:
nij = freqtable(survey, :Smoke, :Exer)


Out[29]:
4×3 Named Array{Int64,2}
Smoke ╲ Exer │ Freq  None  Some
─────────────┼─────────────────
Heavy        │    7     1     3
Never        │   87    18    84
Occas        │   12     3     4
Regul        │    9     1     7

In [30]:
n = sum(nij)


Out[30]:
236

In [31]:
pij = nij ./ n


Out[31]:
4×3 Named Array{Float64,2}
Smoke ╲ Exer │       Freq        None        Some
─────────────┼───────────────────────────────────
Heavy        │   0.029661  0.00423729   0.0127119
Never        │   0.368644   0.0762712    0.355932
Occas        │  0.0508475   0.0127119   0.0169492
Regul        │  0.0381356  0.00423729    0.029661

In [32]:
pi = sum(pij, 2)


Out[32]:
4×1 Named Array{Float64,2}
Smoke ╲ Exer │ sum(Exer)
─────────────┼──────────
Heavy        │ 0.0466102
Never        │  0.800847
Occas        │ 0.0805085
Regul        │ 0.0720339

In [33]:
pj = sum(pij, 1)


Out[33]:
1×3 Named Array{Float64,2}
Smoke ╲ Exer │      Freq       None       Some
─────────────┼────────────────────────────────
sum(Smoke)   │  0.487288  0.0974576   0.415254

In [34]:
μij = n .* pi * pj


Out[34]:
4×3 Named Array{Float64,2}
Smoke ╲ Exer │    Freq     None     Some
─────────────┼──────────────────────────
Heavy        │ 5.36017  1.07203   4.5678
Never        │ 92.0975  18.4195  78.4831
Occas        │ 9.25847  1.85169  7.88983
Regul        │  8.2839  1.65678  7.05932

In [35]:
X2 = sum((nij .- μij).^2 ./ μij)


Out[35]:
5.488545890584233

In [36]:
using HypothesisTests
# tabla 4x3
# df (4-1)(3-1) = 3 ⋅ 2 = 6
pvalue(Chisq(6), X2, tail=:right)


Out[36]:
0.48284216946545605

In [37]:
ChisqTest(tabla)


Out[37]:
Pearson's Chi-square Test
-------------------------
Population details:
    parameter of interest:   Multinomial Probabilities
    value under h_0:         [0.25,0.25,0.25,0.25]
    point estimate:          [0.15,0.25,0.51,0.09]
    95% confidence interval: Tuple{Float64,Float64}[(0.0,0.389999),(0.0,0.489999),(0.25,0.749999),(0.0,0.329999)]

Test summary:
    outcome with 95% confidence: reject h_0
    two-sided p-value:           5.703407383477535e-9 (extremely significant)

Details:
    Sample size:        100
    statistic:          41.28
    degrees of freedom: 3
    residuals:          [-2.0,0.0,5.2,-3.2]
    std. residuals:     [-2.3094,0.0,6.00444,-3.69504]

In [40]:
using RCall

In [41]:
R"chisq.test($tabla)"


Out[41]:
RCall.RObject{RCall.VecSxp}

	Chi-squared test for given probabilities

data:  `#JL`$tabla
X-squared = 41.28, df = 3, p-value = 5.703e-09

El P value el test nos describe la evidencia contra la hipótesis nula, pero no nos da un indicio de la naturaleza de las diferencias. Para poder ganar conocimiento acerca de lo que está pasando en al tabla, es posible hacer las diferencias celda a celda entre los valores observados y los valores esperados: $n_{ij} - \mu_{ij}$. Sin embargo, estos valores serán más grandes a medida que las celdas tengan valores esperados mayores. Para poder evitar esto, se utilizan los residuos estandarizados, que no son más que la diferencia sobre su error estadístico:

$$\frac{n_{ij}-\mu_{ij}}{\sqrt{\mu_{ij}(1-p_{i})(1-p_{j})}}$$

In [42]:
diferencia = (nij .- μij)


Out[42]:
4×3 Named Array{Float64,2}
Smoke ╲ Exer │       Freq        None        Some
─────────────┼───────────────────────────────────
Heavy        │    1.63983  -0.0720339     -1.5678
Never        │   -5.09746   -0.419492     5.51695
Occas        │    2.74153     1.14831    -3.88983
Regul        │   0.716102    -0.65678   -0.059322

In [43]:
se = sqrt( μij .* ( (1.-pi)*(1.-pj) ) )


Out[43]:
4×3 Array{Float64,2}:
 1.61868  0.960447  1.59578
 3.06657  1.81956   3.02318
 2.0892   1.23963   2.05964
 1.98527  1.17796   1.95718

In [44]:
residuos_estandarizados = diferencia ./ se


Out[44]:
4×3 Named Array{Float64,2}
Smoke ╲ Exer │       Freq        None        Some
─────────────┼───────────────────────────────────
Heavy        │    1.01307  -0.0750004   -0.982466
Never        │   -1.66226   -0.230546     1.82488
Occas        │    1.31224    0.926328     -1.8886
Regul        │   0.360707   -0.557555  -0.0303099

Fisher's Exact Test

El test de χ² de Pearson, es un test para tamaños muestrales grandes dado que utiliza una distribución asintótica. Para tamaños de muestra más chicos, en particular para tablas de 2x2, el test de independencia de Fisher utiliza la distribución exacta. Éste último es útil también cuando los valores de frecuencia esperados son bajos. Sin embargo, el test está pensado para un diseño experimental en el que se controlan ambos marginales. El ejemplo clásico es:


In [45]:
using NamedArrays

In [46]:
tabla = NamedArray(Int[3 1; 1 3], ( ["Leche","Té"], ["Leche","Té"] ), ("Real","Predicción"))


Out[46]:
2×2 Named Array{Int64,2}
Real ╲ Predicción │ Leche     Té
──────────────────┼─────────────
Leche             │     3      1
Té                │     1      3

In [47]:
FisherExactTest(tabla'...)


Out[47]:
Fisher's exact test
-------------------
Population details:
    parameter of interest:   Odds ratio
    value under h_0:         1.0
    point estimate:          6.408319658199699
    95% confidence interval: (0.21173559544657852,626.2435305888454)

Test summary:
    outcome with 95% confidence: fail to reject h_0
    two-sided p-value:           0.485714285714286 (not significant)

Details:
    contingency table:
        3  1
        1  3

In [48]:
R"fisher.test($tabla)"


Out[48]:
RCall.RObject{RCall.VecSxp}

	Fisher's Exact Test for Count Data

data:  `#JL`$tabla
p-value = 0.4857
alternative hypothesis: true odds ratio is not equal to 1
95 percent confidence interval:
   0.2117329 621.9337505
sample estimates:
odds ratio 
  6.408309