******************************************************************************************. * GESIS - Leibniz-Institut für Sozialwissenschaften * German Microdata Lab (GML), Mannheim * Postfach 12 21 55 * 68072 Mannheim * Tel.: 0621/1246-265 Fax: 0621/1246-100 * E-Mail: gml@gesis.org *******************************************************************************************. /* -------------------------- VarMZ_R.DO ---------------------------------- 1. Programmname: VarMZ_A.DO (URL http://www.gesis.org/fileadmin/upload/dienstleistung/tools_standards/mikrodaten_tools/Varianz/SP-Fehler/varmz_r.do) 2. Programmautoren: Ulrich Rendtel (rendtel@em.uni-frankfurt.de) Bernhard Schimpl-Neimanns (bernhard.schimpl-neimanns@gesis.org) 3. Zweck des Programms: Berechnung der Varianz des Pi-Schaetzers fuer das Verhaeltnis R zweier Totals, t_y und t_z, im faktisch anonymisierten Mikrozensus (FAMZ) 1996. Hier am Beispiel des Merkmals Y "Ledige" (EF35=1) fuer die Subpopulation Z "Bevoelkerung in Privathaushalten" (EF506=1) Das Programm kann auch zur Berechnung der Varianz des arithmetischen Mittelwerts der Variablen Y fuer die Subpopulation Z verwendet werden. (Ein Beispiel befindet sich am Ende des Programms.) 4. Weiterfuehrende Aufgabenbeschreibungen: Rendtel, Ulrich; Schimpl-Neimanns, Bernhard: Varianzschaetzungen fuer den faktisch anonymisierten Mikrozensus. In: Jahrbuecher fuer Nationaloekonomie und Statistik, 220/6, 2000, S. 759-776. Rendtel, Ulrich; Schimpl-Neimanns, Bernhard: Die Berechnung der Varianz von Populationsschaetzern im Scientific Use File des Mikrozensus. In: ZUMA-Nachrichten Nr. 48, 2001,S. 85-116. (URL http://www.gesis.org/fileadmin/upload/dienstleistung/ tools_standards/mikrodaten_tools/Varianz/SP-Fehler/zn48_10-bernhard.pdf) Schimpl-Neimanns, Bernhard; Rendtel, Ulrich: SAS-, SPSS- und STATA-Programme zur Berechnung der Varianz von Populationsschaetzern im Mikrozensus. ZUMA-Methodenbericht Nr. 2001/04. Mannheim. (URL http://www.gesis.org/fileadmin/upload/ dienstleistung/tools_standards/mikrodaten_tools/Varianz/SP-Fehler/tb01_04.pdf) 5. Projektbeginn: Oktober 1999 6. Letzte Programmaenderung: 26. Januar 2001 7. Programmstatus: Getestet mit Intercooled STATA 6.0 for Windows 95/98/NT (Windows NT 4.0, SP6) und Mikrozensus 1996 (faktisch anonymisierte 70%-Substichprobe). 8. Erforderliche Programmeingaben: STATA-Datensatz basierend auf den Rohdaten des Mikrozensus. Das File sollte keine Missing Values enthalten. Schichtvariablen: EF1 Bundesland, EF708 Gemeindegroessenklasse, EF712 Gebaeudegroessenklasse Klumpenidentifikation (PSU): EF3 Auswahlbezirk Haushaltsidentifikation (HHNR): EF4 Haushaltsnummer Die bei anderen als in diesem Beispiel verwendeten Y-Variablen und Subpopulationen (Z) sowie insgesamt zu aendernden Programmschritte sind mit spitzen Klammern <> gekennzeichnet. 9. Grobe Programmstruktur: A Einzeldaten einlesen und benoetigte Variablen definieren Berechnen des Gesamt-Totals, des Verhaeltnisses R = t_y / t_z und der Hilfsgroesse u = y-R*z Berechnen der Haushaltstotals B Haushaltsbezogene Daten weiterverarbeiten (ggf. einlesen) C Berechnen der PSU Totals und PSU Within Varianzen Berechnen der Schicht Totals, der Between Varianz und der Summe der gewichteten Within Varianzen Summation der Totals und Varianz Terme ueber die Schichten Berechnung der Standard Abweichungen Berechnung der Varianz unter Annahme der Binomialverteilung Berechnung der auszugebenden Kennwerte Ausgabe der Kennwerte --------------------------------------------------------------------- */ version 6.0 log using , replace set log linesize 250 set memory <80m> * set virtual on set more off #delimit ; /* Teil A: Daten Personenbezogen */ use ef1 ef3 ef4 ef708 ef712 using , clear ; rename ef3 psu ; rename ef4 hhnr ; generate schicht = ef1*100 + ef708*10 + ef712; generate z = <(ef506==1)> ; generate y = <(ef35==1)>*z ; label variable psu "Auswahlbezirksnummer (EF3)" ; label variable hhnr "lfd. Haushaltsnummer (EF4)" ; label variable schicht "Bundesland | Gemeindegroesse | Gebaeudeschicht" ; label variable y "" ; label variable z "" ; /* Sortieren falls noetig, sonst ueberspringen */ sort schicht psu hhnr; * Berechnen der Gesamt-Totals (t_y, t_z), des Verhaeltnisses ; * und der Hilfsgroesse u = y - R*z ("ratio residual") ; egen t_y = sum(y) ; egen t_z = sum(z) ; generate r = t_y / t_z ; generate u = y - r*z ; generate n_stichp=t_z ; label variable t_y "Total y" ; label variable t_z "Total z" ; label variable r "Verhaeltnis R = t_y / t_z" ; label variable u "Hilfsgroesse y-R*z" ; /* Berechnen der Haushaltstotals und Uebernahme der Gesamt-Totals sowie des Verhaeltnisses R */ collapse (sum) u_k=u z_k=z (max) n_stichp r t_y t_z, by(schicht psu hhnr); recode u_k .=0 ; /* Ende Teil A */ /* Teil B: Daten Haushaltsbezogen Beim Einlesen haushaltsbezogener Daten muessen Y, Z und U etc. als y_k, z_k und u_k aggregiert vorliegen (siehe oben) */ /* Sortieren falls noetig, sonst ueberspringen */ sort schicht psu hhnr; /* Ende Teil B */ /* Teil C: Ab hier weiter in beiden Faellen */ /* Berechnen der PSU Totals und PSU Within Varianzen */ collapse (sum) psu_u=u_k (count) psu_n=u_k (sd) psu_var=u_k (max) n_stichp r t_y t_z, by(schicht psu) ; recode psu_u .=0 ; * psu_var ist Std.Abw.: quadrieren; replace psu_var = psu_var*psu_var ; /* Berechnen der Schicht Totals, der Between Varianz und der Summe der gewichteten Within Varianzen */ /* Einige PSUs sind im FAMZ nur mit E I N E M Haushalt repraesentiert - Missings rekodieren */ recode psu_var .=0 ; * Berechnung n_i*S^2(s_i); generate n_var = psu_n * psu_var ; label variable n_var "PSU Within Varianz" ; collapse (sum) str_u=psu_u str_with=n_var (count) str_n=psu_u (sd) between=psu_u (max) n_stichp r t_y t_z, by(schicht) ; recode between .=0 ; * between ist std.abw. => quadrieren ; replace between=between*between ; /* Strata Varianz = 100^2*0.99*n_(I,h)*S^2(n_I,h)/(0.7*0.7) + [= V_betw] 100*0.3/(0.7*0.7) * Summe n_i*S^2(s_i) [= V_with]*/ generate v_betw=100*100*0.99*str_n*between/(0.7*0.7) ; generate v_with=100*0.3*str_with/(0.7*0.7) ; generate v = v_betw+v_with ; /* Summation der Varianz Terme ueber die Strata */ collapse (sum) v v_betw v_with (max) n_stichp r t_y t_z ; * Stichproben- -> Populationswerte ; replace t_y=t_y*100/0.7 ; replace t_z=t_z*100/0.7 ; /* Berechnung der Standardabweichungen und Ausdrucken der Ergebnisse Division der Varianzen durch t_z^2 */ replace v=v/(t_z*t_z) ; replace v_betw=v_betw/(t_z*t_z) ; replace v_with=v_with/(t_z*t_z) ; generate sig_v = 100*sqrt(v) ; generate sig_b = 100*sqrt(v_betw) ; generate sig_w = 100*sqrt(v_with) ; generate rel = sig_v / r ; * Berechnung des Std. Fehlers bei einfacher Zufallsstichprobe ; * NUR BEI ANTEILSWERTEN ; generate sig_bin=100*sqrt( (r*(1-r))/(n_stichp-1)); generate deft=sig_v/sig_bin; label variable sig_v "Std.Fehler Merkmalswert (in Prozent)" ; label variable sig_b "Std.Fehler Between-Teil (in Prozent)" ; label variable sig_w "Std.Fehler Within-Teil (in Prozent)" ; label variable sig_bin "Std.Fehler Binomialverteilung (in Prozent)"; label variable rel "relativer Std.Fehler in Prozent (sig_v/r)"; label variable deft "Design-Effekt Faktor"; label variable r "Anteilswert R (in Prozent)"; label variable t_y "Total y (in 1000)"; label variable t_z "Total z (in 1000)"; * Ausgabe der Kennwerte ; * t_y und t_z in 1000 und r in Prozent ausgeben ; replace t_y=t_y / 1000; replace t_z=t_z / 1000 ; replace r=r*100; format t_y t_z r sig_v sig_b sig_w rel %10.6f ; list t_y t_z r ; list sig_v sig_b sig_w rel ; list deft sig_bin ; #delimit cr log close exit /* =============== PROGRAMMAENDERUNGEN BEI MITTELWERTEN ===================== Beispiel: Merkmal Y "Heiratsalter von verheirateten und mit dem Partner zusammenlebenden Frauen ..." Subpopulation Z "verheiratete, mit dem Partner zusammenlebende Frauen, Bevoelkerung am Hauptwohnsitz, gueltige Angaben zum Heiratsjahr und Heiratsjahr>=1925, Geburtsjahr>=1901" . generate z =<(ef32==2 & ef505>=1 & ef505<=2 & ef35==2 & ef575>=1 & ef575<=3 & ef33>=1901 & ef36>=1925 & ef36<=1996)> ; generate y =; label variable y ""; label variable z "" ; * (...) ; /* Berechnung der Standardabweichungen und Ausdrucken der Ergebnisse */ * Ausgabe des Mittelwerts r nicht in Prozent: ; * naechste Zeile loeschen oder auskommentieren ; * replace r=r*100; label variable r "Mittelwert von y"; ================== PROGRAMMAENDERUNGEN BEI MITTELWERTEN ====================*/