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$:
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:
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:
Donde $PDF_{X}(x)$ es la función de densidad de probabilidad marginal o distribución marginal.
En el caso de variables categóricas:
La función de densidad de probabilidad acumulada (CDF) para dos variables se define como:
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]:
In [2]:
using FreqTables;
In [3]:
freqtable(survey, :Sex)
Out[3]:
In [4]:
freqtable(survey, :WHnd)
Out[4]:
In [5]:
# Nxy
conteos = freqtable(survey, :Sex, :WHnd)
Out[5]:
In [6]:
# Nx.
marginal_Sex = sum(conteos,2)
Out[6]:
In [7]:
# N.y
marginal_WHnd = sum(conteos,1)
Out[7]:
In [8]:
# N
total = sum(conteos)
Out[8]:
In [9]:
# P(x,y)
probabilidades = conteos ./ total
Out[9]:
In [10]:
sum(probabilidades)
Out[10]:
In [11]:
# P(y|x)
condicionales_Sex = conteos ./ marginal_Sex
Out[11]:
In [12]:
sum(condicionales_Sex,2)
Out[12]:
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]:
In [24]:
Binomial(N, condicionales_Sex[1,1])
Out[24]:
In [25]:
# P(Left|Male)
Binomial(marginal_Sex["Male",1], condicionales_Sex[2,1])
Out[25]:
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]:
In [27]:
tabla = rand(multi)
Out[27]:
In [28]:
reshape(tabla, (2,2))
Out[28]:
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² 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)
In [29]:
nij = freqtable(survey, :Smoke, :Exer)
Out[29]:
In [30]:
n = sum(nij)
Out[30]:
In [31]:
pij = nij ./ n
Out[31]:
In [32]:
pi = sum(pij, 2)
Out[32]:
In [33]:
pj = sum(pij, 1)
Out[33]:
In [34]:
μij = n .* pi * pj
Out[34]:
In [35]:
X2 = sum((nij .- μij).^2 ./ μij)
Out[35]:
In [36]:
using HypothesisTests
# tabla 4x3
# df (4-1)(3-1) = 3 ⋅ 2 = 6
pvalue(Chisq(6), X2, tail=:right)
Out[36]:
In [37]:
ChisqTest(tabla)
Out[37]:
In [40]:
using RCall
In [41]:
R"chisq.test($tabla)"
Out[41]:
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:
In [42]:
diferencia = (nij .- μij)
Out[42]:
In [43]:
se = sqrt( μij .* ( (1.-pi)*(1.-pj) ) )
Out[43]:
In [44]:
residuos_estandarizados = diferencia ./ se
Out[44]:
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]:
In [47]:
FisherExactTest(tabla'...)
Out[47]:
In [48]:
R"fisher.test($tabla)"
Out[48]: