############# Dvofaktorska ANOVA ############### #Zadatak 1. Baza-survey4ED, toptim x(agegp3, sex) install.packages("foreign") #instaliranje i ucitavanje paketa library("foreign") Survey=read.spss("E:/baze/survey4ED.sav", to.data.frame = TRUE) fix(Survey) attach(Survey) # Tabela kontigencije install.packages("summarytools") library("summarytools") ctable(sex,agegp3,prop="n") # test o homogenosti varijansi library(car) #za Levinov test leveneTest(toptim~agegp3*sex) # p-value=0,4198 imamo homogenost varijansi # Ispitivanje normalnosti raspodele library(dplyr) library(nortest) Survey %>% group_by(sex, agegp3) %>% mutate( W_statistic = ifelse(n() >= 8, ad.test(toptim)$statistic, NA_real_), p_value = ifelse(n() >= 8, ad.test(toptim)$p.value, NA_real_) ) %>% distinct(sex, agegp3, .keep_all = TRUE) %>% select(W_statistic, p_value) # primena dvofaktorske ANOVA tehnike model=aov(toptim~agegp3*sex, data=Survey) summary(model) # interakcija ne postoji, sex ne utice, agegp3 utice # naknadni test za toptim x agegp3 pairwise.t.test(toptim, agegp3, p.adj = "bonf") stby( data = toptim, INDICES = agegp3, FUN = descr, stats = c("mean", "med","sd") ) #Zadatak 2. Baza-sleep4ED, age x (sex, marital) Sleep=read.spss("E:/baze/sleep4ED.sav", to.data.frame = TRUE) fix(Sleep) detach(Survey) attach(Sleep) # Tabela kontigencije ctable(sex,smoke,prop="n") # paket ranije instaliran # test o homogenosti varijansi (paket ranije ubacen u biblioteku) leveneTest(age~marital*sex) # p-value=0,005 nemamo homogenost varijansi, ali sa tim moze da se zivi # Normalnost raspodele library(dplyr) library(nortest) Sleep %>% #AD test za vise grupa group_by(sex, marital) %>% mutate( W_statistic = ifelse(n() >= 8, ad.test(age)$statistic, NA_real_), p_value = ifelse(n() >= 8, ad.test(age)$p.value, NA_real_) ) %>% distinct(sex, marital, .keep_all = TRUE) %>% select(W_statistic, p_value) Sleep %>% #SW test za vise grupa group_by(sex, marital) %>% mutate(W_statistic = shapiro.test(age)$statistic, p_value = shapiro.test(age)$p.value) %>% distinct(sex, marital, .keep_all = TRUE) %>% select(W_statistic, p_value) # primena dvofaktorske ANOVA tehnike model2=aov(age~marital*sex, data=Sleep) summary(model2) # postoji interakcija # sada cemo analizirati uticaj bracnog stanja na godine, ali u svakom od polova pojedinacno muskarci=Sleep[Sleep$sex=="male",] zene=Sleep[Sleep$sex=="female",] #Samostalno ispitati normalnost model3=aov(age~marital, data=zene) summary(model3) #p-value<0.05, potrebni Post Hoc testovi pairwise.t.test(zene$age, zene$marital, p.adj = "bonf") # U grupi Single vrednosti godina se znacajno razlikuju u odnosu na ostale grupe # A kako se razlikuju? stby( data = zene$age, INDICES = zene$marital, FUN = descr, stats = c("mean", "med","sd") ) # Konacno, Single ispitanici su znacajno mladji od ostatka populacije ## Analiza uticaja bracnog stanja na godine u grupi muskaraca ctable(Sleep$marital,Sleep$sex,prop = "n") model4=aov(age~marital, data=muskarci) summary(model4) # NAPOMENA: iako mozemo dobiti rezultate ANOVA testiranja i u ovom slucaju, # ti rezultati nisu validni jer postoji samo jedan ispitanik koji je udovac, # pa rezultati nisu pouzdani. #################################################################### ########### ANOVA test za ponovljena merenja ####################### #################################################################### #Zadatak 3. Uporedjujemo strah od statistike u tri merenja install.packages("foreign") #instaliranje i ucitavanje paketa library("foreign") Experim=read.spss("E:/baze/experim4ED.sav", to.data.frame = TRUE) fix(Experim) attach(Experim) #Ispitivanje normalnosti install.packages("tidyverse") library("tidyverse") library("rstatix") Experim %>% shapiro_test(fost1, fost2, fost3) #Pravljenje pogodne baze Baza <- data.frame( # moramo da napravimo novi data frame, da bi se uskladili sa sintaksom vrednost~grupa Vreme = c(rep(1, 30), rep(2, 30), rep(3, 30)), FOST = c(Experim$fost1, Experim$fost2, Experim$fost3 ), ID=c(rep(1:30,3)) # neophodna kolona, koju zahteva anova_test ) Baza #Primena ANOVA tehnike za ponovljena merenja #funkcija aov nema opciju "paired=TRUE/FALSE", pa je ne mozemo primeniti za ponovljena merenja # ponudjena opciija resava i problem homogenosti varijansi o istom trosku library("rstatix") # za slucaj da nije instalirano res.aov <- anova_test(data = Baza, dv = FOST, wid=ID, within = Vreme) get_anova_table(res.aov) # Naknadni testovi Baza %>% pairwise_t_test( FOST ~ Vreme, paired = TRUE, p.adjust.method = "bonferroni" ) stby( data = Baza$FOST, INDICES = Baza$Vreme, FUN = descr, stats = c("mean", "med","sd") ) #Zadatak 4. Uporedjujemo nivo samopouzdanja u tri merenja #Ispitivanje normalnosti Experim %>% shapiro_test(confid1, confid2, confid3) #Pravljenje pogodne baze baza <- data.frame( Vreme = c(rep(1, 30), rep(2, 30), rep(3, 30)), confid = c(Experim$confid1, Experim$confid2, Experim$confid3 ), ID=c(rep(1:30,3)) # neophodna kolona, koju zahteva anova_test ) baza #Primena ANOVA tehnike za ponovljena merenja res.aov <- anova_test(data = baza, dv = confid, wid=ID, within = Vreme) get_anova_table(res.aov) # Naknadni testovi baza %>% pairwise_t_test( confid ~ Vreme, paired = TRUE, p.adjust.method = "bonferroni" ) stby( data = baza$confid, INDICES = baza$Vreme, FUN = descr, stats = c("mean", "med","sd") ) ################################################################################ ###################### Friedman-ov test ######################################### ############################################################################ # Zadatak 5. Uporedjujemo nivo depresije u tri merenja #Ispitivanje normalnosti Experim %>% shapiro_test(depress1, depress2, depress3) library(tidyverse) #neophodni paketi library(ggpubr) library(rstatix) #Pravljenje pogodne baze baza1 <- data.frame( Vreme = c(rep(1, 30), rep(2, 30), rep(3, 30)), depresija = c(Experim$depress1, Experim$depress2, Experim$depress3 ), ID=c(rep(1:30,3)) # neophodna kolona, koju zahteva friedman_test ) baza1 #Primena Friedman-ovog testa baza1 %>% friedman_test(depresija ~ Vreme |ID) # Naknadni testovi baza1 %>% wilcox_test(depresija ~ Vreme, paired = TRUE, p.adjust.method = "bonferroni") # Ovaj postupak sadrzi kako klasicne p-value, tako i korigovane po Bonferonijevoj matrici # Kod klasicnih p-value, poredjenje vrsimo u odnosu na korigovanu granicu, # dok kod Bonferonija nema potrebe da se granica koriguje stby( data = baza1$depresija, INDICES = baza1$Vreme, FUN = descr, stats = c("mean", "med","sd") )