Rozdział 18 Test chi-kwadrat
18.1 Test chi-kwadrat – zastosowania
Test chi-kwadrat za każdym razem ma podobną konstrukcję, ale służy do wielu celów. Będziemy wykorzystywać następujące zastosowania testu chi-kwadrat:
testy zgodności rozkładu (sprawdzamy, czy rozkład w pewnej populacji jest zgodny z założonym rozkładem teoretycznym),
testy jednorodności (sprawdzamy, czy struktura zmiennych jakościowych jest taka sama, czyli jednorodna, w dwóch lub większej liczbie populacji),
testy niezależności (sprawdzamy, czy dwie zmienne jakościowe są od siebie w populacji niezależne).
18.2 Wzór
Choć test ma różne zastosowania, zobaczymy, że wzór służący do obliczenia statystyki testowej wygląda we wszystkich wypadkach podobnie. Możemy go zapisać w następujący sposób:
\[ \chi^2 = \sum_{i} \frac{(O_i-E_i)^2}{E_i}, \tag{18.1} \] gdzie:
\(i\) - to indeks wskazujący na poszczególne klasy lub na „przegródki” (komórki) w tabeli dwudzielczej,
\(O_i\) - liczebności zaobserwowane (ang. observed),
\(E_i\) - liczebności oczekiwane (ang. expected) - liczebności oczekiwane określone na podstawie zadanego rozkładu lub na podstawie założenia o niezależności, inaczej liczebności teoretyczne.
18.3 Hipotezy
W teście zgodności \(H_0\) mówi, że rozkład pewnej zmiennej jakościowej w populacji jest zgodny z założeniem, a \(H_A\) mówi, że jest inny.
W teście jednorodności \(H_0\) mówi, że rozkład zmiennej jakościowej w 2 lub większej liczbie populacji jest jednakowy („jednorodny”), zaś \(H_A\) mówi, że jest inny.
W teście niezależności \(H_0\) mówi, że dwie zmienne jakościowe są od siebie w populacji niezależne, zaś \(H_A\) mówi, że są zależne.
18.4 Liczebności oczekiwane
W teście zgodności liczebności oczekiwane wynikają z zakładanego rozkładu.
W testach jednorodności i niezależności liczebności oczekiwane należy wyznaczyć. W obu testach tabele liczebności mają postać tabeli dwudzielczej. Oczekiwaną liczebność należy wyznaczyć dla każdej komórki tej tabeli.
\[ \text{Liczebność oczekiwana} = \frac{\text{Liczebność wiersza} \cdot \text{Liczebność kolumny}}{\text{Liczebność całkowita}}\]
18.5 Warunki zastosowania testu
Test chi-kwadrat jest testem przybliżonym (podobnie jak test z dla średnich lub proporcji), wymaga więc – poza standardowym założeniem losowości i reprezentatywności próby – odpowiedniej wielkości próby. Najczęściej podaje się regułę, że minimalna liczebność oczekiwana w pojedynczej komórce wynosi 5.
18.6 Liczba stopni swobody
Statystyka testowa w teście chi-kwadrat ma rozkład chi-kwadrat o określonej „liczbie stopni swobody” (tak nazywa sie jedyny parametr rozkładu chi-kwadrat).
W testach zgodności z konkretnym rozkładem prawdopodobieństwa liczba stopni swobody to \(k-1\), gdzie \(k\) to liczba klas.
W przypadku testów zgodności z rozkładem o określonych parametrach, gdy te parametry są szacowane na podstawie tych samych danych, liczba stopni swobody to \(k-m-1\), gdzie \(k\) to liczba klas, zaś \(m\) to liczba szacowanych parametrów
W testach jednorodności rozkładów liczba stopni swobody to \(k-1\) w przypadku testowania dwóch populacji. W przypadku większej liczby porównywanych populacji liczba stopni swobody to \((k-1)\cdot(c-1)\), gdzie \(c\) to liczba populacji.
W testach niezależności Liczba stopni swobody to \((r-1)\cdot(c-1)\), gdzie \(r\) to liczba wierszy w tablicy dwudzielczej (liczba klas jednej zmiennej), a \(c\) to liczba kolumn (liczba klas drugiej zmiennej).
18.7 Obszar odrzucenia
We wszystkich wymienionych w tym rozdziale testach chi-kwadrat obszar odrzucenia jest prawostronny, tzn. odrzucamy hipotezę zerową, jeżeli statystyka testowa przekroczy wartość krytyczną.
Uwaga! W przypadku testu chi-kwadrat nie posługujemy się w stosunku do hipotezy alternatywnej sformułowaniami „lewostronna”, „prawostronna” czy „obustronna” (14.6) – hipoteza alternatywna ma raczej charakter „wielostronny”.
18.8 Testy chi-kwadrat i testy proporcji
Można zauważyć, że testy chi-kwadrat zgodności i jednorodności stanowią rozszerzenie testów dla proporcji. Mogą objąć więcej niż dwie klasy lub (w przypadku testów jednorodności) więcej niż dwie populacje.
W przypadku testów zgodności rozszerzenie polega na tym, że test dla 1 proporcji ogranicza nas do rozkładu dwupunktowego (rozkładu, w którym są tylko dwie klasy), natomiast test zgodności można zastosować dla również dla większej liczby klas. Obustronny test dla jednej proporcji jest praktycznie równoważny testowi zgodności chi-kwadrat dla zmiennej dychotomicznej9.
W przypadku testów jednorodności rozszerzenie może polegać na tym, że badamy więcej niż 2 populacje (test dla 3, 4, 5, 6 proporcji) albo zwiększamy liczbę klas, albo jedno i drugie. Obustronny test dla dwóch proporcji jest praktycznie równoważny testowi jednorodności chi-kwadrat dla dwóch populacji i zmiennej dychotomicznej10.
18.9 Wielkość efektu w teście niezależności
Dla tabel dwudzielczych, w których przedstawia się liczebności w ramach testu niezależności, zaproponowano wiele miar wielkości efektu. Najczęściej stosowaną miarą jest V Cramera:
\[ V = \sqrt{\frac{\chi^2}{n \cdot\text{min}(c-1, r-1)}} \tag{18.2} \]
W przypadku tabel 2×2 stosuje się współczynnik fi, który co do wartości bezwzględnej jest tożsamy ze współczynnikiem V Cramera, ale może przyjmować również wartości ujemne.
18.10 Linki
Test niezależności – wizualizacja: https://college.cengage.com/nextbook/statistics/utts_13540/student/html/simulation15_2.html
Test chi-kwadrat – aplikacja webowa: https://istats.shinyapps.io/ChiSquaredTest/
Test niezależności chi-kwadrat (Pogotowie statystyczne): https://pogotowiestatystyczne.pl/aploud/2023/04/2023-12-Chi-kwadrat-niezaleznosci.pdf
18.11 Szablony
Arkusze kalkulacyjne
Test chi-kwadrat — arkusz Google
Test chi-kwadrat — szablon w Excelu
Kalkulator rozkładu chi-kwadrat — arkusz Google
Kod w R
# Test niezależności/jednorodności chi-kwadrat
# Macierz z danymi (wektor wejściowy)
m <- c(
21, 14,
3, 10
)
# Liczba wierszy w macierzy
nrow <- 2
# Poziom istotności
alpha <- 0.05
# Przekształcenie wektora w macierz
m <- matrix(data=m, nrow=nrow, byrow=TRUE)
# Test chi-kwadrat bez poprawki Yatesa
test_chi <- chisq.test(m, correct=FALSE)
# Test chi-kwadrat z poprawką Yatesa w przypadku tabel 2x2
test_chi_corrected <- chisq.test(m)
# Test G
test_g <- AMR::g.test(m)
# Dokładny test Fishera
exact_fisher<-fisher.test(m)
print(c('Liczba stopni swobody' = test_chi$parameter,
'Wartość krytyczna' = qchisq(1-alpha, test_chi$parameter),
'Statystyka chi^2' = unname(test_chi$statistic),
'Wartość p (test chi-kwadrat)' = test_chi$p.value,
'V Cramera' = unname(sqrt(test_chi$statistic/sum(m)/min(dim(m)-1))),
'Współczynnik fi (dla tabel 2x2)' = if(all(dim(m)==2)) {psych::phi(m, digits=10)},
'Statystyka chi^2 z poprawką Yatesa' = unname(test_chi_corrected$statistic),
'Wartość p (test chi^2 z poprawką Yatesa)' = test_chi_corrected$p.value,
'Statystyka G' = unname(test_g$statistic),
'Wartość p (test G)' = test_g$p.value,
'Wartość p (test dokładny Fishera)' = exact_fisher$p.value
))
## Liczba stopni swobody.df Wartość krytyczna
## 1.00000000 3.84145882
## Statystyka chi^2 Wartość p (test chi-kwadrat)
## 5.16923077 0.02299039
## V Cramera Współczynnik fi (dla tabel 2x2)
## 0.32816506 0.32816506
## Statystyka chi^2 z poprawką Yatesa Wartość p (test chi^2 z poprawką Yatesa)
## 3.79780220 0.05131990
## Statystyka G Wartość p (test G)
## 5.38600494 0.02029889
## Wartość p (test dokładny Fishera)
## 0.04899141
# Test zgodności chi-kwadrat
# Liczebności rzeczywiste:
observed <- c(70, 10, 20)
# Liczebności oczekiwane:
expected <- c(80, 10, 10)
# Ewentualna korekta liczebności oczekiwanych, żeby ich suma była na pewno równa sumie rzeczywistych:
expected <- expected / sum(expected) * sum(observed)
# Poziom istotności
alpha <- 0.05
test_chi <- chisq.test(x = observed, p = expected, rescale.p = TRUE)
test_g <- AMR::g.test(x = observed, p = expected, rescale.p = TRUE)
print(c('Liczba stopni swobody' = test_chi$parameter,
'Wartość krytyczna' = qchisq(1-alpha, test_chi$parameter),
'Statystyka chi^2' = unname(test_chi$statistic),
'Wartość p (test chi-kwadrat)' = test_chi$p.value,
'Statystyka G' = unname(test_g$statistic),
'Wartość p (test G)' = test_g$p.value
))
## Liczba stopni swobody.df Wartość krytyczna
## 2.000000000 5.991464547
## Statystyka chi^2 Wartość p (test chi-kwadrat)
## 11.250000000 0.003606563
## Statystyka G Wartość p (test G)
## 9.031492255 0.010935443
Kod w Pythonie
# Test niezależności/jednorodności chi-kwadrat
import numpy as np
import scipy.stats as stats
from scipy.stats import chi2
from statsmodels.stats.contingency_tables import Table2x2
# Dane (macierz):
m = np.array([
[21, 14],
[3, 10]
])
alpha = 0.05
# Test chi-kwadrat bez poprawki Yatesa:
test_chi = stats.chi2_contingency(m, correction=False)
# Test chi-kwadrat z poprawką Yatesa:
test_chi_corrected = stats.chi2_contingency(m)
# Test G:
g, p, dof, expected = stats.chi2_contingency(m, lambda_="log-likelihood")
# Dokładny test Fishera:
exact_fisher = stats.fisher_exact(m)
# V Cramera:
cramers_v = np.sqrt(test_chi[0] / m.sum() / min(m.shape[0]-1, m.shape[1]-1))
# Współczynnik fi dla tabeli 2x2:
phi_coefficient = None
if m.shape == (2, 2):
phi_coefficient = cramers_v*np.sign(np.diagonal(m).prod()-np.diagonal(np.fliplr(m)).prod())
# Wyniki
results = {
'Liczba stopni swobody': test_chi[2],
'Wartość krytyczna': chi2.ppf(1-alpha, test_chi[2]),
'Statystyka chi-kwadrat': test_chi[0],
'p-value (test chi-kwadrat)': test_chi[1],
"V Cramera": cramers_v,
'Współczynnik fi (dla tabeli 2x2)': phi_coefficient,
'Statystyka chi-kwadrat z poprawką Yatesa': test_chi_corrected[0],
'p-value (test chi-kwadrat z poprawką Yatesa)': test_chi_corrected[1],
'Statystyka G': g,
'p-value (test G)': p,
'p-value (dokładny test Fishera)': exact_fisher[1]
}
for key, value in results.items():
print(f"{key}: {value}")
## Liczba stopni swobody: 1
## Wartość krytyczna: 3.841458820694124
## Statystyka chi-kwadrat: 5.169230769230769
## p-value (test chi-kwadrat): 0.022990394092464842
## V Cramera: 0.3281650616569468
## Współczynnik fi (dla tabeli 2x2): 0.3281650616569468
## Statystyka chi-kwadrat z poprawką Yatesa: 3.7978021978021976
## p-value (test chi-kwadrat z poprawką Yatesa): 0.05131990358807137
## Statystyka G: 3.9106978537750194
## p-value (test G): 0.04797967015430134
## p-value (dokładny test Fishera): 0.048991413058947844
# Test zgodności chi-kwadrat
from scipy.stats import chisquare, chi2
import numpy as np
# Liczebności rzeczywiste:
observed = np.array([70, 10, 20])
# Liczebności oczekiwane:
expected = np.array([80, 10, 10])
# Ewentualna korekta liczebności oczekiwanych, żeby ich suma była na pewno równa sumie rzeczywistych:
expected = expected / expected.sum() * observed.sum()
# Test chi-kwadrat:
chi_stat, chi_p = chisquare(f_obs=observed, f_exp=expected)
# Liczba stopni swobody:
df = len(observed) - 1
# Poziom istotności:
alpha = 0.05
# Wartość krytyczna:
critical_value = chi2.ppf(1 - alpha, df)
# Test G:
from scipy.stats import power_divergence
g_stat, g_p = power_divergence(f_obs=observed, f_exp=expected, lambda_="log-likelihood")
# Wyniki
results = {
'Liczba stopni swobody': df,
'Wartość krytyczna': critical_value,
'Statystyka chi^2': chi_stat,
'Wartość p (test chi-kwadrat)': chi_p,
'Statystyka G': g_stat,
'Wartość p (test G)': g_p
}
for key, value in results.items():
print(f"{key}: {value}")
## Liczba stopni swobody: 2
## Wartość krytyczna: 5.991464547107979
## Statystyka chi^2: 11.25
## Wartość p (test chi-kwadrat): 0.0036065631360157305
## Statystyka G: 9.031492254964643
## Wartość p (test G): 0.010935442847719828
18.12 Zadania
Zadanie 18.1 Wylosowano próbę klientów bankowych i spytano o dochody oraz o produkt bankowy darzony największym zainteresowaniem. Uzyskano następujące wyniki:
Dochód | Kredyty | Lokaty | Inwestycje | Suma |
---|---|---|---|---|
Niski | 34 | 18 | 10 | 62 |
Średni | 19 | 30 | 21 | 70 |
Wysoki | 20 | 18 | 31 | 69 |
Suma | 73 | 66 | 62 | 201 |
Czy rodzaj zainteresowania ofertą produktową banku jest niezależny od poziomu dochodów?
Zadanie 18.2 (Aczel and Sounderpandian 2018) Pewne studium opisuje analizę 35 kluczowych kategorii produktów. W momencie przeprowadzania tych badań 72,9% sprzedawanych artykułów było produktami marki narodowej, 23% produktami marek prywatnych, a 4,1% produktami no name. Przypuśćmy, że chcemy sprawdzić, czy ten podział jest wciąż aktualny na dzisiejszym rynku. Gromadzimy losową próbę 1000 produktów z 35 analizowanych kategorii i stwierdzamy, że 610 artykułów jest produktami marek narodowych, 290 produktami marek prywatnych, a 100 jest produktami no name. Przeprowadź test i sformułuj wnioski.
Zadanie 18.3 Wykonano 200 rzutów zwykłą kostką do gry. Otrzymano 38 razy jedynkę, 35 razy dwójkę, 35 razy trójkę, 27 razy czwórkę, 31 razy piątkę i 34 razy szóstkę. Za pomocą testu chi-kwadrat zweryfikuj hipotezę, że kostka jest "uczciwa", tzn. dobrze wyważona.
Zadanie 18.4 Rozkład Benforda to rozkład prawdopodobieństwa występowania określonej pierwszej cyfry w wielu zbiorach danych empirycznych.
Według prawa Benforda jedynka jako pierwsza cyfra występuje w \(\log_{10}(1+1/1) \approx 30{,}1\%\) przypadków, dwójka jako pierwsza cyfra w \(\log_{10}(1+1/2) \approx 17{,}6\%\) przypadków, trójka w \(\log_{10}(1+1/3) \approx 12{,}5\%\) itd.
Należy sprawdzić, czy rozkład pierwszych cyfr w danych o rocznym wynagrodzeniu w funtach brytyjskich piłkarzy w poszczególnych ligach (w Bundeslidze, La Liga, Ligue 1, Premier League i Serie A, dla każdej z tych lig osobno) jest zgodny z rozkładem Benforda.
Dane: https://drive.google.com/file/d/1OPDlBv0yR-aUwYGYcnDGAffFhK2iUvD5/view?usp=share_link
Dane zostały zebrane przez Edda Webstera
Zadanie 18.5 (Aczel and Sounderpandian 2018) Istnieje przekonanie, że zwroty z pewnej inwestycji mają rozkład normalny z wartością średnią 11% (annualizowana stopa) i odchyleniem standardowym 2%. Firma brokerska chce przetestować hipotezę zerową, że stwierdzenie to jest prawdziwe, i zebrała następujące dane o zwrotach w % (zakłada się, że jest to próba losowa): 8,0; 9,0; 9,5; 9,5; 8,6; 13,0; 14,5; 12,0; 12,4; 19,0; 9,0; 10,0; 10,0; 11,7; 15,0; 10,1; 12,7; 17,0; 8,0; 9,9; 11,0; 12,5; 12,8; 10,6; 8,8; 9,4; 10,0; 12,3; 12,9; 7,0. Przeprowadź analizę z wykorzystaniem testu chi-kwadrat i sześciu przedziałów, oraz sformułuj wniosek.
Zadanie 18.6 (Aczel and Sounderpandian 2018) Wykorzystując dane z poprzedniego zadania, przeprowadź test hipotezy zerowej, że zwroty z inwestycji mają rozkład normalny, ale z nieznaną wartością średnią i nieznanym odchyleniem standardowym. Przetestuj jedynie ważność założenia o rozkładzie normalnym. Czym różni się ten test od testu z poprzedniego zadania?
Zadanie 18.7 (Aczel and Sounderpandian 2018) W miarę, jak rynki stają się coraz bardziej międzynarodowe, wiele firm inwestuje w badania mające określić maksymalny możliwy zakres sprzedaży na rynkach zagranicznych. Amerykański producent ekspresów do kawy chce sprawdzić, czy jego udziały w rynku i udziały dwóch jego konkurentów są mniej więcej takie same w trzech krajach europejskich, do których wszystkie trzy firmy eksportują swoje wyroby. Rezultaty badania rynku zebrano w poniższej tablicy. Dane pochodzą z losowych prób 150 konsumentów w każdym z krajów.
Francja | Anglia | Hiszpania | Suma | |
---|---|---|---|---|
Firma | 55 | 38 | 24 | 117 |
Konkurent 1 | 28 | 30 | 21 | 79 |
Konkurent 2 | 20 | 18 | 31 | 69 |
Reszta | 47 | 64 | 74 | 185 |
Suma | 150 | 150 | 150 | 450 |
Zadanie 18.8 Za pomocą testu chi-kwadrat i danych z zadania 15.1 przetestuj hipotezę zerową mówiącą, że rozkład kierunku przechylania głowy przez całującą się parę ma parametry \(p_R = 0{,}5\) i \(p_L = 0{,}5\) (\(p_R\) to prawdopodobieństwo przechylenia głowy w prawo, \(p_L\) to prawdopodobieństwo przechylenia głowy w lewo). Jakiemu testowi 1 proporcji odpowiada przeprowadzony test? Porównaj wartości p-value.
Zadanie 18.9 W 1972 r. 48 menedżerów bankowych otrzymało te same akta osobowe. Każdego z nich poproszono o ocenę, czy dana osoba powinna zostać awansowana na stanowisko kierownika oddziału, czy też powinni zostać przesłuchani inni kandydaci. Akta były identyczne, z tym wyjątkiem, że w połowie przypadków poinformowano, że rozważana osoba jest kobietą, a w połowie, że mężczyzną. Spośród 24 przypadków „mężczyzn”, awans zaproponowano w 21 przypadkach, spośród 24 przypadków „żeńskich” do awansu zarekomendowano 14 (Rosen and Jerdee 1974). Czy to przekonujący dowód na to, że menedżerowie dyskryminowali aplikujące kobiety? Czy też różnicę w liczbach zalecanych do awansu można z wystarczającą pewnością przypisać przypadkowi? Przedstaw rozwiązanie za pomocą testu chi-kwadrat i porównaj otrzymane wyniki z uzyskanymi za pomocą testu 2 proporcji 17.2.
Zadanie 18.10 Powróć do danych z zadania 15.5. Przetestuj, czy można odrzucić hipotezę, że rozkład zgubionych kluczy w populacji (= w procesie generującym dane) jest równomierny (jednostajny dyskretny).
Zadanie 18.11
W poniższej tabeli zamieszczono dane dotyczące trafień południowej części Londynu przez bomby lotnicze w czasie II wojny światowej. Cały obszar podzielono na 576 kwadratowych obszarów o polu 1/4 km2. Dane o trafieniach zebrano w poniższej tabeli (Clarke 1946). Symbol nk oznacza liczbę kwadratów, na które spadło dokładnie k bomb.k | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
nₖ | 229 | 211 | 93 | 35 | 7 | 0 | 0 | 1 |
Czy na podstawie przedstawionych danych można odrzucić hipotezę, że bombardowanie Londynu było losowe i z założenia nie koncentrowało się na żadnym konkretnym obszarze?
Literatura
Jeżeli nasz rozkład jest dwupunktowy (np. tak/nie, choroba/brak) i porównujemy go z teoretycznym, możemy zastosować test dla 1 proporcji (15) lub test zgodności (można porównać zadania 15.1 i 18.8).↩︎
Jeżeli porównujemy dwie proporcje, możemy zastosować test dla 2 proporcji (17) lub test jednorodności chi-kwadrat – por. zadania 17.2 i 18.9.↩︎