#######################################
### SEDMI CAS - STATISTICKI TESTOVI ###
#######################################

############
## t-test ##
############
# Koristimo ga pod pretpostavkom da uzorak ima normalnu raspodelu X:N(m,s^2)
# funkcija je t.test(...)
# 1. prvi nacin: imamo jedan uzorak, i testiramo Ho(m=mu)
# Funkcija je t.test(uzorak, mu) - ovo su obavezni parametri
# moguce je dodati i parametre alternative, conf.level,...
# default je da je alternativna hipoteza: m je razlicito od mu
# parametar alternative mozemo postaviti na "greater" ili "less", ako hocemo takvu alt.hipotezu
# Ovaj test vraca: 
    # t-vrednost test statistike, 
    # df-broj stepeni slobode studentove raspodele test statistike, 
    # p-vrednost testa, na osnovu koje zakljucujemo da li prihvatamo Ho ili ne (ako je veca od nivoa znacajnosti - obicno 0.05 => prihvatamo)
    # interval poverenja za m, po defaultu 95%-ni, a ako hocemo neki drugi naznacimo to parametrom conf.level
x<-rnorm(100,mean=7,sd=12)
# Proverimo graficki da li uzorak odgovara normalnoj raspodeli (ovde hoce jer je namesteno)
qqnorm(x)
# Hocemo da ispitamo Ho(m=2) t-testom:
t.test(x,mu=2)
# Vidimo da je p-vrednost testa mala, pa se odbacuje Ho
# Varijanta ovoga, hocemo da naglasimo da je alt. hipoteza m<2
t.test(x,mu=2,alternative="less")
# Pod ovim uslovima sigurno se prihvata Ho, kada je alternativa da je m manje od 2 (mi smo namestili na 7!)
# Ako je alternativna hipoteza da je m>2 (ovo ima vise smisla):
t.test(x,mu=2,alternative="greater") # vidimo da se opet odbacuje Ho u korist alternative
# Jos varijanta sa intervalom poverenja koji je razlicit od 95%:
t.test(x,mu=2,alternative="greater",conf.level=0.99)

# 2. nacin: imamo dva uzorka i testiramo da li su im srednje vrednosti jednake Ho(m1=m2)
# Funkcija je t.test()
# Parametri funkcije su:
    # x - prvi vektor
    # y - drugi vektor
    # formula - ako necemo da prosledjujemo odvojeno vektore x i y nego delimo bazu podataka na dva dela preko model formule: kolona1~kolona2 (gde je kolona2 faktor sa dva nivoa)
    # paired - logicki parametar, TRUE je ako hocemo upareni t-test
    # var.equal - logicki parametar, TRUE je ako mozemo pretpostaviti da su varijanse na dva uzorka jednake (podrazumeva se da nisu), sto se proverava testom var.test(uzorak1, uzorak2)
# Ovaj test vraca vrednost test statistike, broj stepeni slobode, p-vrednost testa, interval poverenja za razliku srednjih vrednosti, kao i ocenjene srednje vrednosti na oba uzorka 
x<-rnorm(100,mean=10,sd=5)
y<-rnorm(90,mean=14,sd=5)
t.test(x,y,var.equal=T) # u ovom slucaju odbacujemo Ho - p-vrednost testa je mala
# Varijanta kada uzorke vadimo kao podskupove neke baze podataka
library(ISwR)
data(energy)
attach(energy)
energy
# Vidimo da se kolona expend moze podeliti na dva podskupa, u zavisnosti od toga da li je u koloni stature vrednost OBESE ili LEAN (faktor sa dva nivoa)
# zato mozemo koristiti t-test sa model formulom expend~stature
# prvo proveravamo da li su disperzije jednake
var.test(expend~stature)
# vidimo da je p-vrednost veca od 0.05, pa prihvatamo hipotezu o jednakosti disperzija
t.test(expend~stature,var.equal=T)
# p-vrednost je manja od nivoa znacajnosti od 0.05, pa odbacujemo hipotezu o jednakosti srednjih vrednosti u ove dve grupe
#NAPOMENA: isto bismo dobili sa
x<-expend[stature=="lean"]
y<-expend[stature=="obese"]
t.test(x,y,var.equal=T)

##################################
## Hi-kvadrat test nezavisnosti ##
##################################

# Funkciji chisq.test se u ovom slucaju prosledjuje tabela (ili matrica) sa podacima, koju R shvata kao tabelu kontingencije; ili jednostavno dva vektora od kojih on sam formira odgovarajucu tabelu
# Opet se za detaljniji uvid mogu pozvati observed i expected vrednosti
data(juul)
attach(juul)
head(juul)
# Ispitujemo nezavisnost kolona tanner i sex:
chisq.test(tanner,sex) # ovako je kada prosledjujemo vektore odvojeno
# Drugi nacin je da sami napravimo tabelu i prosledimo je
tabela<-table(tanner,sex)
tabela
chisq.test(tabela)
chisq.test(tabela)$expected
chisq.test(tabela)$observed
# Mala je p-vrednost pa se Ho odbacuje, tj. zavisna su obelezja

###############
## KS - test ##
###############
# Funkcija ks.test() ispituje pripadnost raspodeli ili da li su dva uzorka iz iste rasopdele
# Argumenti x-numericki vektor, y-drigi numericki vektor ili"naziv_raspodele"
x <- rnorm(50)
y <- runif(30)
# Da li su x i y iz iste raspodele?
ks.test(x, y)
# p vrednost je mala, pa odbacujemo hipotezu tj. x i y nisu iz iste raspodele
# testiramo kojoj raspodeli pripadaju uzorci x i y
hist(y)
ks.test(y, "pgamma",2,3)
ks.test(x, "pnorm")
