Einführung in R Kapitel 2 : Einfache Statistische Auswertungen © Prof. Dr.B.Grabowski, HTW des Saarlandes, 12/2005 1 Inhaltsverzeichnis Einführung in R ........................................ 1 Kapitel 2 : Einfache Statistische Auswertungen .......................... 1 Inhaltsverzeichnis ....................................................... 2 6. Statistische Maßzahlen zur Beschreibung einer Zufallsgröße ............ 3 6.1 Statistik-Funktionen der R-Datei mystatistik.R ............................................................... 3 6.2 Häufigkeitstabellen und zugehörige Grafiken.................................................................. 3 6.2.1 Die Funktion dhauf() ................................................................................................. 3 6.2.2 Die Funktion sthauf() ................................................................................................ 5 6.3 Lage- und Streuungsmaße für eine Stichprobe ................................................................ 8 6.3.1 Mittelwert, Streuung, Range, Minimum, Maximum, Rangplätze............................. 8 6.3.2 Tabellarische Darstellung statistischer Maßzahlen ................................................... 8 6.3.3 Quantile ..................................................................................................................... 9 6.3.4 Empirische Verteilungsfunktion ............................................................................. 10 6.3.5 Boxplots .................................................................................................................. 11 7. Statistische Zusammenhangsmaße ....................................... 12 7.1 2-dimensionale Häufigkeitstabellen .............................................................................. 12 7.2 Chi-Quadrat-Kontingenzkoeffizient............................................................................... 13 7.2.1 Berechnung des korrigierten Kontingenzkoeffizienten in der R-Konsole .............. 13 7.2.2 Die Funktion ckorr()................................................................................................ 14 7.3 Korrelationen.................................................................................................................. 15 7.3.1 der Korrelationskoeffizient von Pearson................................................................. 15 7.3.2 der Korrelationskoeffizient von Spearman ............................................................. 15 7.3.3 Erstellen von Korrelationsmatrizen......................................................................... 16 7.4 Lineare Regression ......................................................................................................... 17 8. Fallstudie reakt.txt ............................................. 21 2 6. Statistische Maßzahlen zur Beschreibung einer Zufallsgröße 6.1 Statistik-Funktionen der R-Datei mystatistik.R In der R-Datei mystatistik.R stehen zusätzliche Statistik-Funktionen zur Verfügung: Funktion dhauf(x,...) sthauf(x,...) empirFn(x,typ,c) ckorr(x,y,...) regres(k,x,y,...) poly(x,a) Bedeutung Häufigkeitsanalyse einer diskreten Zufallsgröße, Balken- und Torten Häufigkeitsanalyse einer stetigen Zufallsgröße, Histogramm Empirische Verteilungsfunktion bzw. Anteil aller Daten, die <=c sind. 2-dimensionale Häufigkeitstabelle und korrigierter Kontingenzkoeffizient Anpassung des besten Regressionspolynoms einer vorgegebenen Ordnung k an Messdatenpaare (xi,yi), i=1,...,n und plot. Berechnen des Funktionswertes des Polynoms a[1]+a[2]⋅x + ....+ a[k]⋅xk mit den Koeffizienten a=c(a[1],a[2], ....,a[k]). Laden von mystatistik.R: Über das Menü: Datei Lese R-Code ein ... Datei ‚mystatistik.R’ im Browser auswählen und öffnen Über eine R-Kommando-Zeile: > source("Pfad/mystatistik.R") z.B. > source("C:/Programme/R/R-2.2.0/meinwork/mystatistik.R") 6.2 Häufigkeitstabellen und zugehörige Grafiken 6.2.1 Die Funktion dhauf() dhauf(x,xname) # Häufigkeitsanalyse einer diskreten Variablen x #------------------------------------------------------------------------# Eingabe: #............... #x = Vektor der Beobachtungsdaten (Urliste) einer diskreten Zufallsgröße #xname = Name des Vektors x (Zeichenkette) --------------------------------------------------------------------------#Ausgabe: #................ #Diskrete Häufigkeitstabelle #ai : mögliche Werte von x #Hn(ai): absolute Häufigkeit von ai #hn(ai): relative Häufigkeit von ai #H(i): absolute Summenhäufigkeiten #h(i):relative Summenhäufigkeiten # Balkendiagramm der absoluten Häufigkeiten #Tortendiagramm der relativen Häufigkeiten #-------------------------------------------------------------------------- 3 Der Quelltext der Funktion dhauf() ist im Anhang B aufgeführt. Beispiel: > # Laden der Statistik-Funktion dhauf() > source("C:/Programme/R/R-2.2.0/meinwork/mystatistik.R") > # Laden des Datansatzes „motoren.dat“ aus Kapitel 1..... und speichern als data.frame > # ‚motoren’ (header = T ist nötig, damit die erste Zeile der Datei als Variablennamen > # erkannt wird) > motoren<-read.table("meinwork/motoren.dat",header=TRUE) > attach(motoren) # Alle folgenden Variablennamen beziehen sich auf das data.frame # motoren (siehe auch Kap. ....) > Hersteller # Auflisten der Inhalte der Variable Hersteller der Datei motoren.dat [1] Siemens VW Siemens Bosch VW Bosch Siemens VW Bosch [10] Siemens Levels: Bosch Siemens VW > dhauf(Hersteller,"Hersteller") # Häufigkeitsanalyse von ‚Hersteller’ Ergebnisse ------------------------------------------Häufigkeitstabelle von " Hersteller " : ------------------------------------------ai Hn(ai) hn(ai) H(i) 1 Bosch 3 0.3 3 2 Siemens 4 0.4 7 3 VW 3 0.3 10 h(i) 0.3 0.7 1.0 Absolute Häufigkeiten 3 4 Relative Häufigkeiten in % 2 Anzahl Bosch : 0.3 % Siemens : 0.4 % 0 1 VW : 0.3 % Bosch Siemens VW Hersteller Bemerkung: Die R-Grafik nicht als bmp, sondern als Metafile in den Zwischenspeicher kopieren und weiterbearbeiten (z.B. nach Word übertragen) oder als Metafile abspeichern. Beim Abspeichern als bmp-Datei ist das Bild nicht vollständig, da bmp’s in einer Standardfenstergröße gespeichert werden, die für diese Grafik zu klein ist! 4 6.2.2 Die Funktion sthauf() sthauf(x,xname,epsilon,typ,br) # Häufigkeitsanalyse einer stetigen Variablen x #----------------------------------------------------------------------# Eingabe: #.............. #x = Vektor der Beobachtungsdaten (Urliste) einer stetigen Zufallsgröße #xname = Name des Vektors x (Zeichenkette) #epsilon = Messgenauigkeit der Beobachtungen x #typ =1 : Klassengrenzen werden wie in der Vorlesung beschrieben, berechnet # (typ = 1 ist der Default-Wert) #typ = 0: erfordert die Angabe der Grenzen (br =c(a[1],...,a[k+1]) in einem # Vektor a #br = Vektor der Klassengrenzen a[1],...,a[k+1],(a[1] = untere Grenze # der 1.Klasse, a[k+1] = obere Grenze der k.ten (letzten) Klasse, # Nur erforderlich für typ =0 #---------------------------------------------------------------------#Ausgabe: #.............. #Klassen-Häufigkeitstabelle #Ki : Klassen von x #Hn(Ki): absolute Klassen-Häufigkeit von Ki #hn(Ki): relative Häufigkeit von Ki #H(i): absolute Summenhäufigkeiten #h(i):relative Summenhäufigkeiten # Histogramm der absoluten Häufigkeiten # Histogramm der relativen Häufigkeitsdichte #-------------------------------------------------------------------------- Der Quelltext des Programms sthauf() ist im Anhang B aufgeführt. Der Aufruf von sthauf() erfolgt auf 2 verschiedene Weisen: #Selbstdefinierte Klassen z.B. von –4 bis 4 mit Klassenbreite 0.5, # typ=0 ist erforderlich, > sthauf(x=x,xname="normal",typ=0,br=seq(-4,4,0.5)) #oder #automatische Klasseneinteilung, Angabe der Messgenauigkeit epsilon ist erforderlich, z.B. > sthauf(x=x,xname="normal",epsilon=0.5) Beispiel 1: Erstellen einer Klassenhäufigkeitstabelle und des Histogramms mit automatischer Klassenbildung (gemäß der in der Vorlesung angegebenen Methode) > source("C:/Programme/R/R-2.2.0/meinwork/mystatistik.R") > x<-rnorm(150) #Erzeugung von 150 standardnormalverteilten Werten > sthauf(x,"150 Beobachtungen der Standardnormalverteilung",typ=0,br=seq(-4,4,0.5)) Ergebnisse: ----------------------------------------------------------------------------------------------Häufigkeitstabelle von " 150 Beobachtungen der Standardnormalverteilung " : 5 ----------------------------------------------------------------------------------------------- 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( -4.0 -3.5 -3.0 -2.5 -2.0 -1.5 -1.0 -0.5 0.0 0.5 1.0 1.5 2.0 2.5 3.0 3.5 , , , , , , , , , , , , , , , , Klassen Klassenmitte abshauf relhauf abssum relsum -3.5 ] -3.75 0 0.0000 0 0.0000 -3.0 ] -3.25 0 0.0000 0 0.0000 -2.5 ] -2.75 0 0.0000 0 0.0000 -2.0 ] -2.25 4 0.0267 4 0.0267 -1.5 ] -1.75 3 0.0200 7 0.0467 -1.0 ] -1.25 10 0.0667 17 0.1134 -0.5 ] -0.75 23 0.1533 40 0.2667 0.0 ] -0.25 31 0.2067 71 0.4734 0.5 ] 0.25 31 0.2067 102 0.6801 1.0 ] 0.75 23 0.1533 125 0.8334 1.5 ] 1.25 15 0.1000 140 0.9334 2.0 ] 1.75 4 0.0267 144 0.9601 2.5 ] 2.25 4 0.0267 148 0.9868 3.0 ] 2.75 2 0.0133 150 1.0001 3.5 ] 3.25 0 0.0000 150 1.0001 4.0 ] 3.75 0 0.0000 150 1.0001 0.3 0.2 0.0 0.1 Rel. Häufigkeitsdichte 0.4 0.5 Histogramm der Variable ' 150 Beobachtungen der Standardnormalverteilung ' -4 -2 0 2 4 Wertebereich Bemerkung: Die R-Grafik nicht als bmp, sondern als Metafile in den Zwischenspeicher kopieren und weiterbearbeiten (z.B. nach Word übertragen) oder als Metafile abspeichern. Beim Abspeichern als bmp-Datei ist das Bild nicht vollständig, da bmp’s in einer Standardfenstergröße gespeichert werden, die für diese Grafik zu klein ist! Beispiel 2: Erstellen einer Klassenhäufigkeitstabelle und des Histogramms mit vorgegebener Klasseneinteilung > x<-round(rnorm(150)*100)/100 # 150 standardnormalverteilte Daten, # Messgenauigkeit: 0,01 6 > sthauf(x,"150 Beobachtungen der Standardnormalverteilung",epsilon=0.01) Ergebnisse: ------------------------------------------------------------------------Häufigkeitstabelle von "150 Beobachtungen der Standardnormalverteilung " : -------------------------------------------------------------------------------------------------------------1 2 3 4 5 6 7 8 9 10 11 12 ( ( ( ( ( ( ( ( ( ( ( ( -2.385 -1.965 -1.545 -1.125 -0.705 -0.285 0.135 0.555 0.975 1.395 1.815 2.235 , , , , , , , , , , , , Klassen Klassenmitte abshauf relhauf abssum relsum -1.965 ] -2.175 4 0.0267 4 0.0267 -1.545 ] -1.755 10 0.0667 14 0.0934 -1.125 ] -1.335 9 0.0600 23 0.1534 -0.705 ] -0.915 18 0.1200 41 0.2734 -0.285 ] -0.495 19 0.1267 60 0.4001 0.135 ] -0.075 25 0.1667 85 0.5668 0.555 ] 0.345 25 0.1667 110 0.7335 0.975 ] 0.765 21 0.1400 131 0.8735 1.395 ] 1.185 11 0.0733 142 0.9468 1.815 ] 1.605 6 0.0400 148 0.9868 2.235 ] 2.025 1 0.0067 149 0.9935 2.655 ] 2.445 1 0.0067 150 1.0002 0.2 0.0 0.1 Rel. Häufigkeitsdichte 0.3 0.4 Histogramm der Variable ' 150 Beobachtungen der Standardnormalverteilung ' -3 -2 -1 0 1 2 3 Wertebereich Bemerkung: Die R-Grafik nicht als bmp, sondern als Metafile in den Zwischenspeicher kopieren und weiterbearbeiten (z.B. nach Word übertragen) oder als Metafile abspeichern. Beim Abspeichern als bmp-Datei ist das Bild nicht vollständig, da bmp’s in einer Standardfenstergröße gespeichert werden, die für diese Grafik zu klein ist! 7 6.3 Lage- und Streuungsmaße für eine Stichprobe 6.3.1 Mittelwert, Streuung, Range, Minimum, Maximum, Rangplätze > x<-c(1,1,2,3,4,5,5,5); > rank(x); #Rangplatzwerte [1] 1.5 1.5 3.0 4.0 5.0 7.0 7.0 7.0 > range(x); # Range : Minimum Maximum [1] 1 5 > var(x); #Stichprobenstreuung [1] 3.071429 > mean(x); min(x); max(x); [1] 3.25 [1] 1 [1] 5 6.3.2 Tabellarische Darstellung statistischer Maßzahlen Aufgabe: Stellen Sie die mittlere, minimale und maximale Lebensdauer der Hersteller gegenüber! Lösung: > a<- tapply(Lebensdauer.Jahre,Hersteller,mean) # Für tapply() siehe Kap.1, Nr. 3.10 > b<- tapply(Lebensdauer.Jahre,Hersteller,max) > c<- tapply(Lebensdauer.Jahre,Hersteller,min) > data.frame(Mittel=a,Min=c,Max=b) Mittel Min Max Bosch 3.666667 3 4 Siemens 6.250000 6 7 VW 5.666667 5 7 Aufgabe: Stellen Sie die Mittelwerte der Variablen ‚Lebensdauer’, ‚Gewicht’ und ‚Preis’ für die 3 Hersteller gegenüber! Lösung: > a<- tapply(Lebensdauer.Jahre,Hersteller,mean) > b<- tapply(Gewicht.kg,Hersteller,mean) > c<- tapply(Preis.T.Euro,Hersteller,mean) > data.frame(Mittel.Preis=c,Mittel.Gewicht=b,Mittel.Lebensdauer=c) Bosch Siemens VW Mittel.Preis Mittel.Gewicht Mittel.Lebensdauer 17.33333 11.00 3.666667 49.25000 20.75 6.250000 40.00000 19.00 5.666667 Oder: > by(motoren[,3:5],Hersteller,mean) Hersteller: Bosch Preis.T.Euro Gewicht.kg Lebensdauer.Jahre 17.333333 11.000000 3.666667 ------------------------------------------------------------ 8 Hersteller: Siemens Preis.T.Euro Gewicht.kg Lebensdauer.Jahre 49.25 20.75 6.25 -----------------------------------------------------------Hersteller: VW Preis.T.Euro Gewicht.kg Lebensdauer.Jahre 40.000000 19.000000 5.666667 > data.frame(Bosch=a[1],Siemens=a[2],VW=a[3]) Bosch Siemens VW Preis.T.Euro 17.333333 49.25 40.000000 Gewicht.kg 11.000000 20.75 19.000000 Lebensdauer.Jahre 3.666667 6.25 5.666667 Aufgabe: Stellen Sie Mittelwerte, Minimum, Maximum der Variablen ‚Lebensdauer’, ‚Gewicht’ und ‚Preis’ einander gegenüber! Lösung: > a<-sapply(motoren[,3:5],mean) > b<-sapply(motoren[,3:5],min) > c<-sapply(motoren[,3:5],max) > data.frame(Mittelwert=a,Minimum=b,Maximum=c) Preis.T.Euro Gewicht.kg Lebensdauer.Jahre Mittelwert Minimum Maximum 36.9 16 52 17.3 8 22 5.3 3 7 6.3.3 Quantile Allgemeine Syntax: quantile(x, probs = seq(0, 1, 0.25), type = 7, ...) # x = Datenvektor, von dem die Quantile berechnet werden # n = integer von 1 bis 7 (Default = 7) gibt an, welche Berechnungsmethode zugrunde gelegt # werden soll #probs = Gibt eine Liste von Quantilen (zugehörige Wahrscheinlichkeiten) an, die berechnet # werden sollen (Default: Boxplot-Werte: 0 (min), 1 (max) , 0.25, 0.5 und 0.75-Quantil) Beispiele: > x<-c(1,1,2,3,4,5,6,7);x [1] 1 1 2 3 4 5 6 7 >quantile(Gewicht.kg,probs=seq(0,1,0.1)) 0% 8.0 # type=7 10% 20% 30% 40% 50% 60% 70% 80% 90% 100% 9.8 14.0 17.1 18.0 19.0 20.0 20.3 21.0 21.1 22.0 >quantile(Gewicht.kg,probs=seq(0,1,0.1),type=5) 0% 8.0 10% 20% 30% 40% 50% 60% 70% 80% 90% 100% 9.0 12.5 16.5 18.0 19.0 20.0 20.5 21.0 21.5 22.0 > quantile(x) ; 0% 1.00 25% 1.75 # type=7 50% 3.50 75% 5.25 100% 7.00 9 Es gibt verschiedene Algorithmen zur Berechnung von Quantilen . In R sind 7 verschiedene Varianten implementiert. Type = 1: Der kleinste beobachtete x-Wert für den gilt: höchstens (1- p)*100% aller Daten sind ≥ x! > quantile(x,type=1); 0% 1 25% 1 50% 3 75% 5 100% 7 Man bekommt das Ergebnis für type=1 auch mit Hilfe der empirischen Verteilungsfunktion: > cumsum(x)/8; #empirische Verteilungsfunktion 1 2 3 4 5 6 7 0.250 0.375 0.500 0.625 0.750 0.875 1.000 Das entsprechende p-Quantil ist der kleinste x-Wert, bei dem der %-Wert ≥ p⋅100% ist, (d.h., Fn(x) ≥ p). Ttype=2: entspricht der Definition in der Vorlesung: > quantile(x,type=2); 0% 1.0 25% 1.5 50% 3.5 75% 5.5 100% 7.0 Die Algorithmen der anderen Typen 3-7 muss man den implementierten R-Programmen entnehmen. Z.B. ist : > quantile(x,type=6); 0% 1.00 25% 50% 1.25 3.50 75% 5.75 100% 7.00 > quantile(x,type=7) ; 0% 1.00 25% 1.75 50% 3.50 75% 5.25 100% 7.00 > quantile(x); #. Default: type=7 0% 1.0 25% 1.75 50% 3.50 75% 5.25 100% 7.00 6.3.4 Empirische Verteilungsfunktion empirFn(x,typ,c) typ=0: Ausgabe des Anteils aller Daten im Stichprobenvektor x, die <=c sind typ=1: Wie typ = 0 und zusätzlich: Tabelle der empirischen Verteilungsfunktion Beispiel: Sei x<-c(1,1,2,3,4,5,6,7) Aufgabe: a) Wieviel % aller Daten sind > 4? b) Welchen Wert überschreiten höchstens 10% aller Daten? 10 Lösung: Zu a) empirFn(x,typ=0,c = 4) Ergebnis: Maximum = 7 Minimum = 1 Anteil aller Werte <= 4 : 0.625 Antwort: 37,5% Zu b) quantile(x,prob=0.9,type=1) oder quantile(x,prob=0.9,type=2) oder aus der Tabelle der empirischen Verteilungsfunktion ablesen: Aufruf: empirFn(x,typ=1) Antwort: x=7. 6.3.5 Boxplots Liste der benötigten Werte: Über die Quantile-Funktion oder mittels summary() > summary(x); Min. 1st Qu. 1.000 1.750 Median 3.500 Mean 3rd Qu. 3.625 5.250 Max. 7.000 Grafiken: Da Boxplots Quantile benötigen, muss man hier den Type-Parameter mit angeben. Default: Type=7. boxplot(x,type=2); boxplot(x,y,type=2, col=c("red","yellow")) 11 boxplot(x,y,type=2, col=c("red","yellow"), names=c(”Typ1”,”Typ2”)); 7. Statistische Zusammenhangsmaße 7.1 2-dimensionale Häufigkeitstabellen > a<-table(Lebensdauer.Jahre,Hersteller);a Hersteller Lebensdauer.Jahre Bosch Siemens VW 3 1 0 0 4 2 0 0 5 0 0 2 6 0 3 0 7 0 1 1 a ist vom Datentyp eine Matrix (kein data.frame). Die Elemente von a werden wie bei Matrizen angesprochen: > a[2,3] [1] 0 > a[2,] Bosch Siemens VW 2 0 0 >row.names(a) [1] "3" "4" "5" "6" "7" > is.array(a) [1] TRUE > dimnames(a) $Lebensdauer.Jahre [1] "3" "4" "5" "6" "7" $Hersteller [1] "Bosch" "Siemens" "VW" 3-dimensionale Tabellen: > a<-table(Lebensdauer.Jahre,Hersteller,Gewicht.kg) ;a oder > a<-table(Lebensdauer.Jahre,Hersteller,split=Gewicht.kg);a , , Gewicht.kg = 8 Hersteller Lebensdauer.Jahre Bosch Siemens VW 3 1 0 0 4 0 0 0 5 0 0 0 6 0 0 0 7 0 0 0 , , Gewicht.kg = 10 Hersteller Lebensdauer.Jahre Bosch Siemens VW 3 0 0 0 4 1 0 0 5 0 0 0 6 0 0 0 7 0 0 0 , , Gewicht.kg = 15 12 ... usw. bis , , Gewicht.kg = 22 Hersteller Lebensdauer.Jahre Bosch Siemens VW 3 0 0 0 4 0 0 0 5 0 0 0 6 0 1 0 7 0 0 0 7.2 Chi-Quadrat-Kontingenzkoeffizient 7.2.1 Berechnung des korrigierten Kontingenzkoeffizienten in der R-Konsole Erstellen der Tabelle der beobachteten Häufigkeiten: > a<-table(Lebensdauer.Jahre,Hersteller);a Hersteller Lebensdauer.Jahre Bosch Siemens VW 3 1 0 0 4 2 0 0 5 0 0 2 6 0 3 0 7 0 1 1 Berechnen der Tabelle der bei Unabhängigkeit erwarteten Häufigkeiten: # Tabellenrahmen erstellen > b<-matrix(rep(1,nrow(a)*ncol(a)),nrow(a),ncol(a),dimnames=dimnames(a)) # Füllen der Tabelle > for (i in 1:nrow(a)) {for (j in 1:ncol(a)) b[i,j]<-sum(a[i,])*sum(a[,j])/sum(a)}; b Hersteller Lebensdauer.Jahre Bosch Siemens 3 0.3 0.4 4 0.6 0.8 5 0.6 0.8 6 0.9 1.2 7 0.6 0.8 VW 0.3 0.6 0.6 0.9 0.6 Berechnen des korrigierten Kontingenzkoeffizienten: >chi<-sum((a-b)^2/b) >q<-min(nrow(a),ncol(a)) >contingenz<-sqrt(chi/(chi+sum(a)))*sqrt(q/(q-1)) >contingenz [1] 0.9727044 13 7.2.2 Die Funktion ckorr() # Funktion ckorr(a) #-----------------------# Eingabe: #............... #a = table(Vektor1,Vektor2) = Kreuztabelle der Beobachtungsdaten der beiden # Vektoren Vektor1 und Vektor2 (mit den Zeilen# und Spaltennamen dimnames) #Ausgabe: #................ # 2-dimensionale Tabelle der beobachteten Häufigkeiten (a) # 2-dimensionale Tabelle der bei Unabhängigkeit erwartene Häufigkeiten (b) # Chi-quadrat-Maß und korrigierter Kontingenzkoeffizient #---------------------------------------------------------------- Der Quelltext des Programms ckorr() ist im Anhang B aufgeführt. Beispiel: Aufgabe: Untersuchen Sie mit einem geeigneten statistischen Maß, ob im Datensatz ‚motoren.dat’ des Kapitels 1...... die Lebensdauer der Motoren vom Hersteller abhängt oder nicht! Lösung: 1. Laden der Funktion ckorr und des Datensatzes ‚motoren’ # Laden der Funktion ckorr() aus der datei ‚mystatistik.R’ > source("C:/Programme/R/R-2.2.0/meinwork/mystatistik.R") > # Laden des Datansatzes „motoren.dat“ aus Kapitel 1..... und speichern als data.frame > # ‚motoren’ (header = T ist nötig, damit die erste Zeile der Datei als Variablennamen > # erkannt wird) > motoren<-read.table("meinwork/motoren.dat",header=TRUE) > attach(motoren) # Alle folgenden Variablennamen beziehen sich auf das data.frame # motoren (siehe auch Kap. ....) 2. Erstellen der 2-dimensionalen Tabelle der beobachteten absoluten Häufigkeiten >a<-table(Lebensdauer.Jahre,Hersteller);a Hersteller Lebensdauer.Jahre Bosch Siemens VW 3 1 0 0 4 2 0 0 5 0 0 2 6 0 3 0 7 0 1 1 3. Aufruf der Funktion ckorr() > ckorr(a) [[1]] [1] "Tabelle der beobachteten Häufigkeiten: " 14 [[2]] Hersteller Lebensdauer.Jahre Bosch Siemens VW 3 1 0 0 4 2 0 0 5 0 0 2 6 0 3 0 7 0 1 1 [[3]] [1] "Tabelle der erwarteten Häufigkeiten: " [[4]] Hersteller Lebensdauer.Jahre Bosch Siemens 3 0.3 0.4 4 0.6 0.8 5 0.6 0.8 6 0.9 1.2 7 0.6 0.8 [[5]] [1] "Chi-Quadrat-Maß: VW 0.3 0.6 0.6 0.9 0.6 17.0833333333333" [[6]] [1] "Korrigierter Kontingenzkoeffizient: 0.9727" 4. Interpretation der Ergebnisse Es ist Ckoor = 0.9727. Das heißt: Die Lebensdauer ist (stochastisch) vom Hersteller abhängig. 7.3 Korrelationen cor(x,y) # Korrelationskoeffizient von Pearson für Vektoren x,y cor(x,y,method=”spearman”) cor(X) cor(X,method=”spearman”) # Korrelationskoeffizient von Spearmanfür Vektoren x,y # X = Matrix oder data.frame , # Pearson’sche Korrelationsmatrix jeder Spalte von X mit # jeder anderen Spalte, # Spearman’sche Korrelationsmatrix 7.3.1 der Korrelationskoeffizient von Pearson > x<-c(1,1,2,3,4,5,6,7); > y<-c(2,2,2,3,4,5,5,6); > plot(x,y); # Grafische Untersuchung der Linearität von x und y > cor(x,y); # Pearson-Korrelation [1] 0.9823 7.3.2 der Korrelationskoeffizient von Spearman > x<-c(1,1,2,3,4,5,6,7); y<-c(2,2,2,3,4,5,5,6) > rx<-rank(x);ry<-rank(y); # Bestimmung der Rangplätze > plot(rx,ry); # Grafische Untersuchung der Linearität der Rangplätze 15 > cor(rx,ry); [1] 0.975606 # Spearman = Pearson für die Rangplätze Eine andere Möglichkeit ist die folgende: > cor(x,y,method="spearman"); # Spearman-Korrelation [1] 0.975606 7.3.3 Erstellen von Korrelationsmatrizen Aufgabe: a) Berechnen Sie für den in Kap.1 ..... definierten data.frame ‚motoren’ die pearson’schen und die Spearman’schen Korrelationen zwischen den Merkmalen ‚Preis.T.Euro’, ‚Gewicht.kg’ und ‚Lebensdauer.Jahre’! b) Interpretieren Sie die Ergebnisse! Lösung: # Einlesen des datensatzes ‚motoren.dat’ als data.frame ‚motoren’ > motoren<-read.table("meinwork/motoren.dat",header=T) > attach(motoren) # Alle folgenden Variablennamen beziehen sich auf den Datensatz # ‚motoren’ > X<-motoren[,3:5]; X 1 2 3 4 5 6 7 8 9 10 Preis.T.Euro Gewicht.kg Lebensdauer.Jahre 50 20 6 40 18 7 46 22 6 20 15 4 42 21 5 16 10 4 52 21 7 38 18 5 16 8 3 49 20 6 > cor(X) # Pearson’sche Korrelationsmatrix Preis.T.Euro Gewicht.kg Lebensdauer.Jahre Preis.T.Euro 1.0000000 0.9274836 0.8768524 Gewicht.kg 0.9274836 1.0000000 0.8098320 Lebensdauer.Jahre 0.8768524 0.8098320 1.0000000 > cor(X,method="spearman") #Spearman’sche Korrelationsmatrix Preis.T.Euro Gewicht.kg Lebensdauer.Jahre > plot(X) Preis.T.Euro Gewicht.kg Lebensdauer.Jahre 1.0000000 0.8343715 0.8169120 0.8343715 1.0000000 0.6750527 0.8169120 0.6750527 1.0000000 # Grafische Darstellung der Beobachtungsdatenpaare 16 Interpretieren Sie die Ergebnisse der Korrelationsmatrizen und die Grafiken! 7.4 Lineare Regression # Funktion regres(k,x,y,xname,yname) #------------------------------------------------------# Eingabe: #............... #k = Ordnung des Regressionspolynoms #x,y = Vektoren der Datenpaare (x[i],y[i]), i=1,...,n #xname,yname = Namen der Vektoren x und y für die Ausgabe (Strings) #Ausgabe: #................ #Bestes Regressionspolynom als Formel #Grafik der Daten x,y und des besten Regressionspolynoms #-------------------------------------------------------- Der Quelltext der Funktion regres() ist im Anhang B aufgelistet. Beispiel: Aufgabe: a) Passen Sie an folgende Messdatenpaare ein geeignetes Polynom mittels der Methode der kleinsten Quadrate an! x y 0 0 0 1 1 1 1 2 2 2 17 2 4 3 9 3 10 a) Zeichnen Sie die Messdaten und das beste Polynom in ein und dasselbe Koordinatensystem! c) Welchen Wert sagen Sie für y an der Stelle x = 3 vorher? Lösung: 1. Laden der Funktion regres() (diese ist in der Datei statistik.R enthalten) > source("C:/Programme/R/R-2.2.0/meinwork/statistik.R") 2. Wir geben x und y ein und plotten die Messdatenpunkte, um eine geeignete Ordnung des Polynoms festzulegen! > x<-c(0,0,1,1,2,2,3,3); y<-c(0,1,1,2,2,4,9,10) ; plot (x,y) geeigneter Grad : k=2 3. Aufruf von regres() > regres(k=2,x,y,xname="Variable x",yname="Variable y") Ausgabe : ------------------------------------------Bestes Regressionspolynom der Ordnung 2 : x = Variable x y = Variable y y = 0.725 - 1.275 *x + 1.375 *x^ 2 ------------------------------------------Koeffizienten des besten Polynoms: a[ 0 ]= 0.725 a[ 1 ]= -1.275 a[ 2 ]= 1.375 ------------------------------------------Fehlerquadratsumme: RSS = 5.525 18 4. Test verschiedener anderer Grade und Vergleich der Ergebnisse mit denen für k=2 regres(k=1,x,y,xname="Variable x",yname="Variable y") regres(k=3,x,y,xname="Variable x",yname="Variable y") k=1, Fehlerquadratsumme= 20.65 k=3, Fehlerquadratsumme=3.5 (Für die Anpassung eines Polynoms der Ordnung k werden mindestens (k+1) verschiedene Messstellen xi benötigt. D.h., k>3 ist nicht möglich, da nur 4 verschiedene Messstellen xi vorliegen) 5. Wir entscheiden uns schließlich für k = 3. Das Ergebnis ist: ----------------------------------------------------------Bestes Regressionspolynom der Ordnung 3 : x = Variable x y = Variable y y = 0.5 + 2.25 *x - 2 *x^ 2 + 0.75 *x^ 3 -------------------------------------------------------------Koeffizienten des besten Polynoms: a[ 0 ]= 0.5 a[ 1 ]= 2.25 a[ 2 ]= -2 a[ 3 ]= 0.75 -------------------------------------------------------------19 Fehlerquadratsumme: RSS = 3.5 6. Vorhersage an der Stelle x=3: Dazu verwenden wir bequemerweise die in mystatistik.R enthaltene Funktion poly(x,a): >a<-c(0.5,2.25,-2,0.75); >poly(x=3,a) [1] 9.5 An der Stelle x=3 hat y voraussichtlich den Wert y=9.5 20 8. Fallstudie reakt.txt Untersuchen Sie die Wirksamkeit einer Trainingsmethode zum Beherrschen eines neuen Maschinenparks An 87 Arbeitern eines Motorenwerkes wurden folgende Merkmale beobachtet: ALTER GESCHL T0 T1 Alter (in Jahren) Geschlecht (1=weiblich, 0 = männlich) Bearbeitungszeit vor dem Training (in s) Bearbeitungszeit nach dem Training (in s) Die Arbeit beginnt nach dem Start von R mit dem Laden der Programme und der Datei. Das geschieht wie folgt: a) Laden Sie die statistischen R-Programme in den Work-Space von R: Lösung: > source("Pfad/mystatistik.R") oder: Anklicken: DateiLese R-Code ein mystatistik.R auswählen und anklicken. b) Lesen Sie den Datensatz reakt.txt (als data.frame mit dem Namen reak) ein: > reak <- read.table(„Pfad/reakt.txt“,header=TRUE) c) Machen Sie die Variablennamen des Datensatzes reak bekannt: > attach(reak) Nun kann es losgehen! Aufgabe 1) (Ergänzung des Datensatzes) a) Bilden Sie eine Variable Altersklasse mit folgenden Ausprägungen: Alter: 20 – 40 AK=1, 41-45 AK=2, >46 AK = 3 b) Bilden Sie eine neue Variable Lernerfolg = LERF=T0-T1 c) Fügen Sie beide Variablen dem Datensatz zu und speichern Sie diesen unter dem Namen reakt1.txt ab! (Mit diesem Datensatz wird nun weitergearbeitet!) Aufgabe 2) (Beschaffung von Informationen) Listen Sie alle Informationen über die Datei (in angemessenem Umfang) aus! (Typen der Variablen, Größenordnungen,...) Aufgabe 3) (Vorbereitende Untersuchungen) a) Welche Merkmale sind diskret, welche stetig? Welchen Skalentyp besitzen diese Variablen? b) Führen Sie für alle Variablen eine Häufigkeitsanalyse durch, d.h. geben Sie die Häufigkeits- bzw. Klassenhäufigkeitstabellen und die zugehörigen Grafiken an! Interpretieren Sie ggf. die Gestalt der Verteilungen: gibt es interessante Charakteristika, die man aus der Gestalt der Verteilungen entnehmen kann? Aufgabe 4) (Analyse der Personengruppe) a) Wie ist die Altersklassenverteilung innerhalb der Geschlechter ? b) Wie ist die Altersverteilung innerhalb der Geschlechter ? c) Stellen Sie eine Hypothese darüber auf, ob ‚AK’ und ‚Geschlecht’ von einander abhängen oder nicht (d.h., ob sich die Altersklassenverteilungen innerhalb der Geschlechtergruppen voneinander unterscheiden oder nicht) ! d) Untersuchen Sie nun mit einem geeigneten statistischen Maß, ob die AK vom Geschlecht abhängt oder nicht (d.h., prüfen Sie Ihre unter c) aufgestellte Hypothese)! 21 Aufgabe5) (Einfache statistische Aussagen zum Lernerfolg, geschlechts- und altersspezifisch) a) Berechnen Sie das 90% -Quantil aller Personen vor dem Training und nach dem Training! Interpretieren Sie das Ergebnis! b) Wie viele Personen überschreiten die kritische Bedienzeit von 180 s vor bzw. nach dem Training? c) Wie viel % aller Personen haben sich um mehr als 20 s verbessert? d) Welche Verbesserung erreichen mindestens 50 % aller Personen, d.h. berechnen Sie den Median der Verbesserung! e) Wie viel % aller Personen sind weiblich, wie viel % männlich? f) Führen Sie b) bis d) geschlechts-spezifisch durch! g) Wie viele Personen überschreiten ein Alter von 50 Jahren? Wieviel % aller Personen sind unter 30? h) Führen Sie b) bis d) altersklassen-spezifisch durch! i) Stellen Sie erste Hypothesen über die Wirksamkeit der Trainingsmethode auf! Gibt es eine Verbesserung der Bedienzeiten, ist die Trainingsmethode eher für Frauen oder für Männer geeignet, ist die Trainingsmethode für eine bestimmte Altersklasse nicht geeignet usw. usf. Aufgabe 6) (Vergleichende grafische und tabellarische Darstellungen des Lernerfolges) Untersuchen Sie mit Hilfe geeigneter statistischen Methoden (Grafiken und Maßzahlen), ob die Trainingsmethode eine Wirkung gezeigt hat! a) Geben Sie dazu eine Tabelle an, in der die Mittelwerte, Maximum, Minimum, Median und die Quartile der Variablen T0,T1 und LERF einander gegenübergestellt werden. b) Hat das Training eine Verbesserung gebracht? Stellen Sie die Bearbeitungszeiten vor und nach dem Training, sowie den Lernerfolg in einer geeigneten Grafik dar! Aufgabe 7) (Vergleichende grafische und tabellarische Darstellungen des Lernerfolges für verschiedene Geschlechter und Altersklassen) a) Führen Sie Aufgabe 6 geschlechtsspezifisch durch, d.h. vergleichen Sie den Lernerfolg innerhalb der Geschlechtergruppen und stellen Sie beide Gruppen gegenüber! Ist die Trainingsmethode eher für Frauen oder für Männer geeignet? Begründen Sie Ihre Aussage durch geeignete Tabellen und Grafiken! b) Führen Sie Aufgabe 6 Altersklassenspezifisch durch, d.h. vergleichen Sie den Lernerfolg innerhalb der AK und stellen Sie die 3 AK-Gruppen durch geeignete Tabellen und Grafiken gegenüber! Ist die Trainingsmethode für eine bestimmte Altersklasse besonders geeignet oder ungeeignet? c) Welche der 6 Personengruppen: Gr1= (weiblich, AK=1), Gr2=(weiblich,AK=2), ....., Gr6=(männlich, AK=3) hat die besten Leistungen vor dem Training, welche nach dem Training und welche der 6 Gruppen spricht am besten auf die Trainingsmethode an? Vergleichen Sie die 6 Gruppen mit geeigneten Maßzahlen und Grafiken miteinander. 22 Aufgabe 8) (Korrelationsanalysen) a) Berechnen Sie geeignete Korrelationsmaße zwischen Alter und Lernerfolg und interpretieren Sie diese! b) Berechnen Sie geeignete Korrelationsmaße zwischen AK und Lernerfolg und interpretieren Sie diese! c) Untersuchen Sie mit einem geeigneten Maß, ob der Erfolg der Trainingsmethode vom Geschlecht abhängt oder nicht! Aufgabe 9) (Regressionsanalyse) a) Stellen Sie eine geeignete Regressionsfunktion zwischen T0 und T1 auf! b) Kann man aus den Zeiten vor dem Training, die Bearbeitungszeiten nach dem Training vorhersagen? c) Kann man anhand des Alters den Lernerfolg vorhersagen? Interpretieren Sie alle Ergebnisse! Ziehen Sie am Ende Ihrer Studie ein Fazit! Würden Sie Männer oder Frauen, würden Sie eine bestimmte Altersklasse für die Tätigkeit bevorzugen? Bewirkt die Trainingsmethode eine Verbesserung? Welche Personengruppe spricht besonders auf das Training an? Kann man den Erfolg aus dem Alter oder der Bedienzeit vor dem Training vorhersagen usw. usf. Achtung: Der Datensatz ist ein realistischer Datensatz. Auch Negativaussagen sind wichtige Ergebnisse! 23