library(lmerTest)
library(lattice)
source(file.path(pfadu, "phoc.txt"))
source(file.path(pfadu, "ph.step.R"))

# Mixed Model
#
########################## Frage 1
#  In diesen Daten
x24 = read.table(file.path(pfadu, "x24.txt"))
# wurden für 3 Vokale (V) Entfernung zum Vokalmittelpunkt (ent) 
# für verschiedene Sprecher (Vpn), die verschiedene Wörter (Wort) produziert haben. 
# Inwiefern werden die Entfernungen vom Vokal beeinflusst?
# Bild
bwplot(ent ~ V, data = x24)

# V ist ein fixed factor
# Vpn, Wort sind random factors

# within (V|Vpn)
with(x24, table(Vpn, V))
# within (V|Wort)
with(x24, table(Wort, V))

# MM
x24.lmer = lmer(ent ~ V + (V|Vpn) + (V|Wort), data = x24)
(x24.step = step(x24.lmer))
#Fixed effects:
#  Sum Sq Mean Sq NumDF DenDF F.value elim.num  Pr(>F)
#V 24.105 12.0525     2   803 23.5594     kept < 1e-07

# Die Entfernungen sind signifikant vom Vokal beeinflusst worden 
# (F[2, 803] = 23.6, p < 0.001).
(phx24=ph.step(x24.step,"bonferroni"))
# Die Entfernungen unterscheiden sich signifikant zwischen a und i (p < 0.001), 
# zwischen a und u (p < 0.001) und zwischen i und u (p < 0.05), wie bonferroni-
# korrigierte t-tests zeigten.

########################## Frage 2

#  Diese Studie von Bodo Winter
pl = read.table(file.path(pfadu, "pl.df.txt"))
# siehe auch: http://arxiv.org/pdf/1308.5499.pdf
# befasst sich mit der Beziehung zwischen f0 (frequency), Höflichkeit (attitude), 
# und Gender. Höflichkeit hat zwei Stufen: pol (höflich) und inf (normal). 
# Die f0-Daten sind von verschiedenen Versuchspersonen (subject) und in 
# verschiedenen Sprechsituationen (scenario) erhoben worden. 
# Inwiefern wird f0 von der Höflichkeit und vom Gender beeinflusst?

# welche fixed, random
# fixed: attitude, gender
# random: subject, scenario
# (FF|subject) oder (1|subject)
# (FF|scenario) oder (1|scenario)

# within (attitude|scenario)
with(pl, table(scenario, attitude))
# within (attitude|subject)
with(pl, table(subject, attitude))
# within (gender|scenario)
with(pl, table(scenario, gender))
# between (1|subject)
with(pl, table(subject, gender))

# Bild
bwplot(frequency ~ attitude | gender, data = pl, layout=c(2,1))

pl.lmer = lmer(frequency ~ attitude * gender + (attitude+gender|scenario) + (attitude|subject), data = pl)

# Prüfstatistik
(pl.step = step(pl.lmer))
#Fixed effects:
#  Sum Sq   Mean Sq NumDF DenDF F.value elim.num Pr(>F)
#attitude:gender  1255.485  1255.485     1 69.05  1.9697        1 0.1650
#attitude         8056.185  8056.185     1 70.05 12.4729     kept 0.0007
#gender          17225.135 17225.135     1  4.01 26.6686     kept 0.0066

# f0 wurde signifikant beeinflusst von attitude 
# (F[1, 70.1] = 12.5, p < 0.001) und von 
# gender (F[1, 4.0] = 26.7, p < 0.01) und es gab keine signifikante Interaktion zwischen diesen Faktoren.

# Keine Interaktiuoin, also kein post-hoc notwendig




########################## Frage 3
# Diese Daten:
asp = read.table(file.path(pfadu, "asp.txt"))
# zeigen Dauerwerte von der Aspiration, die in verschiedenen Wörtern und von verschiedenen 
# Versuchspersonen produziert wurden.  
# Inwiefern wird die Aspirationsdauer von der Artikulationstelle (Faktor Kons) und von der Betonung (Faktor Bet) 
# beeinflusst?
with(asp, table(Kons, Wort))
with(asp, table(Bet, Wort))
# also (1|Wort)
with(asp, table(Kons, Vpn))
with(asp, table(Bet, Vpn))
# also (Kons + Bet | Vpn) 
asp.lmer=lmer(d ~ Kons * Bet + (Kons + Bet|Vpn) + (1 | Wort),data=asp)
(asp.step=step(asp.lmer))
(phasp=ph.step(asp.step,"bonferroni"))
# Bonferroni-korrigierte post-hoc-t-test zeigten weiterhin, dass sich k und t 
# nur in unbetonter Bedingung (p < 0.001), nicht aber in betonter, unterschieden, und 
# dass sowohl k (p < 0.001) als auch t (p < 0.001) sich je nach Betonungsbedingung 
# unterschieden.
# phoc(phasp$res,1) #leider scheitert hier phoc; daher bitte nicht laufen lassen
########################## Frage 4
# In diesen Daten:
laerm=read.table(file.path(pfadu, "laerm.txt"))
# wurden Reaktionszeiten von verschiedenen Versuchspersonen
# auf verschiedene Wörter gemessen. Inwiefern wird  die Reaktionszeit 
# vom Lärm (Faktor Laerm) und  von der Altersgruppe der Versuchsperson beeinflusst?

head(laerm)
bwplot(rt~Laerm | Alter, data=laerm)
#rt~Laerm*Alter+(?|Wort)+(?|Vpn)
with(laerm,table(Laerm,Wort))
with(laerm,table(Alter,Wort))
# also (Laerm+Alter|Wort)
with(laerm,table(Laerm,Vpn))
with(laerm,table(Alter,Vpn))
# also (Laerm|Vpn) # da Alter nicht innerhalb einer Vpn variiert
laerm.lmer=lmer(rt~Laerm*Alter+(Laerm+Alter|Wort)+(Laerm|Vpn),data=laerm)
(laerm.step=step(laerm.lmer))
# Die Reaktionszeiten wurden von Laerm beeinflusst (F[1,2.23]=22.2, p < 0.05), 
# jedoch nicht vom Alter der Versuchspersonen. (Außerdem gab es keine Interaktion zwischen Laerm und
# Alter, weshalb kein post-hoc-Test notwendig war (auch, weil der signifikante Faktor
laerm$Laerm 
# nur zwei Stufen hat)).

########################## Frage 5
# In diesen Daten:
stefan = read.table(file.path(pfadu, "stefan.txt"))
# wurde F2 (f2mid) in verschiedenen Wörtern (Word) produziert
# von verschiedenen Versuchspersonen (Vpn) gemessen. Inwiefern wird
# F2 vom Tempo und vom Vokal (Faktor (V)) beeinflusst?
head(stefan)
bwplot(f2mid~Tempo,data=stefan)
bwplot(f2mid~V,data=stefan)
bwplot(f2mid~V|Tempo,data=stefan)

with(stefan,table(Word,Tempo)) #--> (Tempp|Word)
with(stefan,table(Word,V)) # --> (1|Word)
with(stefan,table(Vpn,Tempo)) # --> (Tempo|Vpn)
with(stefan,table(Vpn,V)) #--> (V|Vpn)



stefan.lmer=lmer(f2mid~Tempo*V+(Tempo|Word)+(Tempo+V|Vpn),data=stefan)
(stefan.step=step(stefan.lmer)) # Vorsicht: Warnmeldung ignorieren
#Fixed effects:
#  Sum Sq     Mean Sq NumDF  DenDF F.value elim.num Pr(>F)
#Tempo      438.6722    438.6722     1 170.04  0.0632     kept 0.8017   #Vorsicht: kept heißt nicht immer "ist signifikant"
#V       110850.5147 110850.5147     1  20.16 15.9807     kept 0.0007
#Tempo:V  53793.3120  53793.3120     1 170.04  7.7551     kept 0.0060

# Teilantwort eins: Tempo hatte keinen sig. Einfluss auf F2-Frequenzen, Vokalkategorie jedoch 
# schon (F[1,20.2]=16.0, p < 0.001); es gab auch eine signifikante Interaktion zwischen Tempo und Vokal
# (F[1,170.0]=7.8, p < 0.01).
stefan.ph=ph.step(stefan.step)
# phsel(stefan.ph$res,1) leider Fehlermeldung
stefan.ph
# Teilantwort 2: Während sich Tempounterschiede weder auf F2 in o noch in e auswirkten, unterschieden sich
# F2 aus o und e sowohl in schneller (p < 0.01) als auch langsamer (p < 0.005) Bedingung.
########################## Frage 6

#  In diesen Daten
lex = read.table(file.path(pfadu, "lex.txt"))
# wurden Reaktionszeiten von verschiedenen Sprechern (Subj) auf verschiedene Wörter (Word) gemessen. 
#Die Sprecher waren entweder Muttersprache englisch oder nicht (Faktor Lang). 
# Zusätzlich gibt es eine Verschlüsselung für die Wortlänge (Length): je kleiner die Zahl, 
# umso kürzer das Wort.  I
# nwiefern werden die Reaktionszeiten von der Sprache und  der Wortlänge beeinflusst?

#Die Besonderheit hier:
# während
lex$Lang
# ein steistufiger Faktor ist, ist
lex$Length
# eigentlich numerisch. Trotzdem kann das mit lmer() gelöst werden ...

bwplot(rt~Lang,data=lex)
xyplot(rt~Length,data=lex)


with(lex, table(Lang, Subj))#-->(1|Subj)
with(lex, table(Lang, Word))#-->(Lang,Word)

with(lex, table(Length, Subj))#-->(Length|Subj)
with(lex, table(Length, Word))#-->(1|Word)

# in zwei Tests aufdröselm:
sprache.lmer = lmer(rt ~ Lang + (1|Subj) + (1+Lang|Word), data = lex)
step(sprache.lmer) # Die Reaktionszeiten wurden von Sprache beeinflusst (F[1,19.2]=6.3, p < 0.05)
#und
length.lmer = lmer(rt ~ Length + (Length|Subj) + (1|Word), data = lex)
step(length.lmer) # Außerdem wurden die Reaktionszeiten von der Länge beeinflusst (F[1,53.1]=14.7, p < 0.001)

# mehr müssen wir hier nicht beantworten
# nur als Fleißaufgabe
# geht es aber durchaus auch in einem Modell:
lex.lmer = lmer(rt ~ Lang * Length + (Length|Subj) + (Lang|Word), data = lex)
step(lex.lmer)
# Die Reaktionszeiten wurden von Sprache beeinflusst (F[1,19.0]=6.3, p < 0.05),
# die auch von der Länge (F[1,57.2]=19.1, p < 0.001)
# Außerdem gab es eine signifikante Interaktion zwischen Länge und Sprache (F[1,18.5]=8.3, p< 0.01).

# Da Length numerisch ist, können wir hier natürlich keinen Post-hoc-t-Test rechnen.
# (es sei denn wir würden LEngth mit factor(Length) künstlich zu einem 8-Kategorien-Faktor machen,
# was wir uns an dieser Stelle ersparen)
# Dieser plot hier
xyplot(rt~Length|Lang,data=lex, type = c("p", "smooth"))
# zeigt uns jedoch, dass der Einfluss von Length bei Lang=="Other" offenbar stärker ausgeprägt ist
# als bei Lang=="English", da bei Other der Anstieg der rt-Werte mit zunemender "Length" 
# deutlicher ist als bei English.
