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!
#kropeczki muszą się mieścić w szarym polu 

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

Jak widać, statystyka testowa wynosi 4,06, p<<alfa, stąd mamy prawo odrzucić hipotezę zerową i stwierdzić, że nowy lek nasenny istotnie wydłuża czas snu.

Przeprowadźmy to samo badanie za pomocą pakietu ggstatsplot. Funkcja “ggwithinstats” służy do wykonywania testów dla prób zależnych, natomiast funkcja “ggbetweenstats” do wykonywania testów dla prób niezależnych.

#bardzo ważne! po - przed:
sleep$group <- reorder(sleep$group, new.order=c(2, 1))

ggwithinstats(
  data=sleep,
  x=group, #kategoria - czy lek (2) czy placebo (1)
  y=extra,  #ilościowa - extra czas snu
  type="p",
  k=5  #5 Liczba cyfr po przecinku
)

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)

# Hipoteza zerowa: normalność rozkładu (najmocniejszym testem jest test Shapiro-Wilka):
shapiro.test(rating)
## 
##  Shapiro-Wilk normality test
## 
## data:  rating
## W = 0.98684, p-value = 8.506e-11
movies_long %>%
  filter(genre %in% c("Drama", "RomCom")) %>%
  ggbetweenstats(
    y=rating,
    x=genre,
    type="np"
    
  )

  1. Sprawdźmy teraz, czy wariancja jest jednorodna:
var(rating)
## [1] 1.546309

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

Hipotezy: H0: Rating nie jest istotnie różny dla dramatów i komedii romantycznych.

Ha: Rating jest istotnie różny dla dramatów i komedii romantycznych.

pvalue << alfa, a więc mamy podstawy do odrzucenia hipotezy zerowej.

Rating jest statystycznie istotny dla dramatów i komedii romantycznych

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:

Hipotezy: H0: % osób posiadający złą historię kredytową nie różni się istotnie od osób wnioskujących o kredyt z innego powodu

Ha: % osób posiadający złą historię kredytową istotnie różni się od osób wnioskujących o kredyt z innego powodu

Wnioski: pvalue << alfa, a więc mamy podstawy do odrzucenia hipotezy zerowej.

% osób posiadający złą historię kredytową różni się istotnie od osób wnioskujących o kredyt z innego powodu.