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.

  1. 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
  1. 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 ….

  1. 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”)