Vít Gabrhel
vit.gabrhel@mail.muni.cz
FSS MU,
6. 11. 2017
Úvod
ANOVA = ANalysis Of VAriance
Data: Cognitive training
Data: Cognitive training
setwd()
dir()
install.packages("readxl")
library("readxl")
excel_sheets("ANOVA.xlsx")
ANOVA = read_excel("ANOVA.xlsx", sheet = 1)
View(ANOVA)
ANOVA$condition2 = factor(ANOVA$condition, order = TRUE, levels = c("8 days", "12 days", "17 days", "19 days"))
F-test a F-Ratio
Variance between groups
Variance within groups
F =
F-test a F-Ratio
Jak získáme příslušnou p-hodnotu?
F-test a F-Ratio
# Create the vector x
x <- seq(from = 0, to = 10, length = 2000)
# Evaluate the densities
y_1 <- df(x, 3, 100)
y_2 <- df(x, 1, 1)
y_3 <- df(x, 2, 100)
y_4 <- df(x, 3, 30)
y_5 <- df(x, 3, 500)
y_6 <- df(x, 3, 50)
y_7 <- df(x, 6, 1000)
# Plot the densities
plot(x, y_1, col = 1, type = "l")
lines(x, y_2, col = 2)
lines(x, y_3, col = 3)
lines(x, y_4, col = 4)
lines(x, y_5, col = 5)
lines(x, y_6, col = 6)
lines(x, y_7, col = 7)
# Add the legend
legend("topright", title = "F distributions",
c("df = (3, 100)", "df = (1, 1)", "df = (2, 100)", "df = (3, 30)",
"df = (3, 500)", "df = (3, 50)", "df = (6, 1000)"),
col = c(1, 2, 3, 4, 5, 6, 7), lty = 1)
Summary Table
F-test a F-Ratio
Prozkoumání dat
# Summary statistics by group
library(psych)
describeBy(ANOVA, group = ANOVA$condition2)
# Boxplot
library(ggplot2)
bp1 = ggplot(ANOVA, aes(condition2, iq))
bp1 + geom_boxplot(aes(fill=condition2), alpha=I(0.5)) +
geom_point(position="jitter", alpha=0.5) +
geom_boxplot(outlier.size=0, alpha=0.5) +
theme(
axis.title.x = element_text(face="bold", color="black", size=12),
axis.title.y = element_text(face="bold", color="black", size=12),
plot.title = element_text(face="bold", color = "black", size=12)) +
labs(x="Condition",
y = "IQ gain",
title= "IQ gain by the days of training") + theme(legend.position='none')
F-test a F-Ratio
Funkce aov
aov(dependent_var ~ independent_var)
summary()
# Apply the aov function
anova_wm <- aov(iq ~ condition2, data = ANOVA)
# Look at the summary table of the result
summary(anova_wm)
Velikost účinku
library(lsr)
etaSquared(anova_wm, type = 2, anova = FALSE)
Předpoklady použití
Povaha proměnných
Normalita rozložení závislé proměnné
Homogenita rozptylu
Nezávislost pozorování
Předpoklady použití
install.packages("car")
library("car")
If you don't specify additional arguments, the deviation scores are calculated by comparing each score to its group median.
# Levene's test
leveneTest(iq ~ as.factor(condition2), data = ANOVA)
# Levene's test with center = mean
leveneTest(iq ~ as.factor(condition2), data = ANOVA, center = mean)
Předpoklady použití
# Normalita rozložení
ggplot(data=ANOVA, aes(ANOVA$iq)) +
geom_histogram(breaks=seq(0, 20, by = 2),
col="red",
aes(fill=..count..)) +
scale_fill_gradient("Count", low = "green", high = "red")+
labs(title="Histogram for IQ Gain") +
labs(x="IQ Gain", y="Count") + theme(legend.position='none')
Welchův F-test
anova_wm_VNE = oneway.test(iq ~ condition2, data=ANOVA, var.equal=FALSE)
anova_wm_VNE
anova_wm_VE = oneway.test(iq ~ condition2, data=ANOVA, var.equal=TRUE)
anova_wm_VE
Úvod
Allow for multiple pairwise comparisons without an increase in the probability of a Type I error
Používáme, pokud nemáme dopředu jasné hypotézy
Z principu jsou oboustranné
Je jich mnoho – liší se v několika parametrech:
Doporučení podle Fielda
Stejně velké skupiny a skupinové rozptyly (ideální situace):
Pokud si chceme být jistí, že P chyby I. typu nepřekročí zvolenou hladinu:
Pokud jsou velikosti skupin trochu/hodně rozdílné:
Pokud pochybujeme o shodnosti skupinových rozptylů:
Tukey
# Conduct ANOVA
anova_wm = aov(iq ~ condition2, data = ANOVA)
# View summary
summary(anova_wm)
# Conduct Tukey procedure
tukey <- TukeyHSD(anova_wm)
# Plot confidence intervals
plot(tukey)
Bonferroni
The Bonferroni correction compensates for that increase by testing each individual hypothesis at a significance level of α/m, where α is the desired overall alpha level and m is the number of hypotheses.
# Pairwise t-test
pairwise.t.test(ANOVA$iq, ANOVA$condition2, p.adjust = "bonferroni")
Úvod
Umožňují porovnat jednotlivé skupiny v jednom kroku bez nutnosti korigovat hladinu významnosti (bez snížení síly testu)
Každý kontrast srovnává 2 průměry
Ortogonální (nezávislé) kontrasty
Neortogonální kontrasty
Příklad
c1 = c(-1, 0, 0, 1)
c2 = c(0,-1,1,0)
mat <- cbind(c1,c2)
contrasts(ANOVA$condition2) <- mat
model1 <- lm(iq ~ condition2, data = ANOVA)
summary(model1)
options(contrasts = c("contr.helmert", "contr.poly"))
contrasts(ANOVA$condition2) <- "contr.helmert"
model1 <- lm(iq ~ condition2, data = ANOVA)
summary(model1)
Úvod
ANOVA s více kategorickými nezávislými proměnnými (faktory) nachází uplatnění v experimentálních designech,
Uplatnění v neexperimentálních designech, kde chceme posoudit vliv více kategorických prediktorů najednou
Úvod
Dependent variable
Assess impact on driving error
Independent variable
Randomly assign people to different (simulated) driving conditions
Two independent variables
One continuous dependent variable
Data
library("readxl")
excel_sheets("FANOVA.xlsx")
FANOVA = read_excel("FANOVA.xlsx", sheet = 1)
View(FANOVA)
FANOVA$conversation2 = factor(FANOVA$conversation, order = TRUE, levels = c("None demand", "Low demand", "High demand"))
FANOVA$driving2 = factor(FANOVA$driving, order = TRUE, levels = c("Easy", "Difficult"))
library(psych)
describeBy(FANOVA, group = FANOVA$conversation2)
describeBy(FANOVA, group = FANOVA$driving2)
Úvod
We can test 3 hypotheses:
Úvod
Three F-ratios
FA = 1st Independent variable, i.e. driving difficulty
FB = 2nd Independent variable, i.e. conversation demand
FAxB = Interaction between FA and FB
Main effect
Interaction effect
Simple effect
Interakce
V různých úrovních jednoho faktoru se rozdíly mezi úrovněmi druhého faktoru liší (rozdíl rozdílů).
S měnící se úrovní jedné nezávislé proměnné se mění vliv druhé nezávislé proměnné na závislou proměnnou
Nezávislá proměnná nemusí mít žádný hlavní efekt (main effect) na závislou proměnnou, ale může ji ovlivňovat tím, že ovlivňuje vliv druhé nezávislé
Při interpretaci interakcí je obvykle velmi užitečné znázornění formou grafu.
F-ratio's a Interakce
ggplot(FANOVA,aes(x=factor(conversation2),y=errors,fill=factor(driving2)), color=factor(vs)) +
stat_summary(fun.y=mean,position=position_dodge(),geom="bar") +
scale_y_continuous("Errors done while driving") +
scale_x_discrete("Conversation difficulty") +
scale_fill_discrete(name ="Driving difficulty", labels=c("Easy", "Difficult"))
Factorial_ANOVA = aov(errors ~ conversation2 * driving2, data = FANOVA)
summary(Factorial_ANOVA)
F-ratio's a Interakce
# Interaction plot
interaction.plot(x.factor = FANOVA$conversation2, trace.factor = FANOVA$driving2,
response = FANOVA$errors)
summary.lm(Factorial_ANOVA)
Velikost účinku
"Eta-squared (η²) and partial eta-squared (ηp²) are biased effect size estimators. I knew this, but I never understood how bad it was. Here’s how bad it is: If η² was a flight from New York to Amsterdam, you would end up in Berlin."
"When there is no true effect, η² from small studies can easily give the wrong impression that there is a real small to medium effect, just due to the bias. Your p-value would not be statistically significant, but this overestimation could be problematic if you ignore the p-value and just focus on estimation."
D. Lakens, n.d.
Velikost účinku
library(lsr)
etaSquared(Factorial_ANOVA, type = 2, anova = FALSE)
library(sjstats)
Factorial_ANOVA2 = lm(errors ~ conversation2 * driving2, data = FANOVA)
r2(Factorial_ANOVA2, n = NULL)
Předpoklady použití
Povaha proměnných
Normalita rozložení závislé proměnné
Homogenita rozptylu
Nezávislost pozorování
Dostatečný počet případů pro každou kombinaci faktorů
Předpoklady použití
# Levene's test
leveneTest(errors ~ driving2, data = FANOVA)
# Levene's test with center = mean
leveneTest(errors ~ conversation2, data = FANOVA)
# Normalita rozložení
ggplot(data=FANOVA, aes(FANOVA$errors)) +
geom_histogram(breaks=seq(0, 20, by = 2),
col="red",
aes(fill=..count..)) +
scale_fill_gradient("Count", low = "blue", high = "purple")+
labs(title="Errors done while driving") +
labs(x="Errors done while driving", y="Count") + theme(legend.position='none')
Post-Hoc testy
tukey <- TukeyHSD(Factorial_ANOVA)
pairwise.t.test(FANOVA$errors, FANOVA$conversation2, p.adjust = "bonferroni")
pairwise.t.test(FANOVA$errors, FANOVA$driving2, p.adjust = "bonferroni")
Kontrasty
options(contrasts = c("contr.helmert", "contr.poly"))
contrasts(ANOVA$condition2) <- "contr.helmert"
model1 <- lm(iq ~ condition2, data = ANOVA)
summary(model1)
Field, A., Miles, J., & Field, Z. (2012). Discovering Statistics Using R. Sage: UK.
Navarro, D. J. (2014). Learning statistics with R: A tutorial for psychology students and other beginners. Available online: http://health.adelaide.edu.au/psychology/ccs/teaching/lsr/