Statystyka i Analiza danych

Laboratorium 10 - Test $\chi^2$

Ćwiczenie 1:

Typowy rozkład wiekowy ludności w pewnym regionie jest zgodny z podanym w tabeli Typowe. Natomiast w tabeli Zaobserwowane przedstawiono rozkład wiekowy ludności z miasteczka znajdującego się w rozpatrywanym regionie. Sprawdź czy rozkład ten można uznać za zgodny z rozkładem typowym dla tego regionu.

In [1]:
kategorie <- c("<15", "15-24", "25-34", "35-44", "45-54", "55-64", "65-74", ">74")
Typowe <- c(475,304,182,190,208,170,111,72)
Zaobserwowane <- c(3016,2438,2037,2031,1253,977,585,163)

Sformuuj hipotezy zerową i alternatywną, zinterpretuj hipotezy. Przyjęty poziom istotności $\alpha = 0.01$.

In [2]:
# H0: 
# H1:
alpha <- 0.01

Oblicz liczbę stopni swobody:

In [3]:
df <- length(Zaobserwowane)-1

Oblicz tabelę wartości oczekiwanych:

In [4]:
Oczekiwane <- Typowe/sum(Typowe) * sum(Zaobserwowane)

Oblicz wartość statystyki testowej:

In [5]:
chi2 <- sum((Zaobserwowane-Oczekiwane)^2/Oczekiwane)
chi2
1172.21025814962

Wyznacz wartość krytyczną i podejmij decyzję.

In [6]:
qchisq(1 - alpha,df)
# Odrzucamy H0
18.4753069065824

Wykonaj test korzystając z funkcji chisq.test(), podając jako pierwszy argument liczebności zaobserwowane, a jako parametr p -- odpowiadające im prawdopodobieństwa założone w hipotezie zerowej

In [7]:
chisq.test(Zaobserwowane, p=Oczekiwane/sum(Oczekiwane))
	Chi-squared test for given probabilities

data:  Zaobserwowane
X-squared = 1172.2, df = 7, p-value < 2.2e-16

Czyścimy workspace:

In [8]:
rm(list = ls())

Ćwiczenie 2

Dane do tego zadania opisują wszystkie osoby (2201) na pokładzie dużego statku wycieczkowego z punktu widzenia 3 prostych atrybutów jakościowych i pewnego rodzaju, nieznanego, jakościowego atrybutu decyzyjnego (zadowolenie z wycieczki? sympatia do kapitana? Co to są za dane?). Sporządź tabelę wielodzielczą i wykres. Wykonaj test niezależności chi-kwadrat dla atrybutów: płeć i wiek, klasa i decyzja.

In [9]:
Dane <- read.csv(url("http://www.cs.put.poznan.pl/swilk/siad/11-cw2.csv"), sep=";")

Przyjmij poziom istotności 0.001:

In [10]:
alpha = 0.001

Utwórz tablicę wielodzielczą dla atrybutów wiek i płeć korzystając z funkcji table()

In [11]:
WiekPlec <- table(Dane$Age, Dane$Sex)
WiekPlec
       
        Female Male
  Adult    402 1666
  Child     45   64

Stwórz wykres tablicy korzystając z funkcji plot()

In [12]:
plot(WiekPlec)

Oblicz sumę obserwacji oraz liczebności brzegowe korzystając z funkcji margin.table() podając jako pierwszy argument tablicę wielodzielczą, jako drugi 1 dla wierszy a 2 dla kolumn

In [13]:
margin_rows <- margin.table(WiekPlec, 1)
margin_cols <- margin.table(WiekPlec, 2)
total <- sum(margin_rows)

Oblicz liczbę stopni swobody:

In [14]:
df <- (length(margin_rows)-1)*(length(margin_cols)-1)

Oblicz tablicę wartości oczekiwanych. Utwórz macierz korzystając z funkcji outer(margin_rows, margin_cols), wykonującej iloczyn zewnętrzny/Kroneckera (iloczyny wszystkich kombinacji współrzędnych wektorów)

In [15]:
E =outer(margin_rows, margin_cols) / total

Oblicz wartość statystyki testowej:

In [16]:
chi2  <- sum((WiekPlec - E)^2/E)
chi2
30.2830168382122

Podaj wartość krytyczną i podejmij decyzję odnośnie hipotezy zerowej:

In [17]:
qchisq(1 - alpha, df)
10.8275661706627

Wykonaj test korzystając z funkcji chisq.test() podając jako argument tablicę wielodzielczą

In [18]:
chisq.test(WiekPlec, correct=FALSE)
	Pearson's Chi-squared test

data:  WiekPlec
X-squared = 30.283, df = 1, p-value = 3.734e-08

Wykonaj wszystkie powyższe czynności dla atrybutów klasa i decyzja. Tablica wielodzielcza:

In [19]:
KlasaDecyzja <- table(Dane$Class, Dane$Decision)

Wykres tablicy:

In [20]:
plot(KlasaDecyzja)

Suma obserwacji oraz liczebności brzegowe:

In [21]:
margin_rows <- margin.table(KlasaDecyzja, 1)
margin_cols <- margin.table(KlasaDecyzja, 2)
total <- sum(margin_rows)

Liczba stopni swobody:

In [22]:
df <- (length(margin_rows)-1)*(length(margin_cols)-1)

Tablica wartości oczekiwanych:

In [23]:
E =outer(margin_rows, margin_cols) / total

Wartość statystyki testowej:

In [24]:
chi2  <- sum((KlasaDecyzja - E)^2/E)
chi2
203.159983593609

Wartość krytyczna i decyzja:

In [25]:
qchisq(1 - alpha, df)
# Odrzucamy H0
16.2662361962381

Test używając funkcji chisq.test():

In [26]:
chisq.test(KlasaDecyzja)
	Pearson's Chi-squared test

data:  KlasaDecyzja
X-squared = 203.16, df = 3, p-value < 2.2e-16

Czyszczenie przestrzeni roboczej:

In [27]:
rm(list = ls())

Ćwiczenie 3

In [28]:
lotto  <- read.csv("lotto.csv",sep="\t")
In [29]:
lotto
A data.frame: 49 × 2
LiczbaWystąpień
<int><int>
1102
2 96
3102
4105
5 96
6126
7108
8 94
9103
10104
11 95
12110
13135
14100
15103
16115
17116
18118
19101
20113
21 90
22 88
23106
24107
25105
26 93
27101
28110
29105
30106
31102
32118
33112
34103
35106
36100
37109
38119
39 94
40102
41110
42117
43 85
44109
45106
46 99
47 84
48 94
49 96
In [30]:
chisq.test(lotto$Wystąpień, p=rep(1/49, 49))
	Chi-squared test for given probabilities

data:  lotto$Wystąpień
X-squared = 46.282, df = 48, p-value = 0.5435