# Folie 4 | 1. Set.seed und sample - Einführung 1 ----

# Beispiele für set.seed()
set.seed(544) # Der Zufallszahlengenerator startet mit dem internen Wert 544

# Mit Systemzeit, aber die ist in jedem Durchgang anders
set.seed(as.integer(Sys.time()))

# Besser: Startwert anzeigen und für spätere Wiederholungen notieren.
Startwert <- as.integer(Sys.time())
Startwert # (z.B. 1788947601) Diesen Wert rausschreiben und die beiden Zeilen auskommentieren
set.seed(1788947601)

# Folie 5 | 1. Set.seed und sample - Übung 1 ----

# 1. Startwert auf 100 setzen.
set.seed(100)

# 2. Aktuelle Systemzeit als Datum/Uhrzeit ausgeben.
Sys.time()

class(Sys.time())

# 3. Dieselbe Systemzeit in eine Ganzzahl umwandeln und ausgeben.
as.integer(Sys.time())

# 4. Diesen Wert als Startwert verwenden.
Startwert <- as.integer(Sys.time())
set.seed(Startwert)

# Folie 6 | 1. Set.seed und sample - Einführung 2 ----

# Beispiele für sample() - Werfen von Münzen
MoeglicheErgebnisse <- c("Kopf","Zahl") # "" weil es sich um Wörter handelt
sample(MoeglicheErgebnisse,3, replace = TRUE)

sample(MoeglicheErgebnisse,3, replace = FALSE) #scheitert, da Möglichkeiten < Würfe

Wahrscheinlichkeit <- c(0.2,0.8) # Zahl ist 4x so wahrscheinlich wie Kopf
sample(MoeglicheErgebnisse,3, replace = TRUE, Wahrscheinlichkeit) # gezinkte Münze


# Folie 7 | 1. Set.seed und sample - Übung 2 ----

# 1. Einen idealen Würfel zehnmal werfen.
MoeglicheErgebnisse <- 1:6
MoeglicheErgebnisse <- seq(from = 1, to = 6, by = 1)
sample(MoeglicheErgebnisse, 10, replace = TRUE)

# 2. Gezinkter Würfel: Wahrscheinlichkeiten in der Reihenfolge 1 bis 6.
Wahrscheinlichkeit <- c(1/12, 1/6, 1/6, 1/6, 1/6, 3/12)
sample(MoeglicheErgebnisse, 10, replace = TRUE, prob = Wahrscheinlichkeit)

# 3a. Sechs Ziehungen innerhalb eines Aufrufs ohne Zurücklegen.
sample(MoeglicheErgebnisse, 6, replace = FALSE, prob = Wahrscheinlichkeit)
# Jede Zahl kommt genau einmal vor. Die Gewichte beeinflussen die Reihenfolge.

# 3b. Sechs einzelne Würfe mit jeweils einer Ziehung.
sample(MoeglicheErgebnisse, 1, replace = FALSE, prob = Wahrscheinlichkeit)
sample(MoeglicheErgebnisse, 1, replace = FALSE, prob = Wahrscheinlichkeit)
sample(MoeglicheErgebnisse, 1, replace = FALSE, prob = Wahrscheinlichkeit)
sample(MoeglicheErgebnisse, 1, replace = FALSE, prob = Wahrscheinlichkeit)
sample(MoeglicheErgebnisse, 1, replace = FALSE, prob = Wahrscheinlichkeit)
sample(MoeglicheErgebnisse, 1, replace = FALSE, prob = Wahrscheinlichkeit)

# 4. Ein Spielzug: zwei Würfel werfen und ihre Augenzahlen addieren.
# Annahme: Für dieses Spiel verwenden wir zwei ideale Würfel.
sum(sample(1:6, 2, replace = TRUE))

# Folie 8 | 1. Set.seed und sample - Übung 3 ----

# Startwert 16: zunächst drei Würfe ohne erneutes Setzen des Startwerts.
set.seed(16)
sample(1:6, 1, replace = TRUE)
sample(1:6, 1, replace = TRUE)
sample(1:6, 1, replace = TRUE)

# Startwert erneut setzen und zwei Würfe ausführen.
set.seed(16)
sample(1:6, 1, replace = TRUE)
sample(1:6, 1, replace = TRUE)

# Startwert nochmals setzen und einen Wurf ausführen.
set.seed(16)
sample(1:6, 1, replace = TRUE)

# Dasselbe mit Startwert 13.
set.seed(13)
sample(1:6, 1, replace = TRUE)
sample(1:6, 1, replace = TRUE)
sample(1:6, 1, replace = TRUE)

set.seed(13)
sample(1:6, 1, replace = TRUE)
sample(1:6, 1, replace = TRUE)

set.seed(13)
sample(1:6, 1, replace = TRUE)

# set.seed() startet dieselbe Zufallsfolge wieder von vorne.

# Folie 9 | 2. rnorm() und verwandte Funktionen - Einführung 1 ----

# Ziehen von 10 Werten aus einer Normalverteilung mit
# dem Mittelwert 100 und der Standardabweichung 15
rnorm(10,100,15)

# Ziehen von 10 Werten aus einer Gleichverteilung mit
# dem Minimum 0 und dem Maximum 100
runif(10,0,100)

hist(runif(10,0,100))

# Ziehen von 10 Werten aus einer t-Verteilung mit 15 Freiheitsgraden
rt(10,15)

# Normalverteilung: Eine symmetrische, glockenförmige Verteilung, bei der Werte nahe am Mittelwert 
# häufig und extreme Werte zunehmend selten sind.

# Gleichverteilung: Eine Verteilung, bei der alle Werte innerhalb eines festgelegten Bereichs gleich 
# wahrscheinlich sind.

# t-Verteilung: Eine der Normalverteilung ähnliche, aber breiter auslaufende Verteilung, die besonders bei 
# kleinen Stichproben und unbekannter Populationsstandardabweichung verwendet wird.

# Simulieren von IQ-Test Ergebnissen von 20 Personen
# aus der Bevölkerung der Schweiz
# IQ-Scores haben in der Regel keine Nachkommastellen
ungerundeteWerte <- rnorm(20,100,15)
gerundeteWerte <- round(ungerundeteWerte,0)

# Histogramm ausgeben
hist(gerundeteWerte)


# Folie 11 | 2. rnorm() und verwandte Funktionen - Übung ----

# 1. Zehn normalverteilte Werte: Mittelwert 180, Standardabweichung 7.
rnorm(10,180,7)

# 2. Gewissenhaftigkeit: ganzzahlige T-Werte von 100 Personen.
ungerundeteWerte <- rnorm(100,50,10)
gerundeteWerte <- round(ungerundeteWerte,0)
gerundeteWerte

# direkt
hist(round(rnorm(100,50,10)))

hist(round(rnorm(100, 50, 10)),
     breaks = seq(20, 80, by = 5))

# 3. Fünf Werte aus einer F-Verteilung mit df1 = 3 und df2 = 20.
rf(5,3,20)
help(rf)

# 4. 10000 standardnormalverteilte Werte und ihr Histogramm.
# Standardnormalverteilung MW = 0 und SD = 1
Werte <- rnorm(10000,0,1)
hist(Werte)

# 5. Startwert 64; zehn Werte mit MW = 10 und SD = 2.
set.seed(64)
Werte <- rnorm(1000,10,2)
Werte
mean(Werte)
sd(Werte)
# 10 und 2 sind die Parameter der Population, aus der wir ziehen.
# Mittelwert und Standardabweichung der kleinen Stichprobe weichen
# aufgrund zufälliger Stichprobenschwankungen davon ab.


# Folie 12 | 3. replicate() - Einführung ----

# Ziehen von 10 Stichproben mit je 5 Werten aus einer Normalverteilung mit
# dem MW = 15 und der SD = 2
set.seed (100)
replicate(10, rnorm(5,15,2))
# Jede Spalte enthält eine Stichprobe; jede Zeile einen ihrer fünf Werte.

# Wichtig: Folgendes funktioniert nicht 
# (alle Stichproben haben die gleichen Werte)!
set.seed (100)
Stichprobe <- rnorm(5,15,2)
replicate(10,Stichprobe)
# Hier wird die bereits gezogene Stichprobe nur zehnmal wiederholt.


# Folie 14 | 3. replicate() - Übung ----

# 1. Zehn Stichproben mit je 20 Personen: Verträglichkeit als T-Werte.
Vertraeglichkeit <- replicate(10, round(rnorm(20,50,10),0))
Vertraeglichkeit
# 20 Zeilen = Personen innerhalb einer Stichprobe; 10 Spalten = Stichproben.

# 2. 20 Runden mit vier Spielenden und zwei Würfeln pro Zug.
Spiel <- replicate(20, replicate(4, sum(sample(1:6, 2, replace = TRUE))))
Spiel

# Innen: vier Züge pro Runde. Aussen: 20 Runden.
# Ergebnis: 4 Zeilen (Spielende) x 20 Spalten (Runden).
# Insgesamt 80 Züge mit 160 einzelnen Würfelwürfen.


# Folie 15 | 4. for-Schleife und while-Schleife - Einführung ----

Werte = 1:3 # (Vektor mit den Zahlen von 1 bis 3)
for (i in Werte) { # i enthält jeweils das aktuelle Element des Vektors, i darf auch anders heissen
  print(i) # Ergebnisse innerhalb der Schleife explizit ausgeben
  print("Hallo")
}

for (i in Werte) { # i enthält jeweils das aktuelle Element des Vektors, i darf auch anders heissen
  i # Ergebnisse innerhalb der Schleife explizit ausgeben
  "Hallo"
}

Werte = 1:3
Werte2 = c("Apfel", "Birne", "Pflaume")

for (i in Werte) {
  print(Werte2[4-i])
}

Werte = 1:6
for (i in Werte) {
  print(i^2)
}

# Folie 17 | 4. for-Schleife und while-Schleife - Übung 1 ----

# 1. Zehnmal "Test" ausgeben.
Werte = 1:10
for (i in Werte) {
  print("Test")
}

# 2. Fünfmal eine ideale Münze werfen und das Ergebnis ausgeben.
MoeglicheErgebnisse <- c("Kopf","Zahl")
Werte = 1:5
for (i in Werte) {
  print(sample(MoeglicheErgebnisse, 1, replace = TRUE))
}

# 3. Für jeden Monat den Namen und die Anzahl Tage ausgeben.
Monate <- c("Januar", "Februar", "März", "April", "Mai", "Juni",
            "Juli", "August", "September", "Oktober", "November", "Dezember")
Tage <- c(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)
Werte = 1:12

for (i in Werte) {
  print(paste(Monate[i], "-", Tage[i], "Tage"))
}
# paste() verbindet hier den Monatsnamen, die Tageszahl und den Text.

# Folie 18 | 4. for-Schleife und while-Schleife - Einführung ----

# Schleife, die vor dem ersten Durchgang schon beendet ist
Wert = TRUE
while (Wert==FALSE){
  print("Hallo")
}

# Eine Münze werfen, bis wir Kopf bekommen
set.seed(55)
Wert = "egal"
MoeglicheErgebnisse <- c("Kopf","Zahl")
while (Wert!="Kopf"){
  Wert <- sample(MoeglicheErgebnisse, 1, replace = TRUE)
  print(Wert)
}


# Zahlen von 1 bis 5 ausgeben
Wert = 0
while (Wert<5){
  Wert <- Wert+1
  print(Wert)
}

# Oder
Wert = 1
while (Wert<6){
  print(Wert)
  Wert <- Wert+1
}

# Folie 20 | 4. for-Schleife und while-Schleife - Übung 2 ----

# 1. Zwei ideale Würfel werfen, bis ihre Summe 10 beträgt.
Summe <- 0
while (Summe != 10) {
  Summe <- sum(sample(1:6, 2, replace = TRUE))
  print(Summe)
}

# 2. Quadratzahlen ausgeben, solange sie nicht grösser als 1000 sind.
Wert = 1
while (Wert^2 <= 1000) {
  print(Wert^2)
  Wert <- Wert+1
}
