#VOR der Vorlesung packages installieren (also '#' vor den Zeilen 3 und 4 entfernen und den Code in R laufen lassen):
# ggf.: 
# install.packages('ggplot2')
# install.packages('gridExtra')

# Bibliotheken und Data-Frames laden
library(ggplot2)
#VOR der Vorlesung:
#Zeilen 5-9 an einem Ort mit stabiler Internetverbindung durchführen
asp = read.table(file.path(pfadu, "asp.txt"))
coronal = read.table(file.path(pfadu, "coronal.txt"))
int.df = read.table(file.path(pfadu, "intdauer.txt"))
v.df = read.table(file.path(pfadu, "vdata.txt"))
save(list=c("asp","coronal","int.df","v.df"),file=file.path(pfad, "L2.RData"))

#dann
load(file.path(pfad, "L2.RData"))
#############################################################################
# 0. Einleitung
############################################################################ 
# Zur Erinnerung, df ist ein Data-Frame
# Ein Data-Frames besteht aus 
# Reihen (Beobachtungen) 
# und
# Spalten (Variablen)
#
# class(df), head(df), dim(df), nrow(df), ncol(df), df[n,m]: Reihe n, Spalte m

# Prüfen, ob es ein Data-Frame ist:
class(coronal)
# die ersten paar Beobachtungen:
head(coronal)

# Reihen und Spaltenanzahl

# Die Spaltennamen oder Variablen

# Zugriff auf Elemente
# 'ai[m,]' = Reihe m
# 'ai[,m]' = Spalte m
# Für Data-Frames kann man mit '$Namen' auf die Spalten zugreifen

#############################################################################
# 1. Numerische und kategoriale Variablen
############################################################################
# Die Spalten können numerische und kategoriale Variablen enthalten

# Numerische Variablen: Ganzzahlen oder kontinuierlich
#
class(asp$d)
# oder
with(asp, class(d))
# [1] "numeric"

class(int.df$Dauer)
# [1] "integer"

# Kategoriale Variablen sind Faktoren mit Stufen:
class(coronal$Socialclass)
# [1] "factor"

# Die Stufen davon. z.B. die ersten paar anschauen...
coronal$Socialclass[1:10]
# oder
levels(coronal$Socialclass)

# Die Inhalte von Faktoren können Buchstaben oder Zahlen sein;
# diese werden aber grundsätzlich anders behandelt als numerische Daten oder Zeichenketten,
# da bei der Klasse 'factor' wiederholt auftauchende Symbole als einer Kategorie angehörig erkannt werden.


##########################################################
# 2. Typische Untersuchungen in der Phonetik
##########################################################
# Wird y von x beeinflusst?
# 
# 1. y = numerisch, x = kategorial
# 1.1 z.B. unterscheiden sich /i, e, a/ in der Dauer?
# 1.2 = Inwiefern wird die Dauer (y) vom Vokal (x) beeinflusst?
# 1.3 Abbildungen dafür: geom_boxplot() 
# auch: geom_histogram()  und stat_density()

# 2. y = kategorial, x = kategorial
# 2.1 z.B. Wörter wie Sohn, Sonne... können mit /s/ oder /z/ produziert werden.
# Kommt /s/ eher in Bayern und /z/ eher in Hamburg vor?
# 2.2 = Inwiefern wird die Stimmhaftigkeit (y: ob /s/ oder /z/) vom Dialekt (x: oben Bayern oder Hamburg) V) beeinflusst?
# 2.3 Abbildungen dafür: geom_barchart()

# 3. y = numerisch, x = numerisch 
# 3.1 z.B. gibt es eine größere Dauer bei einer größeren Mundöffnung?
# 3.2 Inwiefern wird die Dauer (y)
# von der Mundöffnung (x) beeinflusst?
# 3.3 Abbildung dafür: xy-Plot über geom_point() oder geom_line()

# Zusammenfassung: 
# 1. y = numerisch, x = kategorial: geom_boxplot()  Auch geom_histogram(), stat_density()
# 2. y = kategorial, x = kategorial: geom_bar()
# 3. y = numerisch, x = numerisch: geom_point(), geom_line()

############################################################################
# 3. geom_boxplot(): y = numerisch, x = kategorial
############################################################################
# Handbuch zu R und Abbildungen
# http://www.cookbook-r.com/
# zu ggplot2 (gg = grammar of graphics)
# http://docs.ggplot2.org/current/

head(asp)
# Inwiefern wird die Aspirationsdauer (d) von der Artikualtionsstelle (Kons) beeinflusst?
# y: d    (numerisch)
# x: Kons (kategorial)

# Syntax in ggplot()
# A + B + C + D + ...
# A, B, C... sind modulare Befehle, die durch + aneinandergehängt werden.
# Hier:
# A. data-frame + 
#     B. Variablen + 
#     C. Art der Abbildung
ggplot(asp) + 
  aes(y = d, x = Kons) + 
  geom_boxplot()

# oder in getrennten Komponenten ablegen.
# A
p1 = ggplot(asp)
# B
p2 = aes(y = d, x = Kons)
# C
p3 = geom_boxplot()
# A + B + C
p1 + p2 + p3
# oder A + B + C ablegen
erg = p1 + p2 + p3
# Bild
erg

# Weitere Informationen zum Boxplot.
# Die Linie ist der Median;  der 'Box' ist der interquartale Bereich
# 
############################# Median und Interquartale Bereich
# Median (oder 50% Quantil). 
# Der mittlere Wert in der sortierten Reihenfolge
x = c(15, 19, -1, 10, 11, 18, 90000)
median(x)

# das gleiche
quantile(x, .5)

# Nach Sortierung sieht man, dass 15 an der mittleren Stelle vorkommt.
sort(x)
#  -1    10    11    15    18    19 90000

#N.B.: Wenn es eine gerade Anzahl an Beobachtungen gibt, ist das arithmetische Mittel der beiden mittleren
# Zahlen aus einem sortierten Zahlenvektor der Median-Wert!
y = c(15, 19, 13,-1, 10, 11, 18, 90000)
median(y)
sort(y)
mean(c(13,15))

#Zurück zu x
# Es gibt auch andere Bruchteile von Quantilen. Insbesondere
# wird von dem interquartilen Bereich Gebrauch gemacht, um die Streueung einzuschätzen
IQR(x)

# das gleiche
quantile(x, .75) - quantile(x, .25)
#da
quantile(x, .75)
quantile(x, .25)

############################################################################
# 4. geom_bar(): y ist kategorial, x ist kategorial
############################################################################
head(coronal)
# Inwiefern wird die Artikulationsstelle (Fr) von der Region (Region) beeinflusst?
# y: Fr (kategorial)
# x: Region (kategorial)

p1 = ggplot(coronal)
p2 = aes(fill = Fr, x = Region)
# Um Häufigkeiten darzustellen
p3 = geom_bar()
p1 + p2 + p3
# Um die Bars der Stufen von x nebeneinander zu stellen
p4 = geom_bar(position="dodge")
p1 + p2 + p4

# Um Proportionen darzustellen
p5 = geom_bar(position="fill")
p1 + p2 + p5
#oder
ggplot(coronal) +
  aes(fill = Fr, x = Region) +
  geom_bar(position="fill")

############################################################################
# 5. geom_point(), geom_line():  y ist numerisch, x ist numerisch
############################################################################  
# Inwiefern wird die Dauer (Dauer) von der Intensität (dB) beeinflusst in dem Data-Frame int.df()
# y: Dauer (numerisch) 
# x: dB (numerisch)
head(int.df)
# Nur Linie
ggplot(int.df) +  
  aes(x = dB, y = Dauer) + 
  geom_line() 
#der aes()-Teil kann auch direkt bei ggplot() eingegeben werden:
ggplot(int.df,aes(x = dB, y = Dauer)) +  
  geom_line() 

# Nur Punkte
ggplot(int.df, aes(x = dB, y = Dauer)) + 
  geom_point() 
# Beide
ggplot(int.df, aes(x = dB, y = Dauer)) + 
  geom_line() + 
  geom_point()

############################################################################
# 6. Achsenbeschriftung: + xlab() + ylab() + ggtitle()
############################################################################  
# Früherer Boxplot-Befehl
p1 = ggplot(asp) + 
  aes(y = d, x = Kons) + 
  geom_boxplot()
# Etikettierung für die x-Achse
p2 = xlab("Artikulationsstelle")
# Etikettierung für die y-Achse
p3 = ylab("Dauer (ms)")
# Titel
p4 = ggtitle("Boxplot-Daten")
p1 + p2 + p3 + p4

# Früherer Barchart-Befehl
bar.p = ggplot(coronal) + 
  aes(x = Region, fill = Fr) + 
  geom_bar(position = "fill")
x.p = xlab("Region")
y.p = ylab("Proportion")
t.p = ggtitle("Proportionale Aufteilung von Frikativen")
bar.p + x.p + y.p + t.p

############################################################################
# 7. Bereiche: +coord_cartesian(xlim=c(,),ylim=c(,))
############################################################################

# Früherer geom_bar() Befehl
p1 = ggplot(int.df, aes(dB, Dauer)) + geom_point() 
# xlim und ylim
p2 = coord_cartesian(xlim=c(10,60),ylim=c(30,280))
p1 + p2

# Vorsicht: man kÃ¶nnte hier auch einfach +xlim(10,60) + ylim(30,280) schreiben,
# aber auf diese Weise werden die nicht-geplotteten Daten einfach ignoriert,
# was problematisch ist, wenn man Funktionen auf die Daten anwenden will, 
# z.B. Regressionslinien überlagern (siehe Vorlesung Ende Mai);
# siehe z.B. https://i.stack.imgur.com/ciyvf.png


############################################################################
# 8. Farben
############################################################################

# Farbenauswahl
# http://www.stat.columbia.edu/~tzheng/files/Rcolor.pdf
# auch:
colors()

############################ geom_boxplot()
########## Der vorige Befehl
ggplot(asp) + 
  aes(y = d, x = Kons) + 
  geom_boxplot()
# Default-Farben
# Jeder Box mit unterschiedlichen Farben gefüllt
ggplot(asp) + 
  aes(y = d, x = Kons, fill = Kons) + 
  geom_boxplot()
# Jeder Box mit verschiedenen Umrissfarben
ggplot(asp) + 
  aes(y = d, x = Kons, col = Kons) + 
  geom_boxplot()

# Eigene Farben wählen
farben = c("green", "red")
# gefüllt
ggplot(asp) + aes(y = d, x = Kons) + geom_boxplot(fill = farben)
# Umriss
ggplot(asp) + aes(y = d, x = Kons) + geom_boxplot(col = farben)

############################ geom_bar()
########## Der vorige Befehl
p1 = ggplot(coronal) + 
  aes(x = Region, fill = Fr) + 
  geom_bar()
p1
# Eigene Farben wählen
farben = c("yellow", "green")
p2 = scale_fill_manual(values = farben) 
p1 + p2


############################ geom_point(), geom_line()

########## Der vorige Befehl
ggplot(int.df, aes(x = dB, y = Dauer)) +  
  geom_point() + 
  geom_line()
# col: Farbe. pch: plotting character. Siehe http://www.endmemo.com/program/R/pchsymbols.php
# cex: character expansion:cex =2 bedeutet zwei Mal die übliche Größe
ggplot(int.df, aes(x = dB, y = Dauer)) +  
  geom_point(col="purple", pch=0, cex=2) + 
  geom_line(col = "pink")
# lwd: Liniendichte
ggplot(int.df, aes(x = dB, y = Dauer)) +  
  geom_point(col="purple", pch=0, cex=2) + 
  geom_line(col = "pink", lwd=2)

############################################################################
# 9. Schriftzeichengröße
############################################################################
# Der Default-Schriftzeichen-Größe der Achsenbeschriftung und Titel ist 11. Für die Legende etwas weniger (eventuell 10)

p1 = ggplot(asp) + 
  aes(y = d, x = Kons) + 
  geom_boxplot() + 
  xlab("Artikulationsstelle") + 
  ylab("Dauer (ms)") + 
  ggtitle("Boxplot-Daten")
p1

# Keine Ã„nderung
p11 = theme(text = element_text(size=11))
p1 + p11

# Schriftzeichen-Größe 16
p16 = theme(text = element_text(size=16))
p1 + p16

# Nur Achsenbeschriftung vergrößern
q24 = theme(axis.text = element_text(size=24))
p1 + q24

# Achsenbeschriftung und Bildetikettierungen unterschiedlich vergrößern
p30 = theme(text = element_text(size=30))
p1 + q24 + p30

############################################################################
# 10. Mehrere Bilder nebeneinander
############################################################################
# ggf. install.packages(gridExtra)
library(gridExtra)

p1 = ggplot(asp, aes(y = d, x = Kons))  + 
  geom_boxplot()
p2 = ggplot(coronal) + 
  aes(x = Region, fill = Fr) + 
  geom_bar(position = "fill")
p3 = ggplot(int.df, aes(dB, Dauer)) + 
  geom_line() + 
  geom_point()
grid.arrange(p1, p2, p3,  ncol=1, nrow =3)


############################################################################
# 11. Weitere Modifizierungen
#############################################################################
help(theme)



