/* Konfidenzintervalle und Signifikanz von Mittelwertsunterschieden */ cd "d:/lehre/statistik2/ss10/Uebungen/" clear * Setzt Internetanschluss voraus (ggf. auskommentieren): insheet using "http://www2.jura.uni-hamburg.de/instkrim/kriminologie/Mitarbeiter/Enzmann/Lehre/StatIIKrim/Uebungen/ttest.dat", clear * Ohne Interneantschluss (entkommentieren und Pfadangabe ergänzen): * insheet using ttest.dat, clear describe label define lab_grupp 0 "Gruppe 1" 1 "Gruppe 2" label values gruppe lab_grupp tabstat av, statistics( mean sd count ) by(gruppe) columns(statistics) format(%5.3f) * ------------------------------------------------------------------------------ /* a) Unterscheidet sich der Mittelwert von Gruppe 1 signifikant von Null? */ /* Die Selektion der Fälle erfolgt über die Unteranweisung "if": */ ttest av==0 if gruppe==0 * ------------------------------------------------------------------------------ /* b) Unterscheidet sich der Mittelwert von Gruppe 2 signifikant von */ /* 0.2788880621 (der Differenz der Gruppenmittelwerte)? */ qui sum av if gruppe==0 return list local mean0 `r(mean)' qui sum av if gruppe==1 local meandiff = `r(mean)'-`mean0' di %12.10f `meandiff' ttest av==`meandiff' if gruppe==1 * ------------------------------------------------------------------------------ /* c) Unterscheiden sich die Mittelwerte von Gruppe 1 und 2 signifikant von- */ /* einander? */ ttest av, by(gruppe) /* d) Wie sehr überlappen sich die Konfidenzintervalle der beiden Gruppen? */ /* */ /* Ob sich die Konfidenzintervalle überlappen, lässt sich grafisch anhand */ /* von sog. Fehlerbalken untersuchen. Die Daten der Grafik (d.h. die */ /* Mittelwerte und 95%-Konfidenzintervallgrenzen) werden mit Hilfe der An- */ /* weisung -statsby- in eine Datei (hier: avgruppe.dta) geschrieben. Die */ /* Anweisung fordert die Konfidenzintervalle mittels "by(gruppe)" und */ /* ": ci av" an. */ statsby mean=r(mean) cil=r(lb) ciu=r(ub), by(gruppe) saving("avgruppe.dta", replace): ci av /* Zum Erstellen der Grafik werden zunächst die aktuellen Daten mittels */ /* -preserve- quasi zur Seite gelegt. Dann werden die oben mittels */ /* -statsby- abgespeicherten Daten der Mittelwerte und Konfidenzintervalle */ /* eingelesen um schließlich mit Hilfe der Grafikanweisung -twoway- ge- */ /* zeichnet zu werden (wobei zuvor die Daten des Arbeitsspeichers mittels */ /* -list- angezeigt werden): */ preserve use avgruppe.dta, clear list twoway (scatter mean gruppe) (rcap cil ciu gruppe), ylabel(, labsize(small)) /// xtitle("", size(vsmall)) ytitle("AV ± 95%-CI", size(small)) /// xscale(range(-0.5 1.5)) xlabel(0 1, valuelabel notick labsize(small)) /// title("Mittelwerte von AV in Gruppe 1 und 2", size(medium)) /// legend(off) xsize(5.77) ysize(4.08) scale(1.4) name(ciplot1, replace) /* Die Mittelwerts- und CI-Linien können mit Hilfe der Option "yline" er- */ /* zeugt werden, wobei die Werte hierfür zuvor in "lokale" Variablen ge- */ /* speichert werden, die dann eingschlossen in die Zeichen ` und ' (Accent */ /* grave und einfaches Hochkomma) angefordert werden: */ local ciu1 = ciu[1] local m1 = mean[1] local cil1 = cil[1] local ciu2 = ciu[2] local m2 = mean[2] local cil2 = cil[2] twoway (scatter mean gruppe) (rcap cil ciu gruppe), ylabel(, labsize(small)) /// xtitle("", size(vsmall)) ytitle("AV ± 95%-CI", size(small)) /// xscale(range(-0.5 1.5)) xlabel(0 1, valuelabel notick labsize(small)) /// title("Mittelwerte von AV in Gruppe 1 und 2", size(medium)) /// legend(off) xsize(5.77) ysize(4.08) scale(1.4) /// yline(`ciu1', lwidth(thin) lpattern(shortdash) lcolor(blue)) /// yline(`m1', lwidth(thin) lpattern(dash) lcolor(blue)) /// yline(`cil1', lwidth(thin) lpattern(shortdash) lcolor(blue)) /// yline(`ciu2', lwidth(thin) lpattern(shortdash) lcolor(red)) /// yline(`m2', lwidth(thin) lpattern(dash) lcolor(red)) /// yline(`cil2', lwidth(thin) lpattern(shortdash) lcolor(red)) /// name(ciplot1_lines, replace) /* Mit -restore- wird die originale Arbeitsdatei wiederhergestellt: */ restore /* e) Ist der Mittelwertsunterschied auch dann noch signifikant, wenn die */ /* Konfidenzintervalle jeweils die Mittelwerte der anderen Gruppe gerade */ /* berühren (man beachte, dass hier die Varianzen und Gruppengrößen gleich */ /* groß sind, so dass die Konfidenzintervalle beider Gruppen gleich weit */ /* sind)? */ /* */ /* Addieren einer Konstante zu den Werten von Gruppe 1, so dass der Mit- */ /* telwert gerade an der unteren Grenze des Konfidenzintervalls von Gruppe */ /* 2 liegt. Dies wird mittels der Addition der Differenz des unteren Kon- */ /* fidenzintervalls von Gruppe 2 (.27889) und dem Mittelwert von Gruppe 1 */ /* (.19842, vgl. a) zu den Werten von Gruppe 1 bewerkstelligt: */ replace av = av + (0.2788878 - .1984217) if (gruppe==0) /* Prüfung des Mittelwertunterschieds von Gruppe 1 und Gruppe 2: */ ttest av, by(gruppe) /* Grafische Darstellung der Konfidenzintervalle: */ statsby mean=r(mean) cil=r(lb) ciu=r(ub), by(gruppe) saving("avgruppe.dta", replace) : ci av preserve use avgruppe.dta, clear list twoway (scatter mean gruppe) (rcap cil ciu gruppe), ylabel(, labsize(small)) /// xtitle("", size(vsmall)) ytitle("AV ± 95%-CI", size(small)) /// xscale(range(-0.5 1.5)) xlabel(0 1, valuelabel notick labsize(small)) /// title("Mittelwerte von AV in Gruppe 1 und 2", size(medium)) /// legend(off) xsize(5.77) ysize(4.08) scale(1.4) name(ciplot2, replace) restore /* f) Zur Demonstration, dass ab einer Stichprobengröße von 10 die Signifi- */ /* kanz einer Mittelwertsdifferenz kleiner .01 ist wenn die Konfidenzin- */ /* tervalle der beiden Mittelwerte sich gerade berühren, wird der Mittel- */ /* wert von Gruppe 1 nun noch um eine Hälfte des Konfidenzintervalls nach */ /* unten verschoben: */ replace av = av - (0.4773098 - 0.2788878) if (gruppe==0) ttest av, by(gruppe) statsby mean=r(mean) cil=r(lb) ciu=r(ub), by(gruppe) saving("avgruppe.dta", replace) : ci av preserve use avgruppe.dta, clear list twoway (scatter mean gruppe) (rcap cil ciu gruppe), ylabel(, labsize(small)) /// xtitle("", size(vsmall)) ytitle("AV ± 95%-CI", size(small)) /// xscale(range(-0.5 1.5)) xlabel(0 1, valuelabel notick labsize(small)) /// title("Mittelwerte von AV in Gruppe 1 und 2", size(medium)) /// legend(off) xsize(5.77) ysize(4.08) scale(1.4) name(ciplot3, replace) restore * ------------------------------------------------------------------------------ /* Mittelwertvergleiche bei abhängigen (gepaarten) Stichproben: */ /* Einlesen der Daten via input: */ clear input paar x1 x2 1 65 61 2 48 42 3 63 66 4 52 52 5 61 47 6 53 58 7 63 65 8 70 62 9 65 64 10 66 69 end compress sum x1 x2 /* Die Korrelation der Messungen ist hoch: */ correlate x1 x2 /* Prüfung des Mittelwertunterschieds auf Signifikanz (t-Test für abhängige */ /* Messungen): */ ttest x1 == x2 /* Demonstration, dass die Korrelation der Messungen unverändert bleibt aber */ /* der Mittelwertsunterschied signifikant wird, wenn der Mittelwert von x2 */ /* um die untere Grenze Konfidenzintervalls des Mittelwertunterschieds nach */ /* unten verschoben wird (und dass bei Messwiederholungen die Konfidenzinter- */ /* valle der jeweiligen Messungen nicht geeignet sind für die Beurteilung der */ /* Signifikanz des Mittelwertunterschiedes!): */ replace x2 = x2 - 2.265564 * Wer es allgemeingültig will, kann auch mit den "return"-Werten arbeiten: * replace x2 = x2 + ((`r(mu_1)'-`r(mu_2)')-invttail(`r(df_t)',(1-.95)/2)*`r(se)') ttest x1 == x2 correlate x1 x2