Wnioskowanie statystyczne
Testy na 2 próby
t-test dla 2 prób niezależnych
Jesteś analitykiem rynku i chcesz przeprowadzić ankietową analizę satysfakcji klientów 2 różnych wypożyczalni samochodów. Czy na podstawie przeprowadzonego przez Ciebie badania (zaledwie 20 obserwacji) można stwierdzić, że poziom satysfakcji Panek i Traficar różni się znacząco?
trafficar <- c(18,21,16,22,19,24,17,21,23,18,14,16,16,19,18,20,12,22,15,17)
panek <- c(22, 25, 17, 24, 16, 29, 20, 23, 19,20,15,15,18,26,18,24,18,25,19,16)
mean(trafficar)## [1] 18.4
mean(panek)## [1] 20.45
Test i wykresy normalności:
ggqqplot(panek)ggqqplot(trafficar)# Hipoteza zerowa: normalność rozkładu (najmocniejszym testem jest test Shapiro-Wilka):
shapiro.test(panek)##
## Shapiro-Wilk normality test
##
## data: panek
## W = 0.94235, p-value = 0.2654
shapiro.test(trafficar)##
## Shapiro-Wilk normality test
##
## data: trafficar
## W = 0.98197, p-value = 0.9569
# w obu przypadkach p>>alfa - czyli nie możemy odrzucić hipotezy o normalności rozkładów! a więc możemy w pełni wykorzystać test t-Studenta, tylko musimy uważać na różnice w wariancjach!I wykonujemy test ;-) jeśli założenia są spełnione, wariancja, normalność….
Najpierw sprawdzam jednorodność wariancji:
# Krok pierwszy - która wariancja jest wyższa? Sprawdź:
var(trafficar)## [1] 9.936842
var(panek) # - wyższa wariancja niż trafficar## [1] 16.47105
# Krok drugi - w teście F podajemy kolejno zmienną o wyższej, a następnie niższej z dwóch wariancji - jest to test ilorazu wariancji (wyższa przez niższą) - jednostronny, prawostronny.
var.test(panek, trafficar, alternative="greater") # brak problemu z jednorodnością wariancji##
## F test to compare two variances
##
## data: panek and trafficar
## F = 1.6576, num df = 19, denom df = 19, p-value = 0.1398
## alternative hypothesis: true ratio of variances is greater than 1
## 95 percent confidence interval:
## 0.764475 Inf
## sample estimates:
## ratio of variances
## 1.657574
Już wiem jakiego testu użyć :-) Będzie to tutaj test t-Studenta z jednorodną wariancją:
# możemy wykonać test za pomocą zwykłej funkcji t.test:
t.test(trafficar, panek, mu=0, paired=FALSE, var.equal=TRUE)##
## Two Sample t-test
##
## data: trafficar and panek
## t = -1.784, df = 38, p-value = 0.08241
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
## -4.3761996 0.2761996
## sample estimates:
## mean of x mean of y
## 18.40 20.45
dane <- data.frame(
firma = as.factor(rep(c("traficar", "panek"), each = 20)),
rating = c(trafficar, panek)
)
# lub zwizualizować wyniki na wykresie wiolinowym:
ggbetweenstats(
data=dane,
x=firma, #2 grupy
y=rating,
var.equal = TRUE,
k=3 #3 Liczba cyfr po przecinku
)W tym przypadku mogliśmy zastosować test t dla prób niezależnych o jednorodnej - wspólnej wariancji.
Na poziomie istotności 0,05 nie mamy podstaw do odrzucenia hipotezy, że oceny klientów firm Panek i Trafficar są równe (p=0,082).
t-test dla 2 prób zależnych (paired)
Przeprowadzono badanie, którego celem było przetestowanie nowego leku nasennego. Do udziału w nim zaproszono dziesięciu studentów. Oceń, czy dodatkowy czas snu (“extra”) jest istotnie dłuższy, gdy studenci otrzymali lek, niż gdy studenci otrzymali placebo.
Dane znajdują się w zbiorze “sen”. Sprawdźmy normalność czasu snu studentów. Używamy do tego wykresu normalności kwantylowej oraz bardzo silnego testu normalności Shapiro-Wilka.
data(sleep)
attach(sleep)
ggqqplot(extra)shapiro.test(extra)##
## Shapiro-Wilk normality test
##
## data: extra
## W = 0.94607, p-value = 0.3114
Zarówno wykres normalności jak i test Shapiro-Wilka (p>>alfa) wskazują, że rozkład extra czasu snu jest normalny.
Z tego powodu do porównania użyjemy testu t-Studenta dla prób zależnych (są to ci sami studenci badani na placebo i na leku).
Hipoteza zerowa: dodatkowy czas snu (“extra”) nie jest istotnie różny, gdy studenci otrzymywali lek oraz gdy studenci otrzymywali placebo.
Hipoteza alternatywna: dodatkowy czas snu (“extra”) jest istotnie dłuższy, gdy studenci otrzymali lek, niż gdy studenci otrzymali placebo.
t.test(extra[group==2],extra[group==1],
paired=TRUE,alternative="greater")##
## Paired t-test
##
## data: extra[group == 2] and extra[group == 1]
## t = 4.0621, df = 9, p-value = 0.001416
## alternative hypothesis: true mean difference is greater than 0
## 95 percent confidence interval:
## 0.8669947 Inf
## sample estimates:
## mean difference
## 1.58
Challenge 1.
Czy to prawda, że kwoty kredytów (amount) różnią się istotnie ze względu na ryzyko kredytowe (credit_risk)?
UWAGA: jeśli założenie o normalności rozkładu nie jest spełnione - musimy zastosować nieparametryczny zamiennik testu t (test rang Wilcoxona; type=“np”). Proszę zajrzeć do notatek z wykładu i przeczytać na czym polegają te testy.
data(GermanCredit)
attach(GermanCredit)
ggqqplot(amount[credit_risk=="good"])ggqqplot(amount[credit_risk=="bad"])# testy normalności wg ryzyka:
GermanCredit %>%
group_by(credit_risk) %>%
shapiro_test(amount)## # A tibble: 2 × 4
## credit_risk variable statistic p
## <fct> <chr> <dbl> <dbl>
## 1 good amount 0.808 5.18e-28
## 2 bad amount 0.814 2.84e-18
ggbetweenstats(
data=GermanCredit,
x=credit_risk,
y=amount,
type="np", # dane nie są normalne więc korzystam z testu nieparametrycznego!!!
k=4 # 4 cyfry po przecinku
)Wnioski???
Challenge 2.
Do analizy wykorzystamy dane z portalu IMDB.
Zweryfikujmy hipotezę, że dramaty mają lepsze recenzje niż komedie romantyczne.
Mając 2 niezależne próby, musimy sprawdzić, czy rozkłady w obu przypadkach są normalne, a wariancja jednorodna (na tym samym poziomie), aby użyć testu t-Studenta.
- Sprawdźmy normalność oceny.
ggqqplot(rating)shapiro.test(rating[genre=="Drama"]) ##
## Shapiro-Wilk normality test
##
## data: rating[genre == "Drama"]
## W = 0.97931, p-value = 8.63e-06
shapiro.test(rating[genre=="RomCom"])##
## Shapiro-Wilk normality test
##
## data: rating[genre == "RomCom"]
## W = 0.97168, p-value = 0.0005556
- Sprawdźmy teraz, czy wariancja jest jednorodna:
var.test(rating[genre=="Drama"], rating[genre=="RomCom"])##
## F test to compare two variances
##
## data: rating[genre == "Drama"] and rating[genre == "RomCom"]
## F = 1.0102, num df = 427, denom df = 194, p-value = 0.9465
## alternative hypothesis: true ratio of variances is not equal to 1
## 95 percent confidence interval:
## 0.7898223 1.2778332
## sample estimates:
## ratio of variances
## 1.010157
Jak widać, oceny obu gatunków filmowych ….
- Wreszcie wiemy, który test jest najbardziej odpowiedni do weryfikacji naszego twierdzenia. Obliczmy statystykę testu i wartość p:
t.test(rating[genre=="Drama"],rating[genre=="RomCom"],
paired=FALSE,alternative="two.sided")##
## Welch Two Sample t-test
##
## data: rating[genre == "Drama"] and rating[genre == "RomCom"]
## t = 7.5389, df = 377.35, p-value = 3.56e-13
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
## 0.5149014 0.8782618
## sample estimates:
## mean of x mean of y
## 6.553505 5.856923
Możemy również wizualizować i obliczać ten test za pomocą pakietu ggstatsplot przy użyciu funkcji “???”:
movies_long %>% filter(genre %in% c("Drama", "RomCom")) %>% ggbetweenstats(y=rating, x=genre)Testy 2 proporcji
Będziemy korzystać z danych kredytowych “germancredit”.
Czy jest jakaś podstawa do twierdzenia, że % osób ze złym wynikiem kredytowym jest znacząco wyższy wśród pracowników zagranicznych?
data(GermanCredit)
attach(GermanCredit)
# test dla 2 proporcji - test Chi2 dla proporcji (contingency):
ggbarstats(
data=GermanCredit,
x=foreign_worker,
y=credit_risk,
proportion.test=TRUE,
k=5 #5 Liczba cyfr po przecinku
)# wersja podstawowa - bez wizualizacji:
tabelka<-table(foreign_worker,credit_risk) #umieszczamy dane w tabeli
prop.test(tabelka, correct = FALSE) # testujemy proporcje tabelki##
## 2-sample test for equality of proportions without continuity correction
##
## data: tabelka
## X-squared = 6.737, df = 1, p-value = 0.009443
## alternative hypothesis: two.sided
## 95 percent confidence interval:
## -0.30347582 -0.09505355
## sample estimates:
## prop 1 prop 2
## 0.6926272 0.8918919
# Uwagi dotyczące korekty ciągłości:
# W przeciwieństwie do wielu programów statystycznych, ggstatsplot nie zapewnia opcji korekty Yatesa dla statystyki chi-squared Pearsona. Wynika to z istotnych badań symulacyjnych Monte-Carlo, które sugerują, że poprawka Yatesa jest zbyt konserwatywna, nawet przy małych liczbach prób. W związku z tym zaleca się, aby nigdy nie stosować jej w praktyce (Camilli & Hopkins, 1978, 1979; Feinberg, 1980; Larntz, 1978; Thompson, 1988).Test Chi2 warunkowego zróżnicowania proporcji (bez korygowania ciągłości) wykazał, że różnice te są istotne statystycznie (p=0,009).
Stwierdzamy, że poziom ryzyka kredytowego jest istotnie różny u pracowników krajowych i zagranicznych -> wniosek: zmienna ta istotnie determinuje ryzyko - warto ją uwzględnić w modelu scoringowym.
Challenge 3.
Również na podstawie danych “germancredit”: zweryfikuj, czy jest jakaś podstawa do twierdzenia, że % osób ze złą historią kredytową (credit_history) różni się istotnie dla osób wnioskujących o kredyt z innego powodu (“purpose”).
ggpiestats(data=GermanCredit,
y=credit_history,
x=purpose
)
Wnioski:
Hipoteza zerowa: Procent osób ze złą historią kredytową (credit_history) nie różni się istotnie dla osób wnioskujących o kredyt z innego powodu (“purpose”)
Hipoteza alternatywna: Procent osób ze złą historią kredytową (credit_history) różni się istotnie dla osób wnioskujących o kredyt z innego powodu (“purpose”)
pvalue << alfa, zatem istnieją podstawy do odrzucenia hipotezy zerowej -> procent osób ze złą historią kredytową (credit_history) różni się istotnie dla osób wnioskujących o kredyt z innego powodu (“purpose”)