# ładujemy pakiet mlbench ze zbiorami danych
library(mlbench)
      # wykorzystamy zbiór Glass
data(Glass)

      # dla celów ilustracji testów parametrycznych nie przejmujemy się
      # przypuszczalnym niespełnieniem założenia o normalności

      # test t dla jednej średniej (przy okazji dostajemy też przedział ufności)
      # hipoteza alternatywna: średnia atrybutu RI w populacji jest różna od 1.5
t.test(Glass$RI, mu=1.5)
      # hipoteza alternatywna: średnia atrybutu RI w populacji jest większa od 1.5
t.test(Glass$RI, mu=1.5, alternative="greater")
      # hipoteza alternatywna: średnia atrybutu RI w populacji jest mniejsza od 1.5
t.test(Glass$RI, mu=1.5, alternative="less")

      # test t dla dwóch średnich (przy okazji dostajemy też przedział ufności)
      # hipoteza alternatywna: średnia atrybutu RI jest różna
      # dla podpopulacji, dla których atrybut Type ma wartość 1 i 2
t.test(Glass$RI[Glass$Type=="1"], Glass$RI[Glass$Type=="2"])
      # to samo przy założeniu jednakowej wariancji
t.test(Glass$RI[Glass$Type=="1"], Glass$RI[Glass$Type=="2"], var.equal=T)
      # wybierzmy podzbiór odpowiadający wartościom 1 i 2 atrybutu Type
Glass12 <- Glass[Glass$Type %in% c("1", "2"),]
      # teraz możemy powtórzyć test w innym zapisie
t.test(RI~Type, Glass12)

      # nieparametryczne odpowiedniki testu t
      # test nieparametryczny Wilcoxona/Manna-Whitneya
wilcox.test(RI~Type, Glass12)
      # test nieparametryczny Kruskala-Wallisa
kruskal.test(RI~Type, Glass12)
      # ten ostatni nie wymaga ograniczenia do dwóch podpopulacji
kruskal.test(RI~Type, Glass)

      # test t dla par
      # hipoteza alternatywna: średnie atrybutów RI i Al w populacji są różne
t.test(Glass$RI, Glass$Al, paired=T)
      # to samo zapisane z użyciem testu dla jednej średniej
t.test(Glass$RI-Glass$Al, mu=0)
      # utwórzmy sztuczny "zaburzony" odpowiednik atrybutu RI
Glass$RI1 <- Glass$RI + rnorm(length(Glass$RI))
      # hipoteza alternatywna: średnie atrybutów RI i RI1 są różne
t.test(Glass$RI, Glass$RI1, paired=T)

      # utwórzmy dwa sztuczne atrybuty
Glass$Si1 <- Glass$Si + rnorm(length(Glass$Si)
Glass$Si2 <- exp(Glass$Si1)
      # testowanie korelacji
cor.test(Glass$Si, Glass$Si1, method="pearson")
cor.test(Glass$Si, Glass$Si1, method="spearman")
cor.test(Glass$Si, Glass$Si2, method="pearson")
cor.test(Glass$Si, Glass$Si2, method="spearman")

      # załadujmy dane HouseVotes84
data(HouseVotes84)
      # test chi2
      # testowanie zależności atrybutów V1 i Class
chisq.test(HouseVotes84$V1, HouseVotes84$Class)
      # tablica kontyngencji dla V1 i Class
tab.V1.Class <- table(HouseVotes84$V1, HouseVotes84$Class)
      # test można też zastosować do tablicy kontyngencji zamiast pierwotnych danych
chisq.test(tab.V1.Class)
      # to samo z wykorzystaniem testu Fishera
fisher.test(tab.V1.Class)
      # tablica kontyngencji dla V1 i V2
tab.V1.V2 <- table(HouseVotes84$V1, HouseVotes84$V2)
      # testowanie zależności atrybutów V1 i V2
chisq.test(tab.V1.V2)
      # to samo z wykorzystaniem testu Fishera
fisher.test(tab.V1.V2)

      # przy okazji obejrzyjmy funkcję gęstości rozkładu chi-kwadrat
      # dla różnej liczby stopni swobody
plot(seq(0, 20, 0.001), dchisq(seq(0, 20, 0.001), df=3), type="l")
plot(seq(0, 20, 0.001), dchisq(seq(0, 20, 0.001), df=4), type="l")
plot(seq(0, 20, 0.001), dchisq(seq(0, 20, 0.001), df=9), type="l")
plot(seq(0, 20, 0.001), dchisq(seq(0, 20, 0.001), df=15), type="l")