6.8.2. Pearsonov hi-kvadrat test normalnosti

Pearsonov hi-kvadrat test odnosi se na kvalitativni set podataka i testira da li postoji statistički značajno odstupanje distribucije realizovanih podataka od distribucije očekivanih podataka (normalnog rasporeda u ovom slučaju). Primjena hi-kvadrat testa u praksi daleko je šira od primjene testiranja normalnosti. Test statistika računa se po sljedećoj formuli:

Pχ2=i=1c(OiEi)2EiP_{\chi^2} = \sum_{i=1}^{c}\frac{(O_i - E_i)^{2}}{E_i}

gdje OiO_i predstavlja broj realizovanih vrijednosti analiziranog obilježja u ii-toj klasi, EiE_i broj očekivanih vrijednosti analiziranog obilježja u ii -toj klasi, dok cc predstavlja ukupan broj klasa u koje su grupisanje vrijednosti obilježja. Nulta hipoteza testa jeste da vrijednost test statistike prati hi-kvadrat raspored sa, u narednom primjeru, c21c - 2 - 1 stepeni slobode, tako da ukoliko je izračunata p vrijednost manja od nivoa značajnosti, u tom slučaju možemo odbaciti nultu hipotezu.

Na osnovu test statistike i generalnog opisa testa, dolazi se do zaključka da numeričko obilježje treba prvo transformisati, pa tek onda implementirati test. Konkretno za primjenu testiranja normalnosti neophodno je odrediti broj klasa, realizovani i očekivani broj opservacija unutar klasa pod pretpostavkom da očekivane vrijednosti prate normalan raspored. Naredni primjer prikazuje jedan od načina određivanja ova dva parametra i primjenu Pearsonovog testa normalnosti.

Primjer 54: Za podatke iz Primjera 53, testirati pretpostavku da vrijednosti analiziranih obilježja prate normalni raspored primjenom Pearson hi-kvadrat testa za nivo značajnosti od 5%.

> alpha <- 0.05
> #korisnicka funkcija
> p.n.test <- function(x) {
+ #ukupan broj opservacija
+ n <- length(x)
+ #predlozeni broj klasa
+ n.classes <- ceiling(2 * (n^(2 / 5)))
+ #realizovan broj opservacija po klasama
+ num <- floor(1 + n.classes * pnorm(x, mean(x), sd(x)))
+ count <- tabulate(num, n.classes)
+ #ocekivani broj opservacija po klasama
+ prob <- rep(1 / n.classes, n.classes)
+ xpec <- n * prob
+ #test statistika
+ P <- sum(((count - xpec)^2) / xpec)
+ p.val <- pchisq(P, n.classes - 2 - 1, lower.tail = FALSE)
+ res <- data.frame(test.stat = P, p.val = p.val)
+ return(res)
+ }
> p.pd <- p.n.test(x = pd$PD)
> p.pd
  test.stat        p.val
1        48 1.427672e-06
> p.pd$p.val < alpha
[1] TRUE
> p.lgdr <- p.n.test(x = lgd$LGDR)
> p.lgdr
  test.stat     p.val
1      18.6 0.6698811
> p.lgdr$p.val < alpha
[1] FALSE
> p.lgde <- p.n.test(x = lgd$LGDE)
> p.lgde
  test.stat    p.val
1        17 0.763362
> p.lgde$p.val < alpha
[1] FALSE
> #r funkcija - paket nortest
> #ukoliko paket nije instaliran pokrenuti prethodno:
> #install.packages("nortest")
> library(nortest)
> pearson.test(pd$PD)

        Pearson chi-square normality test

data:  pd$PD
P = 48, p-value = 1.428e-06

> pearson.test(lgd$LGDR)

        Pearson chi-square normality test

data:  lgd$LGDR
P = 18.6, p-value = 0.6699

> pearson.test(lgd$LGDE)

        Pearson chi-square normality test

data:  lgd$LGDE
P = 17, p-value = 0.7634

Last updated

Was this helpful?