library(ggplot2)
library(tidyr)
library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union

1 Testy parametryczne i testy nieparametryczne

Testy parametryczne wymagają spełnienia określonych założeń:

  • zmienne mierzalne
  • zmienne mają rozkład normalny
  • równość wariancji

Testy nieparametryczne:

  • stosujemy gdy powyższe założenia nie są spełnione, gdy mamy dane jakościowe lub uporządkowane
  • stosujemy dla prób o małej liczebności (przyjmuje się do 100).

2 Testy parametryczne (testy t-Studenta) - testowanie istotności różnic średniej

  • Służą do wnioskowania o wartości średniej w populacji, z której pobraliśmy próbę losową.
  • Służą do porównania ze sobą dwóch grup
  • Można wyróżnić trzy rodzaje testów t-Studenta:
    • dla prób niezależnych
    • dla prób zależnych
    • dla jednej próby

2.1 Założenia testów t-Studenta

  • Rozkład danych obserwacji jest zbliżony do rozkładu normalnego
  • Badane grupy mają zbliżoną liczebność
  • Wartości w badanych grupach wykazują podobną wariancję (homogeniczność wariancji)
  • Zmienne powinny być ilościowe

2.2 Test t dla prób niezależnych

Stosowany gdy próby są od siebie niezależne: wyniki pomiaru jednej grupy nie zależą od wyników pomiaru drugiej grupy

PRZYKŁAD: Czy są istotne różnice średniej temperatury w Poznaniu i Suwałkach?

dane <- readRDS("dane/temp.rds")
head(dane)
##         data    name  daily_temp
## 1 2014-01-01  POZNAN  0.38800000
## 2 2014-01-01 SUWALKI -0.49583333
## 3 2014-01-02  POZNAN  0.04473684
## 4 2014-01-02 SUWALKI  0.37500000
## 5 2014-01-03  POZNAN  4.29166667
## 6 2014-01-03 SUWALKI  1.27916667
Porównanie temperatur
ggplot(dane, aes(name, daily_temp)) + geom_boxplot() + 
  ylab('Średnia temperatura dobowa (st. C)') + xlab("Miasto")

Średnia temperatura w Poznaniu i Suwałkach

by_name <- group_by(dane, name)
smr <- summarise(by_name, srednia = mean(daily_temp))
smr
## # A tibble: 2 x 2
##   name    srednia
##   <fct>     <dbl>
## 1 POZNAN    10.4 
## 2 SUWALKI    7.82

Różnica w średniej temperaturze Poznania i Suwałk

smr[1,2] - smr[2,2]
##    srednia
## 1 2.553459

Testowanie istotności różnic w średniej

  • Hipoteza zerowa: \(H_{0}: \mu_{1} = \mu_{2}\) (prawdziwa różnica w średnich jest równa 0)

  • Hipoteza alternatywna:

    • dwustronna: \(H_{A}: \mu_{1} \neq \mu_{2}\) (Prawdziwa róznica w średnich nie jest równa 0)
    • jednostronna: \(H_{A}: \mu_{1} < \mu_{2}\) lub \(H_{A}: \mu_{1} > \mu_{2}\)
Hipoteza alternatywna dwustronna
t.test(daily_temp~name, data = dane)
## 
##  Welch Two Sample t-test
## 
## data:  daily_temp by name
## t = 4.0671, df = 710.95, p-value = 5.293e-05
## alternative hypothesis: true difference in means between group POZNAN and group SUWALKI is not equal to 0
## 95 percent confidence interval:
##  1.320831 3.786087
## sample estimates:
##  mean in group POZNAN mean in group SUWALKI 
##             10.375648              7.822189
Interpretacja:
  • Poziom prawdopodobieństwa p (p-wartość) - jest to wyliczany w pakietach komputerowych najmniejszy poziom istotności, przy której wyliczona wartość testującej statystyki doprowadza do odrzucenia hipotezy zerowej.

  • Jeśli p-wartość jest poniżej założonego poziomu istotności (np. 0.05) tzn. że hipotezę zerową możemy odrzucić na rzecz hipotezy alternatywnej.

  • W powyższym przykładzie:

    • Hipoteza zerowa: prawdziwa różnica w średnich jest równa 0
    • Hipoteza alternatywna: Prawdziwa róznica w średnich nie jest równa 0.
    • P-wartość - 5.293e-05 (czyli 0.00005293)
    • P-wartość jest mniejsza od 0.05 a zatem możemy odrzucić hipotezę zerową (różnica w średnich równa 0) na rzecz hipotezy alternatywnej (różnica w średnich różna od 0)

Pytanie: Czy średnia temperatura powietrza w Poznaniu i Suwałkach różni się istotnie?

Odpowiedź: Średnia temperatura w Poznaniu oraz Suwałkach różni się istotnie.

Hipoteza alernatywna jednostronna
  • alternative = “greater”
    • x ma większą średnią niż y (w powyższym przypadku średnia temperatura w Poznaniu jest wyższa od średniej temperaury w Suwałkach)
  • alternative = “less”
    • x ma mniejszą średnią niż y (w powyższym przypadku średnia temperatura w Poznaniu jest niższa od średniej temperaury w Suwałkach)
t.test(daily_temp~name, data = dane, alternative = 'greater')
## 
##  Welch Two Sample t-test
## 
## data:  daily_temp by name
## t = 4.0671, df = 710.95, p-value = 2.646e-05
## alternative hypothesis: true difference in means between group POZNAN and group SUWALKI is greater than 0
## 95 percent confidence interval:
##  1.519419      Inf
## sample estimates:
##  mean in group POZNAN mean in group SUWALKI 
##             10.375648              7.822189
t.test(daily_temp~name, data = dane, alternative = 'less')
## 
##  Welch Two Sample t-test
## 
## data:  daily_temp by name
## t = 4.0671, df = 710.95, p-value = 1
## alternative hypothesis: true difference in means between group POZNAN and group SUWALKI is less than 0
## 95 percent confidence interval:
##    -Inf 3.5875
## sample estimates:
##  mean in group POZNAN mean in group SUWALKI 
##             10.375648              7.822189

W przypadku hipotezy alternatywnej (alternative = “less”) otrzymaliśmy wynik nieistotny statystycznie (p-value = 1).

Dane cardata2.csv zawierają wyniki pomiarów zużycia paliwa (w milach per galon, zmienna mpg) dla aut z Europy oraz USA (zmienna origin). Czy średnia ilość mil przejechanych na jednym galonie paliwa różni się istotnie statystycznie między autami z Europy i USA?

2.3 Test t dla prób zależnych

  • Test ten stosuje się, gdy mamy dwie serie wyników dla tych samych elementów (próby powiązane) w różnym czasie (np. wyniki badań przed i po podaniu leku)

    • Np. Pewnej grupie pacjentów leczonych na nadciśnienie podawano odpowiedni lek. Ciśnienie krwi mierzono przed podaniem leku oraz po podaniu leku.
  • Stosowany do określenia wielkości zmian między pomiarami.

PRZYKŁAD: Czy średnia temperatura wody Parsęty w roku 2007 oraz 2009 różni się istotnie?

twp <- readRDS("dane/twp.rds")
head(twp)
##       data  rok TwP
## 1 1/1/2007 2007 5.4
## 2 1/2/2007 2007 5.6
## 3 1/3/2007 2007 5.4
## 4 1/4/2007 2007 5.7
## 5 1/5/2007 2007 6.3
## 6 1/6/2007 2007 6.3

Różnice temperatury wody Parsęty między 2007 i 2009 rokiem.

ggplot(twp, aes(as.factor(rok), TwP)) + geom_boxplot() 

s <- aggregate(TwP~rok, data=twp, FUN="mean", na.rm=TRUE)
s
##    rok      TwP
## 1 2007 8.551507
## 2 2009 7.951589
s$TwP[1]-s$TwP[2]
## [1] 0.5999178

Testowanie istotności różnic w średniej

t.test(TwP~rok, data = twp, paired=TRUE)
## 
##  Paired t-test
## 
## data:  TwP by rok
## t = 5.0176, df = 364, p-value = 8.199e-07
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
##  0.3647975 0.8350381
## sample estimates:
## mean of the differences 
##               0.5999178
Interpretacja

Jeśli wartość p jest poniżej założonego poziomu istotności tzn. że istnieją istotne różnice w średnich w dwóch grupach.

Grupie 20 pacjentów zmierzono ciśnienie tętnicze krwi, przed i po wysiłku. przed = c(63, 77 ,64 ,96 ,66 ,97 ,72 ,66 ,88 ,91 ,68 ,92 ,76 ,80 ,68 ,86 ,70 ,88 ,70 ,65) po = c(127, 153, 127, 156, 126, 265, 138, 149, 159, 142, 112, 141, 147, 137, 116, 145, 121, 154, 143, 142) Pytanie 1. Czy ciśnienie krwi jest istotnie statystycznie wyższe po wysiłku? Pytanie 2. Czy ciśnienie tętnicze krwi przed i po wysiłku różni się istotnie.

3 Testy nieparametryczne

  • Testy dla dwóch niezaleźnych próbek (odpowiednik testu t-Studenta dla prób niepowiązanych):
    • Test U Manna_Whitneya
  • Test dla dwóch zależnych próbek (nieparametryczny odpowiednik testu t-Studenta dla prób powiązanych)
    • Test kolejności par Wilcoxona

3.1 Test U Manna-Whitneya - test dla dwóch niezależnych próbek

  • jest nieparametryczną alternatywą dla testu t-Studenta dla prób niezależnych
  • weryfikuje hipotezę zerową, że dwie losowo wybrane próby pochodzą z populacji o równych medianach.
  • test zakłada, że zmienna została zmierzona przynajmniej na skali porządkowej.
#otworzyć dane cardata 
cardata <- read.csv("dane/cardata2.csv", header = TRUE)

names(cardata)
##  [1] "mpg"        "cylinders"  "displace"   "horsepower" "accel"     
##  [6] "year"       "weight"     "origin"     "make"       "model"     
## [11] "price"

Zmienne:

  • mpg – ilość mil jaką można przejechać na jednym galonie paliwa.
  • cylinders – ilość cylindrów w silniku
  • displace
  • horsepower – moc silnika w koniach mechanicznych.
  • Accel - przyspieszenie
  • Year – rok produkcji
  • Weight – waga samochodu
  • Origin – pochodzenie
  • Price - cena

Zamienić zmienną cylinders na zmienną kategoryzowaną (cylinder)

cardata$cylinder <- as.factor(cardata$cylinders)

Obliczyć statystyki opisowe względem grupy origin – pochodzenie samochodu.

aggregate(horsepower~origin, cardata, summary)
##   origin horsepower.Min. horsepower.1st Qu. horsepower.Median horsepower.Mean
## 1 Europa        48.00000           67.00000          74.00000        78.45833
## 2    USA        63.00000           84.00000          90.00000        98.32530
##   horsepower.3rd Qu. horsepower.Max.
## 1           82.00000       133.00000
## 2          110.00000       165.00000
aggregate(accel~origin, cardata, summary)
##   origin accel.Min. accel.1st Qu. accel.Median accel.Mean accel.3rd Qu.
## 1 Europa   13.60000      15.15000     15.80000   17.75385      20.32500
## 2    USA   11.20000      14.40000     15.80000   15.90941      17.30000
##   accel.Max.
## 1   24.80000
## 2   22.20000

Zwrócić uwagę, że w Europie jest 26 samochodów. Zatem do porównania należy zastosować testy nieparametryczne.

PRZYKŁAD: Czy średnia moc silników (horsepower) różni się istotnie między samochodami wyprodukowanymi w USA i EUROPIE?

wilcox.test(horsepower ~ origin, data=cardata) 
## 
##  Wilcoxon rank sum test with continuity correction
## 
## data:  horsepower by origin
## W = 488, p-value = 0.0001479
## alternative hypothesis: true location shift is not equal to 0

PRZYKŁAD: Czy średnie przyspieszenie (accel) różni się istotnie między samochodami wyprodukowanymi w USA i EUROPIE?

wilcox.test(accel ~ origin, data=cardata) 
## 
##  Wilcoxon rank sum test with continuity correction
## 
## data:  accel by origin
## W = 1374, p-value = 0.06147
## alternative hypothesis: true location shift is not equal to 0

Odp. Nie. P-value (0,06147) > 0,05.

Używając danych gapminder dla 2007 roku określ czy średnia wartość gdpPercap różni się istotnie między Ameryką oraz Azją?

Używając danych gapminder określ czy wartość lifeExp różni się istotnie między Ameryką oraz Azją? Przedstaw wyniki w postaci testu statystycznego oraz odpowiedniej wizualizacji.

3.2 Test kolejności par Wilcoxona - test dla dwóch zależnych próbek

  • nieparametryczny odpowiednik testu t-Studenta dla prób powiązanych
  • test ten zakłada, że dane mają rozkład symetryczny (nie musi to być rozkład normalny)
  • test ten przeznaczony jest do sprawdzenia istotności różnic między dwiema zależnymi próbkami, np. dwie obserwacje u tej samej osoby (przed i po zabiegu).

PRZYKŁAD

(z książki Andrzeja Stanisza „Przystępny kurs statystyki w oparciu o program STATISTICA PL na przykładach z medycyny”) Przeprowadzono badanie tętna u 20 osób przed i po krótkim (trwającym 3 min) wysiłku fizycznym. Otrzymane dane z uwzględnieniem płci zestawiono w tabeli. Czy otrzymane wyniki przeczą hipotezie, że wysiłek wpływa na przyspieszenie tętna?

tetno <- read.csv("dane/tetno.csv")
wilcox.test(tetno$Tętno_1, tetno$Tętno_2, paired = TRUE) 
## Warning in wilcox.test.default(tetno$Tętno_1, tetno$Tętno_2, paired = TRUE):
## cannot compute exact p-value with ties
## 
##  Wilcoxon signed rank test with continuity correction
## 
## data:  tetno$Tętno_1 and tetno$Tętno_2
## V = 0, p-value = 9.516e-05
## alternative hypothesis: true location shift is not equal to 0

Otrzymane dla testu Wilcoxona wyniki potwierdzają, że hipotezę o równości rozkładów zmiennych Tetno_1 oraz Tetno_2 należy odrzucić i to z prawdopodobieństwem popełnienia błędu na poziomie p= 9.516e-05 (tj. p= 0.00009516).

Porównać wyniki tętna przed i po wysiłku.

W tym celu potrzebujemy dane w postaci Tętno…Zmienna kategoryzujaca (przed/po).

dane_tetno <- pivot_longer(tetno, cols=c("Tętno_1", "Tętno_2"))
ggplot(data = dane_tetno, aes(name, value)) + geom_boxplot() + ylab("Tętno") + xlab("grupa") + ggtitle("Porównanie tętna u grupy pacjentów przed i po wysiłku")

Używając danych gapminder porównaj oczekiwaną długość trwania życia (lifeExp) między rokiem 1987 a 2007. Wykonaj odpowiednią wizualizację oraz przedstaw wyniku testu statystycznego. Czy długość trwania życia między rokiem 1987 a 2007 różni się isotnie statystycznie?

Używając danych gapminder porównaj wartość PKB na osobę (gdpPercap) pomiędzy krajami Europy między rokiem 1977 a 1987. Przedstaw wyniki w formie graficznej oraz wykonaj odpowiedni test statystyczny. Jaki wynik dał test? (Czy między tymi latami istnieje różnica w PKB na osobę?)