library(ggplot2)
library(dplyr)
library(ez)

###########################################################################
# 1. 'Uebungen'
###########################################################################
# 1. 
ger = read.table(file.path(pfadu, "ger.df.txt"))
# Die Bewegung (mm) des Kiefers wurde von 10 Sprechern mit zwei verschiedenen Geraeten erhoben.
# Haben die Geraete einen Einfluss auf die Messwerte?
# Testen ob die Werte gepaart sind
with(ger, table(Vpn, Geraet))
# Differenzen berechnen
ger.d = ger %>%
  group_by(Vpn) %>%
  summarise(kiefer = diff(kiefer))
# sind diese Werte normalverteilt?
shapiro.test(ger.d$kiefer)
# oder
with(ger.d, shapiro.test(kiefer))
# Bild
boxplot(ger.d$kiefer)
#oder
ggplot(ger.d) +
  aes(y=kiefer,x=factor(0)) +
  geom_boxplot()

# t-test
t.test(ger.d$kiefer)
# oder
with(ger.d, t.test(kiefer))
# Konsistent mit der Abbildung wurden die 
# Kieferpositionswerte signifikant (t[9] = 5.2, p < 0.001)
# von den Geraeten beeinflusst.

# Loesung mit ANOVA
ezANOVA(ger, .(kiefer), .(Vpn), .(Geraet))
# Konsistent mit der Abbildung wurden die Kieferpositionswerte 
# signifikant (F[1, 9] = 5.2, p < 0.001)
# von den Geraeten beeinflusst.


# 2.
# Fuer den vorhandenen Data-Frame 'trees' pruefen Sie
# inwiefern Height aus Volume  vorhersagbar ist. 
# Schaetzen Sie Height ein bei einem Volumen von 110.

head(trees)


plot(Height ~ Volume, data = trees)

# Regression
trees.lm = lm(Height ~ Volume, data = trees)
summary(trees.lm)
# Es gibt eine signifikante lineare Beziehung zwischen
# Volume und Height (R^2 = 0.36, F[1,29] = 16.2, p < 0.001)

# Bei lm() koennen wir die Voraussetzungen erst nach
# erfolgter Modellierung pruefen:
# Weichen die Residuals von einer Normalverteilung ab?
shapiro.test(resid(trees.lm))
# Nein
# W = 0.9822, p-value = 0.8707

# Gleichmaessige Verteilung um die 0-Linie?
# Mehr oder weniger, ja.
plot(resid(trees.lm))

# Autokorrelation?
# Nein - die meisten Werte - und vor allem den zweiten Wert -
# liegen innherhalb den blauen Linien
acf(resid(trees.lm))

# Daher koennen wir das Problem loesen
# Abbildung mit Regressionslinie
plot(Height ~ Volume, data = trees)
abline(trees.lm)

# Alternativ mit ggplot()
coef = coef(trees.lm)
p1 = ggplot(trees.lm) + aes(y = Height, x = Volume) + geom_point()
p2 = geom_abline(intercept = coef[1], slope = coef[2])
p1 + p2

#Das Folgende ist eine Wiederholung (da wir jetzt wissen, dass wir das machen duerfen)
# Statistik
summary(trees.lm)

# Es gibt eine signifikante lineare Beziehung zwischen Height und Volume
# (R^2 = 0.36, F[1,29] = 16.2, p < 0.001).

# Die eingeschaetzte Hoehe bei einem Volumen von 110:
predict(trees.lm, data.frame(Volume = 110))

#oder die Formel SLOPEWERT * x + INTERCEPTWERT (wobei hier x=110), also hier:
0.2319 * 110 + 69.0034

# ggf. Bild neu malen mit diesem Wert
xlim = c(10, 110)
ylim = c(60, 100)
plot(Height ~ Volume, data = trees, xlim=xlim, ylim = ylim)
abline(trees.lm)
points(100, 92.19335, col = 2)
abline(v = 100, h = 92.19335, lty=2, col=2)







# 3. 
form = read.table(file.path(pfadu, "f2.int.df.txt"))
# 25 Versuchspersonen produzierten /ipi/ und
# F2 wurde im Vokal kurz vor dem /p/ und kurz nach dem /p/ gemessen.
# Hat die Position (ob davor oder danach) einen Einfluss auf F2?
# Pruefen ob gepaart
with(form, table(Vpn, Pos))

# Differenz (da gepaart)
u = form %>%
  group_by(Vpn) %>%
  summarise(F2 = diff(F2))

# Ein Boxplot dieser Differenzen malen
boxplot(u$F2)
# oder
ggplot(u) + aes(y = F2, x= factor(0)) + geom_boxplot()

# sind diese Werte normalverteilt?
shapiro.test(u$F2)

# t-test
t.test(u$F2)
# F2 wird von der Position signifikant beeinflusst (t[24] = 2.4, p < 0.05).
# Loesung mit ANOVA
ezANOVA(form, .(F2), .(Vpn), .(Pos))
# F2 wird von der Position signifikant beeinflusst (F[1, 24] = 5.9, p < 0.05).


# 4. 
# Fuer diese Daten wurde F2 - F1 (Hz) in einem Vokal
# zwischen 1910 und 1997 gemessen. aendert sich F2-F1 mit der Zeit?
# Wenn ja, schaetzen Sie den Wert von F2-F1 ein im Jahr 2012.

jahr = c(1910, 1920, 1930, 1940, 1950, 1959, 1969, 1978, 1987, 1997)
fdat = c(139, 149, 157, 175, 216, 303, 390, 449, 462, 487)
plot(fdat~jahr)
abline(lm(fdat~jahr))
shapiro.test(resid(lm(fdat~jahr)))
plot(resid(lm(fdat~jahr)))
acf(resid(lm(fdat~jahr)))
summary(lm(fdat~jahr))
# Der Wert F2-F1 aendert sich in Abhaengigkeit von
# der Zeit signifikant (R^2=0.93, F[1,8]=107.2, p < 0.001)

predict(lm(fdat~jahr),data.frame(jahr=2012))
#oder
coef(lm(fdat~jahr))[2]*2012+coef(lm(fdat~jahr))[1]
# 2012 soll laut Modell der Wert bei 566 Hz liegen. 
# (Hinterfragen Sie jedoch die Sinnhaftigkeit solcher Vorhersagen!)

# 5. 
# Fuer diese Daten:
zweit = read.table(file.path(pfadu, "zweit.df.txt"))
# nahmen Versuchspersonen (Vpn) an einem Test in einer zweiten Sprache teil 
# (l2score). Pruefen Sie durch eine Abbildung und statistischen Test, 
# ob l2score durch Geschlecht (G) beeinflusst wird.
# Geschlecht ist eindeutig between. Gibt es aber einen Wert pro Sprecher?
with(zweit, table(Vpn, G))
# Abbildungen: kaum Unterschiede
ggplot(zweit) + aes(y = l2score, x = G) + geom_boxplot() + ylab("Score") + xlab("Geschlecht")
ggplot(zweit) + aes(x = l2score, col = G) + geom_density() + ylab("Score") + xlab("Geschlecht")

# Loesung mit t-test erstaunlicherweise signifikant - aber eventuell nur weil es so viele Sprecher gibt
t.test(l2score ~ G, data = zweit)
# l2score wurde signifikant vom Geschlecht beeinflusst (t[117.6] = 2.1, p < 0.05)
# Loesung mit ANOVA
ezANOVA(zweit, .(l2score), .(Vpn), between = .(G))
# l2score wurde signifikant vom Geschlecht beeinflusst (t[1, 118] = 4.3, p < 0.05)
# (da "Data is unbalanced" (= es gibt mehr Frauen als Maenner) 
# ist hier der p-Wert nicht mit jenem aus dem t.test() identisch)





# 6. 
# Die Grundfrequenz wurde in der selben Person
# in einem Zeitraum von 10 Jahren gemessen.
# Der erste Werte ist aus 1987, der letzte aus 1996
# 137.0   131.2   127.1   123.4   119.2   114.6   109.6   104.5   99.4    95.3
# aendert sich die Grundfrequenz mit der Zeit?
# Wenn ja, welchen Wert muesste f0 im Jahr 2000 gehabt haben?
grund = c(137, 131.2, 127.1, 123.4, 119.2, 114.6, 109.6, 104.5, 99.4, 95.3)
jahr = 1987:1996
plot(grund~jahr)
abline(lm(grund~jahr))
shapiro.test(resid(lm(grund~jahr)))
plot(resid(lm(grund~jahr)))
acf(resid(lm(grund~jahr)))
summary(lm(grund~jahr))
# Die Grundfrequenz sank signifikant mit den Jahren
# (R^2=0.99 (sic!, da die Daten fast auf der Linie liegen), 
# F[1,8]=4276, p <0.001)

# Gemaess der Vorhersage des Modells haette die Grundfrequenz 
# im Jahre 2000 bei einem Werte von
predict(lm(grund~jahr),data.frame(jahr=2000))
# ca. 77 Hz liegen muessen. 

#Waere auch so zu ermitteln gewesen:
coef(lm(grund~jahr))
-4.587273 * 2000 + 9251.683636
