==== Lektion 07 ==== === Ziele === * Jede/r kann einen Scatterplot von zwei Datenreihen / Merkmalen erstellen * Jede/r kann die Korrelation von zwei Datenreihen / Merkmalen berechnen * Jede/r kann die Korrelation interpretieren und die Masszahl Punktewolken aus dem Scatterplot zuordnen. * Erste Ideen für ein eigenes Projekt. === Auträge === * Lies die Theorie unten durch. * Korrelation im Auto-Datensatz * Wähle ein BMW-Modell und erstelle eine Scatterplott, wobei der Preis auf der $y$-Achse ist und eine erklärende Variable auf der $x$-Achse ist. Was wären sinnvolle Variablen für die $x$-Achse, für welche du einen Zusammenhang mit dem Autopreis vermutest? * Berechne die Korrelation und das Bestimmtheitsmass für die gewählten Variablen. * //Optional//: Berechne die Korrelation mit der Formeln unten (anstatt ''cor''). * Welche Korrelationen (Vorzeichen und Stärke) vermutest du im Datensatz? Welche zwei Variablen sind jeweils wie korreliert? * Schau dir die Webseite {{https://tylervigen.com/spurious-correlations|Tylver Vigen}} an: Wähl dir das widersinnigste Beispiel. Gibt es eine Erklärung dafür? === Theorie === Wird ein Zusammenhang zwischen zwei kardinalen Merkmalen vermutet, sollte als erstes ein sogenannter Scatterplot erstellt werden. Zu diesem Zweck, wird das eine Merkmal auf der $x$-Achse und das andere Merkmal auf der $y$-Achse abgetragen. {{ :lehrkraefte:ks:ffstat17:corr01.png?nolink&400 |}} Nun gibt es ein Mass für diesen Zusammenhang: Die Stärke wie auch die Richtung des Zusammenhangs der Mermkale $X$ und $Y$, $R_{xy}$, wird mit der Korrelation gemessen: $$R_{xy}=\frac{\sum\limits_{i=1}^n (x_i-\bar{x})(y_i-\bar{y})}{\sqrt{\sum\limits_{i=1}^n (x_i-\bar{x})^2 \sum\limits_{i=1}^n (y_i-\bar{y})^2}}$$ Die Korrelation nimmt nur Werte zwischen $-1$ und $1$ an. In Excel wie auch in R sind Funktionen zur Berechnung der Korrelation hinterlegt. Wichtig dabei ist zu beachten, dass die Korrelation nur einen **linearen Zusammenhang** misst: {{ :lehrkraefte:ks:ffstat17:correx2.png?nolink |}} Möchte man die Stärke der Korrelation messen, quadriert man $R_{xy}$ zur $R^2=R_{xy}^2$. Man spricht von einem **<>** wenn **$0.5\leq R^2\leq 1$** ist, von einem **<>** wenn **$0.25\leq R^2 < 0.5$** ist, und schliesslich von einem **<>** wenn **$0.1\leq R^2<0.25$** ist. Ist schliesslich $R^2$ kleiner so liegt kein Zusammenhang vor. $R^2$ wird auch **Bestimmtheismass** genannt. Zusammenfassend kann gesagt werden, dass Richtung und Stärke eines linearen Zusammenhangs gemessen werden kann: * **Richtung:** Eine positive Korrelation beschreibt eine <> Beziehung, eine negative Korrelation beschreibt eine <> Beziehung. * **Stärke:** Um nur eine Aussage über die Stärke des Zusammenhangs unabhängig der Richtung zu machen, verwendet man das Bestimmtheitsmass $R^2$, die quadrierte Korrelation. === Korrelation und Kausalität === Auch wenn $R^2$ sehr gross ist, muss das nicht heissen, dass in Tat und Wahrheit wirklich ein Zusammenhang dieser beiden Variablen vorliegt. Es kann durchaus sein, dass die Korrelation zufällig zu Stande gekommen ist. Man spricht dann auch von **Scheinkorrelation** oder in Englisch von **spurious correlation**. Kausalität in diesem Zusammenhang besagt, dass ein Merkmal ein anderes bedingt: So ist zum Beispiel bei der Thematik Schuhgrösse und Körpergrösse wirklich davon auszugehen, dass ein kausaler Zusammenhang besteht. === Umsetzung in R === In R können Scatterplots mit ''plot'' erstellt werden: x <- c(2,3,7,10) y <- c(7,1,2,30) plot(x, y, main="Title") Mit dem gleichen Befehl könnten auch Funktionen gezeichnet werden: x <- seq(-3,3, by = 0.1) y <- x^2 plot(x, y, main="Parabel") plot(x, y, main="Parabel",type="l") plot(x, y, main="Parabel",type="h") Die Korrelation kann mit ''cor'' berechnet werden: x <- c(2,3,7,10) y <- c(7,1,2,30) R <- cor(x,y) R R^2 In R werden Vektoren Element für Element multipliziert: Der Nenner könnte also wie folgt berechnet werden: x <- c(2,3,7,10) y <- c(7,1,2,30) x-mean(x) (x-mean(x))*(y-mean(y)) sum((x-mean(x))*(y-mean(y))) === Korrelationen BMW Datensatz nach Modell === {{ :lehrkraefte:ks:ffstat17:corrbmw.png?nolink |}} library(corrplot) png("C:/temp/corrbmw.png",width=300,height=1500) par(mfrow=c(2,3)) for(mod in sort(unique(bmw$model))){ tbmw = subset(bmw,model==mod) corbmw <- tbmw[,sapply(tbmw,is.numeric) & sapply(tbmw,function(inv){sd(inv,na.rm=T)>0})] corrplot(cor(corbmw,use="pairw"),main=mod,mar=c(0,0,1,0)) } dev.off() ==== Lektion 06 ==== === Ziele === * Lorenzkurve kennen, <> und interpretieren können. * Gini-Koeffizient kennen und interpretieren können. * Erste Ideen eines eigenen Projekts generieren === Aufträge === * Theorie Lorenzkurve lesen * Beispiel mit Hilfe der {{lehrkraefte:ks:ffstat2324:lorenz_kurve.xlsx|Excel-Datei}} zur Lorenzkurve erstellen, die maximal ungleich verteilt sind resp. gleich verteilt sind. * Wahlweise: * Eigenen R Code schreiben * Gini und Lorenzkurve weiter vertiefen mit * {{https://www.fuw.ch/article/die-lorenz-kurve-und-der-gini-koeffizient/|Artikel zur Lorenzkurve}} lesen und Seiten 14-16 in {{lehrkraefte:ks:ffstat2324:stadt_zurich_memi_2015_10_29.pdf|Lohnreport der Stadt Zürich}} betrachten. Überrascht die Grafik? Wie sähe die Verteilung in der Stadt St. Gallen aus? Unglücklicherweise sind die gleichen Daten weder für St. Gallen noch jährlich verfügbar. * Auf der {{https://data.oecd.org/inequality/income-inequality.htm|OECD-Webseite}} können verschiedene Merkmale zur Einkommensverteilung über die Zeit (Schiebregler unten rechts) für verschiedene Länder betrachtet werden. Suche dir ein Land, dessen Gini-Koeffizient sich in den letzten Jahren stark verändert hat. Was könnte eine Geschichte dazu sein? * Überlege dir alternative Masse, um Konzentration resp. Ungleichverteilung (im Einkommenskontext) zu messen. * Besprich mit deinem/r Nachbar:in Ideen für eine eigene Projekte, welche untersucht werden könnte und halte diese [[https://padlet.com/simon_knaus2/eigene-projekte-ui3xmrp370et2n43|hier]] fest. === Theorie === Auf Grund der Lorenzkurve kann ausgesagt werden, wie stark die Merkmale (resp. deren Ausprägung) konzentriert sind (ein **Konzentrationsmass**). Das klassische Beispiel dabei ist die Einkommenverteilung. Die Frage, die dabei gestellt, resp. beantwortet wird, ist "Wie viel Prozent der Leute (Köpfe) verdienen wie viel Prozent des Gesamteinkommens?>> ^Einkommen ^Anzahl Personen ^Kumululierte relative Anzahl ^Einkommenssumme ^Kumululierte relative Einkommenssumme| |2317| 10| 0.20| 23'170| 0.17| |2552| 11| 0.42| 28'072 | 0.37| |2787| 14| 0.70| 39'018| 0.65| |3022| 8| 0.86| 24'176| 0.83| |3257| 3| 0.92| 9'771| 0.90| |3492| 4| 1.00| 13'968| 1.00| |^Total| 50| 138'175|| Zeichnet man nun die Punkte $(\text{Kumulierte relative Anzahl},\text{Kumulierte relative Einkommenssumme})=(x,y)$ und verbindet diese, erhält man die **Lorenzkurve**: {{ :lehrkraefte:ks:lorenzkurve.png?400 |}} ---- Zwischenfrage: Wo würden die Punkte liegen, wenn alle gleich viel verdienen würden? Würden alle gleich viel verdienen, lägen die Punkte auf der Winkelhalbierenden. ---- === Beispiele === Als Mass der Ungleichverteilung verwendet nun die Fläche, welche die Lorenzkurve mit der Winkelhalbierenden einschliesst. Diese Fläche nennt man auch **Gini--Koeffizient** {{ :lehrkraefte:ks:ffstat17:theorem_lorenzkurve_13.12._pm-600x490_1_.jpg?direct |Gini-Koeffizient. Quelle: https://www.fuw.ch/wp-content/uploads/2015/01/}} Als Beispiel für die Lorenzkurve wiederum die 5 BMW Modelle und ihre Preise. Achtung: Es handelt sich dabei nicht um ein Einkommen! {{ :lehrkraefte:ks:ffstat17:lorenz_bmw.png?direct |}} Die Lorenzkurve macht im Allgemeinen nur Sinn für Merkmale, mit positiven Werten (Preis, Einkommen, etc.) === Umsetzung in R === In R kann die Lorenzkurve ebenfalls umgesetzt werden. Wichtig sind dabei folgende Funktionen * ''sort'' * ''cumsum'' und ''sum'' * ''length'' * ''plot'' mit ''plot(xwerte,ywerte)'' kannst du einen Scatterplot mit erstellen. Versuche mit den Funktionen oben, die richtigen $x$- und $y$-Werte zu erstellen und diese an anschliessend zu zeichnen. Versuche zuerst mit <>-Date, dann kannst du dich um die Funktion kümmern, ohne die Daten einzulesen. dummydata <- c(70, 40, 70, 50, 30, 80, 90, 90, 40, 80, 40, 20, 40, 10, 40, 60, 100, 30, 30, 70, 50, 70, 50, 40, 70, 60, 90, 50, 90) xwerte <- ... ywerte <- ... plot(xwerte,ywerte) computeLorenzCurve <- function(x, plot = T) { nobs <- length(x) sortedx <- sort(x) abscissa <- (1:nobs)/nobs ordinate <- cumsum(sort(x))/sum(x) if (plot) { plot(ordinate, abscissa, main = "Lorenzkurve") abline(a = 0, b = 1) } return(cbind(abscissa, ordinate)) } ==== Lektion 05 ==== === Ziele === * Boxplot erstellen und interpretieren * Lage und Skalenmasse auf Grund Boxplot und Kennzahlen interpretieren === Aufträge === * Boxplot * Theorie Boxplot unten lesen. * Einen Boxplot von Hand der Daten 9, 6, 7, 7, 3, 9, 10, 1, 8, 7, 9, 9, 8, 10, 5, 10, 10, 9, 10, 8 erstellen. * Einen Boxplot von Hand (mit Hilfe R ''median'', ''quantile'' etc.) der Preise von einem BMW Modell (X1 bis X5) erstellen. * Einen Boxplot mit R (automatisch mit z.B. ''boxplot(cardata$preise)'') erstellen. Boxplots können in R auch entlang verschiedener nominaler Variablen erstellt werden: Dazu muss einfach eine Tilde ''~'' eingefügt werden, z.B. ''boxplot(cardata$preis~cardata$model)''. * Die BMW Boxplots den BMW Histogrammen zuordnen (auf Papier vorne) * Die BMW Mittelwerte, Standardabweichungen, IQA, Median und $Q_{30\%}$ den Histogrammen und Boxplots auf zuordnen. * Anwendungen des Boxplots * Abschnitt unten zu "[[lehrkraefte:ks:ffstat2324#anwendungen_boxplot|Anwendungen Boxplot]]" durchgehen * Ein Beispiel konstruieren, bei dem Median grösser als Mittelwert ist. * Eine erhobene Grösse ausdenken, bei der Median (oder ein anderes Quantil) mehr interessiert als der Mittelwert und umgekehrt. === Boxplot === {{:lehrkraefte:ks:ffstat17:boxplot.png?direct|}} Ein Boxplot besteht aus einer Box, welche durch das erste und dritte Quartil ($Q_{25\%}$ und $Q_{75\%}$) begrenzt ist. Damit liegen $50\%$ der Daten in der Box. Der mittige Strich ist der Median ($q_{50\%}$), die Whiskers (Antennen oder Schnäuze) sind $w_1=Q_{50\%}-1.5\cdot IQA$ und $w_2=Q_{50\%}+1.5\cdot IQA$. $w_1$ und $w_2$ sind dabei zum Teil auch durch den grössten (resp. kleinsten für $w_1$) Wert eines Datenpunktes ersetzt, welcher gerade noch kleiner (resp. grösser für $w_1$) ist als $w_2$. Die Whiskers sind dann nicht symmetrisch. Die Punkte, die ausserhalb der Whiskers liegen, nennt man **Outlier** oder **Ausreisser**. Man kann zeigen, dass bei [[https://de.wikipedia.org/wiki/Normalverteilung|normalverteilten]] Daten, ca. $95\%$ der Beobachtungen innerhalb der beiden Whiskers zu liegen kommen. # x1 * Mittelwert: 34155.8 * IQA: 27625 * $Q_{30\%}$: 21900 * Median: 29900 * Standardabweichung: 15200.1 # x3 * Mittelwert: 32018.2 * IQA: 25225 * $Q_{30\%}$: 21500 * Median: 28900 * Standardabweichung: 18084.7 # x4 * Mittelwert: 59603 * IQA: 17175 * $Q_{30\%}$: 52675 * Median: 59900 * Standardabweichung: 11709.4 # x5 * Mittelwert: 51018.6 * IQA: 42975.2 * $Q_{30\%}$: 29900 * Median: 47949.5 * Standardabweichung: 27569.1 # x6 * Mittelwert: 59023.7 * IQA: 43977.5 * $Q_{30\%}$: 38909 * Median: 56400 * Standardabweichung: 25544.2 === Lösungen: Boxplot der Preise nach Modell === {{ :lehrkraefte:ks:hist1.png?direct |}} {{ :lehrkraefte:ks:hist2.png?direct |}} === Anwendungen Boxplot === Löhne in der Stadt Zürich * {{lehrkraefte:ks:2015-11-12_statistik-um-12_loehne-in-der-stadt-zuerich1.pdf|Lohnreport der Stadt Zürich}} herunterladen. * Insb. Seiten 14 bis 15: Überrascht diese Verteilung (Histogramm)? * Welche Grafiken / Methoden sind aus dem Freifach bekannt? * Gibt es irgeneine Graphik im Lohnreport, welche nicht klar ist? * Die {{lehrkraefte:ks:ffstat2324:stadt_zurich_memi_2015_10_29.pdf|Medienmitteilug}} dazu hatte als Titel "Gute Ausbildung lohnt sich". Teilst du diese Meinung nach Studium des Lohnreports? * Im darauffolgenden Jahr wurde noch die {{lehrkraefte:ks:ffstat2324:ktzh_00000259_00001300.pdf|Löhne von Männern und Frauen}} untersucht. Was beobachtest du? * Wie würde der Lohnreport der Stadt St. Gallen aussehen? ==== Lektion 04 ==== === Ziele === * Jede/r kann ein Histogramm erklären. * Jede/r kann Mittelwert, Modus, Median und beliebige Quantile von Hand und mit Excel/R ausrechnen (Lagemasse) * Jede/r kann Varianz, Standardabweichung, IQA ausrechnen von Hand und mit Excel/R (Skalenmasse) === Auftrag === * Definitionen auf Unterlagen vom letzten Mal falls nötig nachlesen und mit [[#Begriffe|Begriffen]] unten ergänzen. * [[#Definitionen Lektion 04|Definitionen]] aus der heutigen durcharbeiten und nachvollziehen. * Berechne für die genannten Grössen für ''-2.9, 25.4, -12.3, -38.5, 4.2, 23.7, -0.4, 1.5, -23.3, 21.'' von Hand und mit Excel * Berechne für verschiedene BMW Modelle ein Histogram und notiere Mittelwert, Median, Standardabweichung und IQA darunter. Eine mögliche Vorgehensweise dabei wäre * **R**: * Variante A: Die gewünschten Modelle mit einem Vergleich ''x5 <- cardata$model== "x5"'' speichern, dieser dann als Index verwenden ''cardata$preis[x5]'' und damit die Grösse Mittelwert, Median, etc. (s.u.) berechnen * Variante B: Wiederum mit ''ddply'' und ''sumarise'' und den entsprechenden Funktionen (s.u.) arbeiten. * **Excel**: * Alle Preise in ein neues Tabellenblatt kopieren * Jeweils in den ersten Zeilen die Grössen für die darunterliegenden Werte ausrechnen und dann Formeln nach rechts ziehen. * Zusatzauftrag: * **Excel** In Excel können sogenannte [[https://de.wikipedia.org/wiki/Normalverteilung|normalverteilte Zufallsvariablen]] mit folgendem <> simuliert werden ''=NORM.INV(ZUFALLSZAHL();0;1)''. Damit erhält man //eine// Zufallszahl. Simuliere eine Spalte mit z.B. 200 normalverteilten Zufallszahlen und zeige dann ein Histogramm an. Verändere dann die Zufallszahlen in dem du verschieden Mittelwerte $m$ und Standardabweichenungen $s$ verwendest. Du kannst dazu einfach die Werte in der Formel einsetzen: ''=NORM.INV(ZUFALLSZAHL();m;s)''. Stelle sicher, dass beim Histogramm die Achsen identisch bleiben (Rechtsklick auf Achse) * **R** Mit ''rnorm(n,m,s)'' können $n$ sogenanntne [[https://de.wikipedia.org/wiki/Normalverteilung|normalverteilte Zufallsvariablen]] simuliert werden. Simuliere einige Histogramme mit verschiedenen Mittelwerten ''m'' und Standardabweichungen ''s''. Die Bilder der Histogramme sollen dann den Werten von ''m'' und ''s'' zugeordnet werden. Stelle sicher, dass die beim Histogramm die Achsen identisch bleiben. Das geht über ''hist(rnorm(...),xlim=c(min,max))'' wobei ''min'' und ''max'' die extremen Werte der Achse sind. * Schau dir die folgende {{lehrkraefte:ks:ffstat2324:histogram.xlsx|Excel Datei}} an: Diese "simuliert" ein Histogramm nach deinen Vorgaben. * Mittelwert: -0.16 * Modus: Nicht eindeutig. * Standardbweichung: 20.70 * Varianz: 428.53 * Median: 0.55 * IQA: 33.3 === Definitionen Lektion 04=== == Quantil == Ein Quantil gibt den dem Prozentrang zugehörigen Wert der Verteilung wieder. Der Median ist z.B. das 50% Quantil. Das 25%-Quantil z.B. ist der Wert, für welchen gilt, dass 25% der Werte kleiner und 75% der Werte grösser sind. Mathematisch kann man das wie folgt festhalten: Möchte man das Quantil $\alpha=35\%=0.35$ von den $n=15$ Daten ''10.6, 16.9, -27.3, 9.6, 18.1, -6.4, 34.4, 42.7, -3.6, 5, -3.2, 11.1, 46.1, 19.4, 2.4'' berechnen, so muss man diese zuerst aufsteigend sortieren: ''-27.3, -6.4, -3.6, -3.2, 2.4, 5, 9.6, 10.6, 11.1, 16.9, 18.1, 19.4, 34.4, 42.7, 46.1''. Die sortierten Werte werden mit $x_{(1)},x_{(2)},\ldots,x_{(n)}$ bezeichnet. Man sucht dann diesen Wert so, dass der gefundene Wert dem geforderten Prozentrang von $\alpha=0.35$ am nächsten kommt. Genauer: Sei $K=\lfloor\alpha\cdot n\rfloor+1$ wobei $\lfloor\cdot\rfloor$ auf die nächste ganze Zahl abrundet. Für uns ist also $K=\lfloor0.35\cdot 15\rfloor+1=\lfloor5.25\rfloor+1=5+1=6$. Wir nehmen also den 6. Wert: Damit ist $Q_{0.35}=x_{(6)}=5$ Ist aber $\alpha\cdot n$ eine natürliche Zahl so, so nehmen wir wegen des Abrundens den mittleren der beiden Werte $x_{(K-1)}$ und $x_{(K)}$: Für $\alpha=0.3$ ist $K=3+1=4$ und damit $Q_{0.2}=\frac12((-3.6)+(-3.2))=-3.4$. $$Q_\alpha=\begin{cases}x_{(K)}\text{ wenn $\alpha\cdot n$ nicht ganzzahlig}\\\frac12\left(x_{(K)}+x_{(K-1)}\right)\text{ wenn $\alpha\cdot n$ ganzzahlig}\end{cases}$$ == Quartile == Quartile sind die $25\%$, $50\%$ und $75\%$ Quantile einer Verteilung. Für das erste Quartil gilt also, dass $25\%$ der Beobachtungen kleiner sind, $75\%$ der Beobachtungen sind grösser. Bei der Berechnung der Quantile kommen bei unterschiedlichen Softwarelösungen unterschiedliche Methoden zum Einsatz. Das heisst, u.U. stimmen die Quantile zweier unterschiedlichen Softwarelösungen nicht überein. == Interquartilsabstand (IQA) == Der Interquartilsabstand ist ein Mass für die Skala einer Verteilung. Wie weit sind das erste und dritte Quartil auseinander: $\text{IQA}=Q_{0.75}-Q_{0.25}$. In [[https://cran.r-project.org/doc/contrib/Grosz+Peters-R-Reader.pdf|Buch R-Reader]]: * Kapitel 2 insb. Kapitel 2.2.1 Dataframes lesen * Kapitel 4 insb. Anfang # cardata <- read.table(readClipboard(),header = T,sep=';') head(cardata) unique(cardata$model) x5 <- cardata$model == "x5" x5 #ein Vektor mit TRUE and FALSE x5preise <- cardata$preis[x5] mean(x5preise) median(x5preise) sd(x5preise) quantile(x5preise, 0.25) quantile(x5preise, c(0.25, 0.75)) library(plyr) # Zusatzpaket 'plyr' laden (vorgänig mit install.packages('plyr') installieren) head(cardata) # Erste Zeilen anzeigen `?`(ddply # Hilfe zu ddply ) ddply(cardata, .(model), summarise, preis = mean(preis)) # Mittelwert des Preises nach Modell anzeigen ddply(cardata, .(model), summarise, preis = median(preis)) # Median des Preises nach Modell anzeigen ddply(cardata, .(model, zylinder), summarise, preis = mean(preis)) # Mittelwert des Preises nach Modell und Anzahl Zylinder anzeigen modes <- function(x) { uniquex <- unique(x) counts <- tabulate(match(x, ux)) maxcount <- max(count) wheremaxcount <- maxcount==counts modevalues <- uniquex[wheremaxcount] return(modevalues) } ==== Lektion 03 ==== === Ziele === * {{lehrkraefte:ks:ffstat2324:dossier_v0.1.pdf|Unterlagen}} durcharbeiten. * Der Begriff des Zufalls ist intuitiv bekannt bei Experimenten (Würfeln) wie auch erhobenen Daten (Autopreise): In Alltagssprache Zufall beschreiben. * Jede/r kann ein Histogramm erstellen und interpretieren. * Jede/r kann mit R Zufallszahlen (Würfel) erzeugen. Aufträge: * Eile-mit-Weile Auftrag ausführen * Zuerst manuell mit Strichliste und Würfeln. * Nachher mit R Simulieren. Hilfreicher Funktionen sind ''sample'' (oder, wer es gerne manuell mag ''runif'' ,''ceiling''). * Histogramm mit R erstellen: * ''hist(...)'' erstellt ein Histogramm. * Histogramm der Fahrzeugpreise (z.B. alle X1) erstellen und diese vergleichen. === R Code Simulation Eile-mit-Weile === In R kann man auch Würfel (und vieles mehr) simulieren, mit ''sample'' wird eine Zahl aus einem Zahlenbereich zufällig ausgewählt. So könnte z.B. mit ''sample(1:45, 6, replace=FALSE)'' das Ziehen von 6 Zahlen beim Schweizer Zahlenlotto simuliert werden. ''1:45'' ist die Menge, aus welcher zufällig gezogen wird, ''6'' sind die Anzahl Elemente und ''replace=FALSE'' besagt, dass die Kugeln/Elemente nicht zurückgelegt werden vor dem nächsten Ziehen. Mit ''replicate(n,{...})'' wird alles ''n'' mal wiederholt, was zwischen den geschweiften Klammern steht. * Level 1 (ohne ''replicate'') * Würfle 1 mal mit R * Würfle 100 mal mit R * Würfle 1000 mal mit R * Berechne die durchschnittliche Anzahl Sechsen bei allen Würfen oben. Du kannst dabei deine Resultate, welche du oben erhalten hast, vergleichen, das heisst, ''res==6'' (''res'' ist dabei dein Resultat, also der Vektor, welche alle Würfe enthält). Dies ergibt einen Vektor mit lauter ''TRUE'' und ''FALSE''. Mit ''sum'' oder ''mean'' kannst du die Summe resp. den Durchschnitt berechnen. * Level 2 (mit''replicate'') * Überprüfe, wie oft du eine Summe von 12 mit zwei Würfeln, das heisst, zwei Sechsen, hast. Verwende wieder ''replicate'' und ''sample''. Du kannst ''sum'' und ''mean'' auch innerhalb von ''replicate'' verwenden * Level 3 * Schreibe eine Funktion, welche Eile mit Weile würfeln simuliert. * Tipps: * ''sample(1:6,3,replace=T)'' wählt aus den Zahlen 1 bis 6 genau 3 aus * ''while(bedingung){ ... }'' der Code in den Klammer wird ausgeführt, solange ''bedingung'' wahr ist. Die Schleife kann abgebrochen werden mit ''break''. * Idee: Bedingung so wählen, dass weitergewürfelt wird, wenn eine gewürfelt worden ist $6$ ist. * ''replicate(n,...)'' wiederholt den Code ... $n$ mal und hat die Rückgabewerte des aufgerufenen Codes als Liste resp. Vektor. z.B. ''replicate(10,sample(1:4,1))'' === Lösungen === == Level 1 == sample(1:6, 1) sample(1:6, 100, replace = TRUE) sample(1:6, 1000, replace = TRUE) res <- sample(1:6, 1000, replace = TRUE) res == 6 sum(res == 6) #Anzahl Sechsen mean(res == 6) #Durchschnittliche Anzahl Sechsen == Level 2 == sum(sample(1:6, 2, replace = T)) # zwei Würfel addieren 12 == sum(sample(1:6, 2, replace = T)) #vergleichen, ob gleich 12 replicate(1000, sum(sample(1:6, 2, replace = T)) == 12) #wiederholen mean(replicate(1000, sum(sample(1:6, 2, replace = T)) == 12)) #Mittelwert ausrechnen == Level 3 == rollDie <- function() {#erstellt Funktion, welche würfelt. isSix <- TRUE sum <- 0 while (isSix) { thissample <- sample(6, 1) if (thissample + sum > 18) break sum <- sum + thissample isSix <- thissample == 6 } if (sum == 18) { sum <- 0 } return(sum) } dice <- replicate(1e+06, rollDie()) hist(dice) hist(dice, breaks = seq(-1, 17), main = "Histogramm Eile mit Weile", xlab = "Augenzahl", ylab = "Absolute Häufigkeit", col = "lightblue") === Histogramm Eile mit Weile bei 1'000'000 Würfeln === {{ :lehrkraefte:ks:ffstat2223:hist_eilemitweisel.png?400 |}} ==== Lektion 02 ==== === Ziele === * Jede:r kann mit Pivot-Tabellen (in R: ''plyr'') einfache Analysen durchführen === Aufträge === * Abschliessen der Aufträge von letzter Woche. * Schaut euch die Einführung Pivot-Tabellen unten an. * Analysiert mittels Pivot-Tabellen folgende Fragen: * Mittlerer Verkaufspreis aller weissen Autos berechnen * Anzahl grüne Autos berechnen * Welches Modell ist am teuersten? * Welche Farbe oder Energieeffizienz ist am günstigsten? Ist das für alle Modelle und Farben oder Energieeffizienz identisch? * Was ist der mittlere Preis aller Autos zwischen 0 und 20'000 Kilometern, 20'000 und 40'000 Kilometern? * Verwende wiederum Pivot-Tabellen * Erstelle zuerst eine Spalte in welcher du mit Runden (''=ABRUNDEN(xxx;stellen)'', in R ''floor(xxx)'') die Kilometer 0, 20000, 40000,etc. angibst. * Führe die gleiche Analyse für alle Modelle durch. Für alle Farben. * Gibt es andere Zusammenhänge? Verbrauch? Zylinder? === Einführungsvideos === * [[https://bldsg-my.sharepoint.com/:v:/r/personal/simon_knaus_ksbg_ch/Documents/streammovies/ffstat/Intro_Excel_Pivot.mp4?csf=1&web=1&nav=eyJyZWZlcnJhbEluZm8iOnsicmVmZXJyYWxBcHAiOiJPbmVEcml2ZUZvckJ1c2luZXNzIiwicmVmZXJyYWxBcHBQbGF0Zm9ybSI6IldlYiIsInJlZmVycmFsTW9kZSI6InZpZXciLCJyZWZlcnJhbFZpZXciOiJNeUZpbGVzTGlua0NvcHkifX0&e=Z0exL7|Einführung Pivot]] * [[https://bldsg-my.sharepoint.com/:v:/r/personal/simon_knaus_ksbg_ch/Documents/streammovies/ffstat/intro_plyr.mp4?csf=1&web=1&nav=eyJyZWZlcnJhbEluZm8iOnsicmVmZXJyYWxBcHAiOiJPbmVEcml2ZUZvckJ1c2luZXNzIiwicmVmZXJyYWxBcHBQbGF0Zm9ybSI6IldlYiIsInJlZmVycmFsTW9kZSI6InZpZXciLCJyZWZlcnJhbFZpZXciOiJNeUZpbGVzTGlua0NvcHkifX0&e=srjgB1|Einführung ''plyr'']] Wenn man z.B. auf Fünf Rappen runden möchte: Man dividiert die Zahl durch 20, rundet die Zahl auf die nächste ganze Zahl (ab) und multipliziert dann wieder mit 20 ($100/5=20$) Genauso kann man die gefahrenen Kilometer in "Buckets" einteilen: cardata$kilometerbucket <- 20000*floor(cardata$kilometer/20000) setwd("Pfad zum Arbeitsverzeichnis angeben") cardata <- read.table("bmw_data.csv",header = T,sep=";") # install.packages("plyr") # installiert Paket library(plyr) # Daten laden cardata <- read.csv2("bmw_data.csv") library(plyr) # Zusatzpaket 'plyr' laden (vorgänig mit install.packages("plyr") installieren) head(cardata) # Erste Zeilen anzeigen ?ddply # Hilfe zu ddply ddply(cardata, .(model), summarise, preis = mean(preis)) # Mittelwert des Preises nach Modell anzeigen ddply(cardata, .(model), summarise, preis = median(preis)) # Median des Preises nach Modell anzeigen ddply(cardata, .(model, zylinder), summarise, preis = mean(preis)) # Mittelwert des Preises nach Modell und Anzahl Zylinder anzeigen ==== Lektion 01 ==== * {{lehrkraefte:ks:ffstat2324:bmw_data.xlsx|Autodaten Excel}} * {{lehrkraefte:ks:ffstat2324:bmw_data.csv?linkonly|Autodaten CSV}} * {{lehrkraefte:ks:ffstat2324:ff_statistik_l1.pdf|Folien}} === Ziele === Ziele der Lektion: * Einführung Freifach * Unterlagen kennenlernen * Geräte und Tools kennenlernen * Erste Berechnungen anstellen * R [[https://cran.r-project.org/doc/contrib/Grosz+Peters-R-Reader.pdf|Dokumentation]] Seiten 1-13 lesen und Beispiel-Code durcharbeiten === Auftrag === * [[https://www.youtube.com/watch?v=PCKxdJ0pTu8&feature=youtu.be|Einführungsvideo]] schauen. * Dossier erstellen: * Word-Datei, One-Note Datei, Papier, o.ä. * Formatierung anlegen * R installieren * R installieren [[https://cran.r-project.org/|R download]] * RStudio isntallieren [[https://posit.co/downloads/|R Studio]] * Spielen mit Daten: * Mittlerer Verkaufspreis (Durchschnitt) aller Autos berechnen * Mittlerer Verkaufspreis aller weissen Autos berechnen * Anzahl blaue Autos berechnen * Welches Modell ist am teuersten? * Welche Farbe oder Energieeffizienz ist am günstigsten? Ist das für alle Modelle und Farben oder Energieeffizienz identisch? setwd("C:/Users/Simon.Knaus/Dropbox/git/ffstat") #Arbeitsverzeichnis bestimmen cardata <- read.table("cardata.csv",sep=";",header=TRUE) #Daten einlesen als Dataframe head(cardata) # Erste Zeilen (6) anzeigen summary(cardata) # Zusammenfassung anzeigen mean(cardata$preis) # Mittelwert des Preises anzeigen unique(cardata$model) #Alle Modelle nur einzeln (einmalig) anzeigen str(cardata) #Struktur des Dataframes anzeigen cardata[2,1] #2 Zeile, erste Spalte cardata[cardata$model=="x1", "preis"] #Model soll 'x1' sein, da die 'Preis'-Spalte mean(cardata[2:4,2]) #Mittelwert der 2. bis 4. Zeile der 2. Spalte #weisse autos suchen weisseautos <- cardata$aussenfarbe=="weiss" #preise von weissenautos cardata$preis[weisseautos] #mittelwert der preise mean(cardata$preis[weisseautos]) #blaue autos suchen blaueautos <- cardata$aussenfarbe=="blau" #anzahl (länge) der blauen autos, resp. der Preise der blauen Autos length(cardata$preis[blaueautos]) #auch möglich: Es ist TRUE 1; FALSE 0. Summe ist also alle TRUE sum(blaueautos) cardata[cardata$model=="x1", "preis"] mean(cardata[cardata$model=="x1", "preis"]) mean(cardata[cardata$model=="x2", "preis"]) mean(cardata[cardata$model=="x3", "preis"]) mean(cardata[cardata$model=="x4", "preis"]) mean(cardata[cardata$model=="x5", "preis"]) ==== Begriffe ==== Begriffe, die festzuhalten sind: ^Begriff ^Kurzbeschrieb ^Excel ^R ^ | Mittelwert | Arithmetisches Mittel ($\mu$). Man schreibt auch $\bar x$.| ''MITTELWERT()'' | ''mean()'' | | Anzahl | Anzahl | ''ANZAHL()'' | ''length()'' | | Merkmal | Eigenschaften eines Datenpunkts (z.B. Türen, Farbe etc.) | | | | Merkmalsausprägung und -typen| Nominal (Farbe), Ordinal (Modell: X1 bis X6), Kardinal (z.B. Kilometer, Preis) ||| | Absolute und relative Häufigkeit von $x$| Die absolute Häufigkeit entsprichen dem insgesamten Vorkommen, die relative Häufigkeit ist das Vorkommen in Prozent, d.h., die absolute Anzahl dividiert durch die Gesamtanzahl| ''ANZAHL()'' oder ''SUMMEWENN()''| |Histogramm | Illustration von Daten. Die Säulenfläche ist proportional zur relativen Häufigkeit| |Varianz | Die mittlere quadratische Abweichung, i.e. $\sigma^2=\frac1{n-1}\sum_{i=1}^n (x_i-\bar x)^2$ | ''VARIANZA()'' | ''var()''| |Standardabweichung| Wurzel der mittleren quadratischen Abweichung $\sigma=\sqrt{\frac1{n-1}\sum_{i=1}^n (x_i-\bar x)^2}$ | ''STABWA()'' | ''sd()''| |Median| Wert der mittig in der Verteilung aller sortierten Werte ist, resp. zum 50% Prozentrang gehöriger Wert | ''MEDIAN()'' | ''median()''| |Modus| Der häufigste (die häufigsten) Wert(e)|''MODUS.EINF()''|Benutzerdefinierte Funktion ''modes(...)''| |$\alpha$-Quantil| Zum Prozentrang $\alpha$ gehöriger Wert | ''QUANTIL.INKL()'' | ''quantile(,type=2)''| |IQA | Interquartilsabstand. Differenz des 1. und 3. Quartils|| ''QUANTIL.INKL(...;.75)-QUANTIL.INKL(...;.25)''| ''IQR()'')|