cor
). 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.
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:
Möchte man die Stärke der Korrelation messen, quadriert man $R_{xy}$ zur $R^2=R_{xy}^2$. Man spricht von einem «starken Zusammenhang» wenn $0.5\leq R^2\leq 1$ ist, von einem «moderaten Zusammenhang» wenn $0.25\leq R^2 < 0.5$ ist, und schliesslich von einem «schwachen Zusammenhang» 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:
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.
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")
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
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:
Zwischenfrage: Wo würden die Punkte liegen, wenn alle gleich viel verdienen würden?
Als Mass der Ungleichverteilung verwendet nun die Fläche, welche die Lorenzkurve mit der Winkelhalbierenden einschliesst. Diese Fläche nennt man auch Gini–Koeffizient
Als Beispiel für die Lorenzkurve wiederum die 5 BMW Modelle und ihre Preise. Achtung: Es handelt sich dabei nicht um ein Einkommen!
Die Lorenzkurve macht im Allgemeinen nur Sinn für Merkmale, mit positiven Werten (Preis, Einkommen, etc.)
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 «Dummy»-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)
median
, quantile
etc.) der Preise von einem BMW Modell (X1 bis X5) erstellen. 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)
.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 normalverteilten Daten, ca. $95\%$ der Beobachtungen innerhalb der beiden Whiskers zu liegen kommen.
# x1
# x3
# x4
# x5
# x6
Löhne in der Stadt Zürich
-2.9, 25.4, -12.3, -38.5, 4.2, 23.7, -0.4, 1.5, -23.3, 21.
von Hand und mit Excelx5 ← cardata$model== “x5”
speichern, dieser dann als Index verwenden cardata$preis[x5]
und damit die Grösse Mittelwert, Median, etc. (s.u.) berechnenddply
und sumarise
und den entsprechenden Funktionen (s.u.) arbeiten.=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)rnorm(n,m,s)
können $n$ sogenanntne 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.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 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.
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 Buch R-Reader:
Aufträge:
sample
(oder, wer es gerne manuell mag runif
,ceiling
).hist(…)
erstellt ein Histogramm.
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.
replicate
)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.replicate
)replicate
und sample
. Du kannst sum
und mean
auch innerhalb von replicate
verwendensample(1:6,3,replace=T)
wählt aus den Zahlen 1 bis 6 genau 3 auswhile(bedingung){ … }
der Code in den Klammer wird ausgeführt, solange bedingung
wahr ist. Die Schleife kann abgebrochen werden mit break
.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))
plyr
) einfache Analysen durchführen=ABRUNDEN(xxx;stellen)
, in R floor(xxx)
) die Kilometer 0, 20000, 40000,etc. angibst.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
Ziele der Lektion:
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
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() ) |