R-Skript, Kap2

Werbung
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
Herunterladen