library(ggplot2)
library(dplyr)
# install.packages("ez")
library(ez)
blang  = read.table(file.path(pfadu, "blang.txt"))
v.df = read.table(file.path(pfadu,"vokal.txt"))
dg = read.table(file.path(pfadu, "dg.txt"))
ssb = read.table(file.path(pfadu, "ssb.txt"))

######################################################################
# 1. gepaarter t-test und within-subjects ANOVA
######################################################################
head(blang); dim(blang)

# Jede Stufe des unabhängigen within-Faktors (Betonung)
# wird einmal pro Vpn belegt
with(blang, table(Vpn, Betonung))

# Differenz-Berechnung
d = blang%>%
  group_by(Vpn)%>%
  summarise(F2 = diff(F2))
# Boxplot
boxplot(d$F2)
# gepaarter t-Test
t.test(d$F2)
# F2 wurde von der Betonung beeinflusst (t[11] = 4.5, p < 0.01)
# Lösung mit ANOVA
ezANOVA(blang, .(F2), .(Vpn), .(Betonung))
# 2 Betonung   1  11 18.95986 0.001147148     * 0.4113659
# Identifizieren: die F-Statistik = 18.95986; der p-Wert: 0.001147148
# die Freiheitsgrade im Zähler und im Nenner: 1  11
# F2 wurde von der Betonung beeinflusst
# (F[1,11] = 19.0, p < 0.01)
# Beobachten: die F-Statistik ist die t-Statistik hoch 2:
4.3543^2
sqrt(18.95986)

######################################################################
# 2. ungepaarter t-test und between-subjects ANOVA
######################################################################
head(v.df); dim(v.df)
# Die Stufen des unabhängigen between-Faktors
# werden von unterschiedlichen Vpn belegt
with(v.df, table(Vpn, Sprache))
# d.h. jede Reihe ist [1,0] oder [0,1]

# Boxplot oder density plot
ggplot(v.df) + aes(y = F2, x = Sprache) + geom_boxplot()
ggplot(v.df) + aes(x = F2, col = Sprache) + geom_density()


# ungepaarter t-Test
t.test(F2 ~ Sprache, data = v.df)
# F2 wurde von der Sprache beinflusst
# (t[11.8] = 2.7, p < 0.05)
# Lösung mit ANOVA
ezANOVA(v.df, .(F2), .(Vpn), between = .(Sprache))
# 
# F2 wurde von der Sprache beeinflusst
# F[1,18] = 7.2, p < 0.05)
# 
####################################################
# Die Bedeutung des Levene-Tests
# Nur wenn p > 0.05 ist der ANOVA berechtigt

# d.h. ein ANOVA mit between-Faktor wird unter
# der Annahme durchgeführt, dass sich die
# Varianzen in den Stufen nicht  signifikant unterscheiden
# Der ungepaarte t-Test kann geändert werden,
# um diese Annahme zu berücksichtigen mit var.equal=T
# 
t.test(F2 ~ Sprache, data = v.df, var.equal=T)
# t-Statistik: 2.688
# 2.688^2
# gibt 7.225344, die F-Statistik in dem between-Faktor ANOVA
#############################################################



##########################################################
# 3. Zwei Faktoren 
######################################################################
head(dg); dim(dg)
#
# Wenn nur ein 1 Wert pro Reihe belegt ist,
# dann sind beide Faktoren 'between'
with(dg, table(Vpn, interaction(Region, Gen)))

# 2 Faktoren, 3 Fragen:
# Wird F2 von Gender beeinflusst? Von der Region?
ggplot(dg) + 
  aes(y = F2, x = Gen, colour = Region) + 
  geom_boxplot()

##########################################################
# 4. Interaktionen 
#############################################################

# Liegt eine Interaktion zwischen Gender und Region
# vor? Bedeutung: sind die Unterschiede zwischen A, B, C
# ähnlich für männlich und weiblich? (Oder umgekehrt:
# sind die Unterschiede zwischen männlich und weiblich
# ähnlich in den Regionen A, B, C?). Wenn nein, dann
# liegt eine Interaktion vor. 
# Man kann teilweise eine Interaktion auch graphisch darstellen,
# indem die Medianwerte von dem Boxplot miteinander 
# verbunden werden:
# Hier sind die Medianwerte pro Stufe
dg.m = dg %>%
  group_by(Gen,Region) %>%
  summarise(F2 = median(F2))
# Hier werden die Medianwerte getrennt für männlich
# und weiblich verbunden
ggplot(dg.m) + 
  aes(y = F2, x = Region, group=Gen, colour = Gen) +  
  geom_line()


# Wenn die Linien mehr oder weniger parallel zueinander
# verlaufen, liegt keine Interaktion vor. Je mehr sie davon
# abweichen, umso wahrscheinlicher wird die
# Interaktion signifikant sein.
ezANOVA(dg, .(F2), .(Vpn), between =.(Region, Gen))
# F2 wurde von der Region (F[2,54] = 119.6, p < 0.001)
# und vom Geschlecht (F[1,54] = 106.2, p < 0.001) 
# signifikant beeinflusst und es gab eine signifikante
# Interaktion (F[2,54] = 12.1, p < 0.001) zwischen
# diesen beiden Faktoren. Post-hoc Bonferroni-korrigierte
# t-Tests zeigten...

##########################################################
# 5. post-hoc t-tests
#############################################################

## (Wenn eine signifikante Interaktion vorliegt).
## Post-hoc t-Tests vergleichen alle möglichen Stufen-Paare
## d.h. es gibt A, B, C sowie m, w daher Kombinationen von
## A-m mit A-w, A-m mit B-m, A-m mit B-w...
## Es gibt 15 mögliche Paare
## (errechnet sich as 6!/(4!2!) = 30/2 = 15)
## 6 weil es 3 * 2 = 6 Stufen gibt
## 6! bedeutet: 6 * 5 * 4 * 3 * 2 * 1. Es gibt also 15 Tests:
factorial(6)/(factorial(4) * factorial (2))

phoc(dg, .(F2), .(Vpn), .(Region, Gen))
## Bonferroni-Korrektur:
## Zusätzlich werden die Wahrscheinlichkeiten
## mit der Anzahl der Tests multipliziert
## (d.h. es ist 15 Mal so schwierig, Signifikanzen
## zu bekommen). z.B. ein Wert von 0.04
## ist nach dieser Berechnung 0.04 * 15 = 0.6
## daher nicht signifikant

## Auswahl
vok.ph = phoc(dg, .(F2), .(Vpn), .(Region, Gen))
## Wir benötigen aber nicht alle 15 Tests
## sondern nur diejenigen wenn ein Faktor variiert
## und die anderen konstant sind, daher:
# Faktor 1 variiert, Faktor 2 ist konstant
# Bedeutung: gibt es Unterschiede zwischen den
# Dialekten (Faktor 1 variiert) getrennt für Männer
# und Frauen?
p1 = phsel(vok.ph$res, 1)
round(p1, 3)
# Faktor 2 variiert, Faktor 1 ist konstant
# Bedeutung: gib es Unterschiede zwischen männlich/weiblich
# (Faktor 2 variiert) getrennt in den Dialekten?
p2 = phsel(vok.ph$res, 2)
round(p2, 3)
# Post-hoc Bonferroni-korrigierte
# t-Tests zeigten signifikante Unterschiede
# zwischen den Dialekten A und C
# (Für Männer: p < 0.001; Für Frauen p < 0.001)
# sowie zwischen
# den Dialekten B und C 
# (Für Männer: p < 0.001; Für Frauen p < 0.001)
# Der Unterschied
# zwischen den Dialekten A und B war nicht signifikant,
# weder in Männern noch in Frauen. 
# Schließlich gab es signifikante Unterschiede
# zwischen Männern und Frauen in Dialekt A (p < 0.001)
# und in Dialekt B (p < 0.001) aber nicht in Dialekt C.

##########################################################
# 6. Wiederholungen in within-Stufen
#############################################################

#
# Tabelle: wieviele Stichproben pro Vpn?
with(ssb, table(Vpn, interaction(Wort, Alter)))

# Über die Wiederholungen mitteln
ssbm = ssb %>%
  group_by(Wort,Alter,Vpn) %>%
  summarise(F2 = mean(F2))
head(ssbm)
dim(ssbm)
# Tabelle: wieviele Stichproben pro Vpn?
with(ssbm, table(Vpn, interaction(Wort, Alter)))

# Abbildung
ggplot(ssbm) + 
  aes(y = F2, x = Alter, colour = Wort) + 
  geom_boxplot()

# Statistik
ezANOVA(ssbm, .(F2), .(Vpn), .(Wort), between = .(Alter))

##########################################################
# 7. Greenhouse-Geisser-Korrektur
#############################################################

# Korrektur der Freiheitsgrade
2 * 0.6860511
20 * 0.6860511

# Aufgerundet
round(2 * 0.6860511, 1)
round(20 * 0.6860511, 1)

#p für Wort:
1 - pf(78.505534, 2 * 0.6860511, 20 * 0.6860511)
#p für Alter:Wort
1 - pf(9.8908882, 2 * 0.6860511, 20 * 0.6860511)

# Alter (F[1,10] = 14.9, p < 0.001), Wort (F[1.4 , 13.7] = 78.5, p < 0.001) 
# sowie die Interaktion von Wort und Alter (F[1.4, 13.7] = 9.9, p < 0.01) 
# hatten jeweils einen signifikanten Einfluss auf F2.


