Test Cressie-Read, czyli jak mierzyć zależności pomiędzy parą zmiennych jakościowych

Po raz kolejny gościmy na blogu wpis Krzyśka Trajkowskiego [wielkie dzięki za wsparcie!!!]. Tym razem napisze on o teście Cressie-Read oraz przedstawi przykłady wywołania tego testu z pakietu CressieReadTest dla programu R. Warto zaznaczyć, że Krzysiek jest autorem tego pakietu.

Pakiet CressieReadTest można pobrać z tej strony.

Poniżej przedstawiony jest opis testu w formie strony html. Można też ten opis pobrać jako plik pdf z tej strony.

Statystyka Cressie-Read jest uogólnieniem kilku innych statystyk, popularnie wykorzystywanych w badaniu tablic kontyngencji dla dwóch zmiennych ilościowych. Warto więc się z nią zaznajomić.

Test Cressie-Read

Krzysztof Trajkowski

Do badania tabel kontyngencji bardzo często stosuje się testy niezależności \( \chi^2 \) Pearsona lub \( G^2 \) największej wiarygodności.
Istnieje jednak bardzo ciekawa (choć mniej popularna) statystyka \( D^2 \) zaproponowana przez Reada i Cressie która ma na celu ujednolicenie zapisu całej rodziny statystyk za pomocą poniższego wzoru:

\[
D^2=\frac{2}{\lambda(\lambda+1)}\sum_{i=1}^{r}\sum_{j=1}^{c} O_{ij}\left[\left(\frac{O_{ij}}{E_{ij}}\right)^{\lambda}-1\right]
\]
gdzie:

  • \( O_{ij} \) – empiryczna liczebność \( i \)-tego wiersza oraz \( j \)-tej kolumny,
  • \( E_{ij} \) – oczekiwana liczebność \( i \)-tego wiersza oraz \( j \)-tej kolumny,
  • \( r \) – liczba wierszy,
  • \( c \) – liczba kolumn.

Zwróćmy uwagę, że wyrażenie \( \lambda(\lambda+1) \) musi być różne od zera. A więc parametr \( \lambda \) nie może być równy \( 0 \) lub \( -1 \).
Cressie oraz Read sugerują, aby wartość parametru \( \lambda \) była równa \( \frac{2}{3} \) jako kompromis
między statystyką \( \chi^2 \) Pearsona (\( \lambda=1 \)) i \( G^2 \) wskaźnika wiarygodności (\( \lambda\rightarrow 0 \)).

m = matrix(c(25, 15, 23, 56), 2, 2)
library(CressieReadTest)
cr.test(m)
## 
##  D-squared Cressie-Read test
## 
## data:  m 
## D = 12.2532, lambda = 0.6667, df = 1.0000, p-value = 0.0004645

Dobierając odpowiednią wartość parametru \( \lambda \) możemy uzyskać wyniki dla kilku różnych testów niezależności opartych na statystyce \( \chi^2 \). Np. statystykę \( \chi^2 \) Pearsona otrzymamy gdy \( \lambda=1 \), z kolei statystykę Neymana dla \( \lambda=-2 \) która jest modyfikacją testu \( \chi^2 \) Pearsona. Statystykę testu \( G^2 \) największej wiarygodności uzyskamy dla parametru \( \lambda\rightarrow 0 \), a jego modyfikację Kullback-Leibler gdy \( \lambda\rightarrow -1 \). Natomiast rozwiązanie zaproponowane przez Freemana i
Tukeya otrzymamy dla \( \lambda=-\frac{1}{2} \). Poniżej przykłady z wykorzystaniem tych testów.

Statystyka chi-kwadrat Pearsona (Pearson chi-squared statistic)
\[
\chi^2=\sum_{i=1}^{r}\sum_{j=1}^{c}\frac{(O_{ij}-E_{ij})^2}{E_{ij}}
\]

cgf.test(m, test = "p")
## 
##  X-squared Pearson test
## 
## data:  m 
## P = 12.3, df = 1.0, p-value = 0.0004532
cr.test(m, lambda = 1)
## 
##  D-squared Cressie-Read test (Pearson)
## 
## data:  m 
## D = 12.3, lambda = 1.0, df = 1.0, p-value = 0.0004532

Modyfikacja Neyman's statystyki \( \chi^2 \):
\[
N=\sum_{i=1}^{r}\sum_{j=1}^{c}\frac{(O_{ij}-E_{ij})^2}{O_{ij}}
\]

cgf.test(m, test = "n")
## 
##  X-squared Neyman's test
## 
## data:  m 
## N = 13.2, df = 1.0, p-value = 0.0002793
cr.test(m, lambda = -2)
## 
##  D-squared Cressie-Read test (Neyman's)
## 
## data:  m 
## D = 13.2, lambda = -2.0, df = 1.0, p-value = 0.0002793

Inna często spotykana statystyka to wskaźnik wiarygodności (log likelihood ratio statistic)
\[
G^2=2\sum_{i=1}^{r}\sum_{j=1}^{c}O_{ij}\ln\left(\frac{O_{ij}}{E_{ij}}\right)
\]

cgf.test(m, test = "g")
## 
##  G-squared Likelihood Ratio test
## 
## data:  m 
## G = 12.27, df = 1.00, p-value = 0.0004603
cr.test(m, lambda = 1e-05)
## 
##  D-squared Cressie-Read test (G-squared)
## 
## data:  m 
## D = 12.27, lambda = 0.00, df = 1.00, p-value = 0.0004603

Modyfikacja Kullback-Leibler statystyki \( G^2 \):
\[
KL=2\sum_{i=1}^{r}\sum_{j=1}^{c}E_{ij}\ln\left(\frac{E_{ij}}{O_{ij}}\right)
\]

cgf.test(m, test = "kl")
## 
##  G-squared Kullback-Leibler test
## 
## data:  m 
## KL = 12.57, df = 1.00, p-value = 0.0003929
cr.test(m, lambda = -0.99999)
## 
##  D-squared Cressie-Read test (Kullback-Leibler)
## 
## data:  m 
## D = 12.57, lambda = -1.00, df = 1.00, p-value = 0.0003929

Poniżej statystyka zaproponowana przez Freemana i Tukeya:
\[
FT=4\sum_{i=1}^{r}\sum_{j=1}^{c}\left(\sqrt{O_{ij}}-\sqrt{E_{ij}}\right)^2
\]

cgf.test(m, test = "ft")
## 
##  F-squared Freeman-Tukey's test
## 
## data:  m 
## FT = 12.38, df = 1.00, p-value = 0.0004347
cr.test(m, lambda = -0.5)
## 
##  D-squared Cressie-Read test (Freeman-Tukey's)
## 
## data:  m 
## D = 12.38, lambda = -0.50, df = 1.00, p-value = 0.0004347

Na bazie statystyki \( \chi^2 \) można obliczyć kilka współczynników, które określają siłę związku badanych zmiennych.

  • współczynnik Yule'a – ma zastosowanie dla tabel o wymiarach \( 2\times 2 \) oraz \( \phi\in\langle -1;1\rangle \):
    \[ \phi=\sqrt{\frac{\chi^2}{n}} \]
  • współczynnik Pearsona – ma zastosowanie dla tabel o wymiarach \( r\times c \) oraz \( C\in\left\langle 0; \sqrt{\frac{min(r,c)-1}{min(r,c)}} \right\rangle \):
    \[ C=\sqrt{\frac{\chi^2}{\chi^2+n}} \]
  • współczynnik Cramera – nie wskazuje kierunku korelacji oraz \( V\in\langle 0; 1\rangle \):
    \[ V=\sqrt{\frac{\chi^2}{n(min(r,c)-1)}} \]
  • współczynnik Czupurowa – nie wskazuje kierunku korelacji oraz \( T\in\langle 0; 1\rangle \):
    \[ T=\sqrt{\frac{\chi^2}{n\sqrt{(r-1)(c-1)}}} \]
    Poniżej są przedstawione obliczenia dla wszystkich omówionych testów oraz współczynniki korelacji:
allcr.test(m)
## $test
##                        lambda Statistic df     p-val
## Pearson's Chi-squared  1.0000     12.30  1 0.0004532
## Log likelihood ratio   0.0000     12.27  1 0.0004603
## * Williams correction  0.0000     12.08  1 0.0005086
## Cressie-Read           0.6667     12.25  1 0.0004645
## Freeman-Tukey's       -0.5000     12.38  1 0.0004347
## Neyman's              -2.0000     13.20  1 0.0002793
## Kullback-Leibler      -1.0000     12.57  1 0.0003929
## 
## $coefficient
##              Y-Yule'a C-Pearson V-Cramer T-Czupurow
## Coefficient:   0.3215    0.3061   0.3215     0.3215

Przedstawione powyżej formuły matematyczne (testy niezależności) są także wykorzystywane do badania zgodności danych liczbowych z określnonym rozkładem np. jednostajnym. Poniżej przykłady dla dwóch rozkładów jednostajnych.

Rozkład jednostajny–dyskretny:

set.seed(8746)
s = sample(0:6, 150, T)
table(s)
## s
##  0  1  2  3  4  5  6 
## 29 14 27 21 20 20 19
w = as.numeric(table(s))
cr.gof(w)
## 
##  D-squared Cressie-Read test for given probabilities
## 
## data:  w 
## D = 7.1584, lambda = 0.6667, df = 6.0000, p-value = 0.3064
cr.gof(w, lambda = 1)
## 
##  D-squared Cressie-Read test (Pearson) for given probabilities
## 
## data:  w 
## D = 7.173, lambda = 1.000, df = 6.000, p-value = 0.3051

Rozkład jednostajny–ciągły:

set.seed(3254)
s = runif(150)
p = seq(0, 1, 0.2)
table(cut(s, p))
## 
##   (0,0.2] (0.2,0.4] (0.4,0.6] (0.6,0.8]   (0.8,1] 
##        21        29        36        30        34
w = as.numeric(table(cut(s, p)))
cr.gof(w)
## 
##  D-squared Cressie-Read test for given probabilities
## 
## data:  w 
## D = 4.5347, lambda = 0.6667, df = 4.0000, p-value = 0.3385
cr.gof(w, lambda = 1)
## 
##  D-squared Cressie-Read test (Pearson) for given probabilities
## 
## data:  w 
## D = 4.467, lambda = 1.000, df = 4.000, p-value = 0.3465

One thought on “Test Cressie-Read, czyli jak mierzyć zależności pomiędzy parą zmiennych jakościowych”

  1. A na koniec porównajmy te przybliżenia z dokładną wartością testu niezależności o rozkładzie wielomianowym (0.002274776) :]

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *