# pfadu = "http://www.phonetik.uni-muenchen.de/~jmh/lehre/Rdf"

library(ggplot2)
library(dplyr)
library(ez)
library(lmerTest)
library(emmeans)
source(file.path(pfadu, "phoc.txt"))
source(file.path(pfadu, "sig.fn.R"))

proben <- function(unten = 1,
                   oben = 6,
                   k = 10,
                   N = 50)
{
  # default: wir werfen 10 Wuerfel 50 Mal
  alle <- NULL
  for (j in 1:N) {
    ergebnis = mean(sample(unten:oben, k, replace = T))
    alle = c(alle, ergebnis)
  }
  alle
}


#Dann die benoetigten data.frames:
alvr = read.table(file.path(pfadu, "alvrk.txt"))
a.df = read.table(file.path(pfadu, "aufnahme.df.txt"))
formAB = read.table(file.path(pfadu,"formAB.txt"))
dbwort.df = read.table(file.path(pfadu,"dbwort.df.txt"))
########################################################################################################
# Ende des Headers #####################################################################################
########################################################################################################

# 1. In diesen Daten
head(alvr)
# werden Vokalstimuli, deren F2 (Faktor Stimulus) zwischen 803 und 1436 Hz schwankt,
# entweder als /Y/ oder /I/ wahrgenommen (Faktor Urteil).
# Inwiefern beeinflusst die F2-Variation in den Stimuli das Urteil?
# Bei welchem Hz-Wert kippt die Wahrnehmung von /I/ zu /Y/?


alvr$P = alvr$Urteil == levels(alvr$Urteil)[2]
alvr$Q = !(alvr$P)

alvr.m = alvr %>% 
  group_by(Stimulus) %>% 
  summarise(P = sum(P), Q = sum(Q))
alvr.m = alvr.m %>% mutate(p = P / (P + Q))
alvr.glm = glm(Urteil ~ Stimulus, family = "binomial", data = alvr)
anova(alvr.glm, test = "Chisq")
# Die Variation entlang des Kontinuums beeinflusste die Wahrnehmung signifikant
# (X^2[1,108] = 124.0, p < 0.001)
k = coef(alvr.glm)[1]
m = coef(alvr.glm)[2]
umkipp = -k / m
plot(p ~ Stimulus, data = alvr.m)
sig(k, m, add = T)
abline(v = umkipp, h = 0.5, lty = "dashed")
umkipp
# Die Wahrnehmung kippt von einer Kategorie zur Anderen bei 992,4 Hz.

#2. Diese Daten
head(a.df)
# zeigen Reaktionszeiten von 12 Versuchspersonen (Vpn) auf unterschiedliche
# Woerter (Faktor Wort); die Versuchspersonengruppen waren
# entweder Kinder, Jugendliche, oder Erwachsene (Faktor Gruppe), und haben den Test
# einmal unter ruhigen Studio-Bedingungen, einmal unter Laerm durchgefuehrt (Faktor Ort).

# Inwiefern haben der Ort und die Gruppenzugehoerigkeit die Reaktionszeiten beeinflusst?

ggplot(a.df) +
  aes(y = rt, x = Gruppe) +
  geom_boxplot() +
  facet_wrap( ~ Ort)

with(a.df, table(Gruppe, Vpn))
with(a.df, table(Ort, Vpn))
with(a.df, table(Gruppe, Wort))
with(a.df, table(Ort, Wort))
a.df.step = step(lmer(rt ~ Gruppe * Ort + (Ort | Vpn) + (Gruppe | Wort), data = a.df))
a.df.step
anova(get_model(a.df.step))
# Gruppe hatte einen Einfluss auf die rt-Werte (F[2,9] = 7.33, p < 0.05), und
# der Aufnahmeort auch (F[1,10] = 31.0, p < 0.001); es gab allerdings keine Interaktion
# zwischen Gruppe und Aufnahmeort.
a.df.ph = pairs(emmeans(get_model(a.df.step),  ~ Gruppe))
phsel(a.df.ph, 1)
# Post-hoc durchgefuehrte Tukey-korrigierte Tests zeigten,
# dass sich Kinder sowohl von Erwachsenen (p < 0.05) als auch von 
# Jugendlichen (p < 0.05) unterschieden; Erwachsene und Jugendliche
# unterschieden sich hingegen nicht voneinander. 


# 3. In dem data.frame
formAB
# sind Daten dreier Wiederholungen (Faktor Wdh) von Aeusserungen,
#  die von 6 Sprechern gemacht wurden. 

# Beantworten Sie durch eine Abbildung und einen statistischen Test folgende Frage:
# Inwiefern haengt in diesen Aeusserungen F1 vom Kontext ab?

ggplot(formAB) +
  aes(y = F1, x = Kontext) +
  geom_boxplot()

with(formAB,table(Wdh,Vpn))
with(formAB,table(Kontext,Vpn))

formAB.m = formAB%>%
  group_by(Vpn,Kontext)%>%
  summarise(F1 = mean(F1))
# zuerst mitteln (da es mehrere Wiederholungen gibt)
ggplot(formAB.m) +
  aes(y = F1, x = Kontext) +
  geom_boxplot()

# dann die Differenz bilden:
formAB.diff = formAB.m%>%
  group_by(Vpn)%>%
  summarise(F1 = diff(F1))

shapiro.test(formAB.diff$F1) #Ok!
boxplot(formAB.diff$F1) # trotz eines Ausreissers nicht sig. unterschiedlich von einer Normalverteilung!!
t.test(formAB.diff$F1)
# T1 veraendert sich in Abhaengigkeit vom Kontext
# (t[5] =3.3, p < 0.05)

# auch moeglich:
ezANOVA(formAB.m, .(F1),.(Vpn),.(Kontext))
# gleiche Antwort, aber Angabenaenderung: (F[1,5] = 10.9, p < 0.05)



# 4. Diese Daten
dbwort.df
# enthaelt db-Werte, die in verschiedenen Woertern (Wort),
# produziert von mehreren Versuchspersonen, gemessen wurden.

# a) Inwiefern beeinflussten Vokale (V) und das Geschlecht (G) der Sprecher
# die db-Werte? Beantworten Sie diese Frage mit einer Abbildung und einem statistischen Test! 

# b) Laesst sich Ihr Befund auf alle 6 Woerter verallgemeinern?
# Erstellen Sie zur Beantwortung dieser Frage eine neue Abbildung
# und eine andere statistische Analyse!
#a)
ggplot(dbwort.df) +
  aes(y = db, x=G,col=V) +
  geom_boxplot()
with(dbwort.df,table(Vpn,V))
with(dbwort.df,table(Vpn,G))
with(dbwort.df,table(Wort,V))
with(dbwort.df,table(Wort,G))
dbwort.lmer = lmer(db~V*G + (V|Vpn) + (V+G|Wort),data = dbwort.df)
dbwort.step = step(dbwort.lmer)
anova(get_model(dbwort.step))
# Sowohl V (F[1,8] = 29.8, p < 0.001) als auch G (F[1,8] = 11.1, p < 0.05) 
# hatten sig. Einfluesse auf die db-Werte,
# und es gab eine sig. Interaktion zwischen V und G (F[1,8] = 7.5, p < 0.05).
db.ph = pairs(emmeans(get_model(dbwort.step),~V:G))
phsel(db.ph,1)
phsel(db.ph,2)
# a und i unterschieden sich bei den Maennern (p < 0.01), nicht aber bei Frauen,
# Sig. Unterschiede zwischen Maennern und Frauen gab es zwar bei /a/ (p < ),
# nicht jedoch bei /i/.

# b) Laesst sich Ihr Befund auf alle 6 Woerter verallgemeinern?
ggplot(dbwort.df) +
  aes(y = db, x=G,col=V) +
  geom_boxplot() +
  facet_wrap(~Wort)

ezANOVA(dbwort.df,.(db),.(Vpn),.(V,Wort),between = .(G))
#N.B.: Greenhouse-Geiser-Korrektur bei "Wort" wäre:
0.5759614*40
0.5759614*5
# "Ja, der Befund laesst sich verallgemeinern, gab es doch keine einzige 
# Interaktion, an der Wort beteiligt war." 
# Damit ist die Frage eigentlich schon beantwortet, und wir muessen nichts mehr tun.
#
#

################Fuer ganz Fleissige (ohne Extrapunkte): ##################################################
# Stattdessen zeigte eine ANOVA
# sig. Effekte von G (F[1,8] = 11.1, p < 0.05), von V(F[1,8] = 29.8, p < 0.001), 
# von Wort (F[4.67,37.37] = 1195.5, p < 0.001), und eine Interaktion zwischen
# G und V (F[1,8] = 7.5, p < 0.05).
# N.B. Dies sind die gleichen F-Werte fuer G, V, und der G:V-Interaktion wie im Mixed Model!
# da bei MMs Schätzmethoden angewendet werden, können trotzdem die p-Werte LEICHT abweichen;
# hier sind aber (da jeweils sowohl bei MMs und ANOVA von den Freiheitsgraden [1,8] ausgegangen wird) 
# bei G und bei V und bei der V:G-Interaktion auch die p-Werte bei MM und ANOVA identisch 
# (von Rundungsfehlern abgesehen)

#im Vergleich nochmal:
ezANOVA(dbwort.df,.(db),.(Vpn),.(V,Wort),between = .(G))$ANOVA
#2        G   1   8   11.1428292 1.026028e-02     * 0.5403048577
#3        V   1   8   29.8298201 6.003429e-04     * 0.3444898938
#4      G:V   1   8    7.5290588 2.529576e-02     * 0.1171099445
anova(get_model(dbwort.step))
#  V   126.660 126.660     1     8 29.8298 0.0006003 ***
#  G    47.313  47.313     1     8 11.1428 0.0102603 *  
#  V:G  31.969  31.969     1     8  7.5291 0.0252958 *  

#Vorsicht: In diesem Fall ist das so, weil wir MMs und ANOVA
# ueber die gleichen Daten rechnen. Meistens müssen wir 
# fuer ANOVA mitteln (und reduzieren damit die Datenmenge, und damit auch die Zufallsvariation)
# wo wir sonst ein MM rechnen würden; vergleichen wir die Ergebnisse zwischen MM und ANOVA,
# ist in den meisten Fällen nicht damit zu rechnen, dass die F-Werte etc. identisch sind,
# da wir zumeist die MMs über den groesseren Datensatz rechnen, und die ANOVA über gemittelte Daten.
# Mitteln war hier nicht noetig, da es in der ANOVA einen zusaetzlichen Fixed Factor gab.
# Daher hier ausnahmsweise identische F-Werte bei MM und ANOVA fuer die beiden Modellen gemeinsamen 
# Fixed Factors G, V, und G:V-Interaktion.



# Will man nun post-hoc-Tests nur ueber V:G-Paarungen rechnen,
# muesste man ueber die Woerter mitteln:

dbwort.m = dbwort.df%>%
  group_by(Vpn,V,G)%>%
  summarise(db = mean(db))
ezANOVA(dbwort.m,.(db),.(Vpn),.(V),between = .(G))
ph = phoc(dbwort.m,.(db),.(Vpn),.(V,G))
phsel(ph$res,1)
phsel(ph$res,2)
# a und i unterschieden sich bei den Maennern (p < 0.05), nicht aber bei Frauen,
# Sig. Unterschiede zwischen Maennern und Frauen gab es zwar bei /a/ (p < 0.05),
# nicht jedoch bei /i/.