Gewichtung wegen Oversampling/Überrepräsentation im Datensatz

Allgemeine Statistik mit R, die Test-Methode ist noch nicht bekannt, ich habe noch keinen Plan!

Moderatoren: EDi, jogo

Antworten
Schlesinger
Beiträge: 11
Registriert: Mi Mär 08, 2017 2:41 pm

Gewichtung wegen Oversampling/Überrepräsentation im Datensatz

Beitrag von Schlesinger »

Hallo R-Forum,

ich bin absoluter Anfänger und möchte mit dem Allbus-Datensatz 2014 arbeiten, allerdings wurden dort die neuen Bundesländer bewusst überrepräsentiert (Oversampling) - dafür wurde die Variable V870 erstellt um dies auszugleichen.

Bei nahezu jeder Berechnung des arith. Mittels etc. steht im Allbus "gewichtet" nach V870, wenn ich mit R nachrechne und auf die GG schließen möchte, bekomme ich natürlich abweichende Zahlen, da ich nicht weiß wie ich mit R nach V870 gewichte.

Gibt es einen einfachen Befehl der den gesamten Datensatz gewichtet?

Der Gewichtungswert für Ostdeutschland beträgt 0,5639131und der für Westdeutschland 1,2047504.

Im Datensatz selbst steht wie man die Gewichtung für SPSS und STATA hinbekommt - für R leider nicht :?

"In SPSS würde die Operation in folgenderweise vorgenommen:

Code: Alles auswählen

WEIGHT BY V870.
FREQUENCIES VARIABLES=V7.
In STATA ist die allgemeine Syntaxform zur Gewichtung: command [weightword=exp]
In diesem Beispiel etwa:

Code: Alles auswählen

tabulate V7 [weight=V870]
Zu beachten ist, dass STATA bei Sampling-Gewichten (wie im vorliegenden Beispiel) ebenso wie bei einigen anderen
Gewichtungen (z.B. Häufigkeitsgewichten „frequency weights“), keine Gewichtungswerte mit Nachkommastellen
akzeptiert. Ein einfaches Auf- oder Abrunden führt aber ebenfalls häufig zu falschen Ergebnissen – im vorliegenden
Fall würden bei Rundung der Gewichtungsvariablen der Gewichtungswert für ostdeutsche Befragte (0,56)
auf 1 aufgerundet, der Gewichtungswert für westdeutsche Befragte (1,2) auf den Wert 1 abgerundet. Eine mögliche
Lösung zur Korrektur dieser Problematik ist es, zunächst die Gewichtungsvariable mit 100 (oder 1000) zu
multiplizieren und anschließend auf ganze Werte zu runden:

Code: Alles auswählen

tabulate V7 [weight=round(V870*100)]
Verteilungen sollten anschließend korrekt berechnet werden. Beim Bericht der Ergebnisse ist jedoch zu beachten,
dass die zu Grunde liegende Fallzahl anschließend wieder korrigiert werden muss (also durch 100, 1000 geteilt
werden muss)."

Wäre sehr dankbar für eure Hilfe :)
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: Gewichtung wegen Oversampling/Überrepräsentation im Datensatz

Beitrag von jogo »

Hallo Schlesinger,

willkommen im Forum!
In R gibt es die Funktion weighted.mean(x, w, ...), mit der man gewogene arithmetische Mittel berechnen kann.
Wie man das an einem konkreten Datensatz macht, dass kann man besser bestimmen, wenn man den Datensatz kennt im Sinne von viewtopic.php?f=20&t=11

Gruß, Jörg
Benutzeravatar
EDi
Beiträge: 1599
Registriert: Sa Okt 08, 2016 3:39 pm

Re: Gewichtung wegen Oversampling/Überrepräsentation im Datensatz

Beitrag von EDi »

questionr::wtd.table() könnte auch was für dich sein.
Bitte immer ein reproduzierbares Minimalbeispiel angeben. Meinungen gehören mir und geben nicht die meines Brötchengebers wieder.

Dieser Beitrag ist lizensiert unter einer CC BY 4.0 Lizenz
Bild.
Schlesinger
Beiträge: 11
Registriert: Mi Mär 08, 2017 2:41 pm

Re: Gewichtung wegen Oversampling/Überrepräsentation im Datensatz

Beitrag von Schlesinger »

Ah super, vielen vielen Dank ! :D
Das mit dem arith.Mittel bekomm ich nun hin, das funktioniert in meinem Fall mit

Code: Alles auswählen

weighted.mean(PSID.Redux$Income,PSID.Redux$V870)

Mein Ziel ist letztendlich eine Multiple lineare Regression bzw. Einfache lineare Regression, wie mache ich das dort :? :)

Im Moment mach ich es so:

Code: Alles auswählen

Modell1 <- lm(Income~Age,data=PSID.Redux)
summary(Modell1)
Allerdings wird in dem Fall ja nur die Regression inclusive Oversampling des "Ostens" berechnet, sodass ich keine Aussagen über die GG treffen kann. :(

Ich hoffe da weiß jemand weiter ;)
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: Gewichtung wegen Oversampling/Überrepräsentation im Datensatz

Beitrag von jogo »

Hallo Schlesinger,

was soll nochmal GG heißen?
Meinst Du, dass es so aussehen sollte

Code: Alles auswählen

lm(Income*V870 ~ Age, data=PSID.Redux)
oder doch eher

Code: Alles auswählen

lm(Income/V870 ~ Age, data=PSID.Redux)
:?:

Gruß, Jörg
Schlesinger
Beiträge: 11
Registriert: Mi Mär 08, 2017 2:41 pm

Re: Gewichtung wegen Oversampling/Überrepräsentation im Datensatz

Beitrag von Schlesinger »

GG steht für Grundgesamtheit, also in meinem Fall Gesamtdeutschland

Ah okay - ich glaube ich weiß wo mein Problem lag. Ich habe Variable V870 jetzt erst so wirklich verstanden - im Datensatz gab es für die Variable V870 jeweils zwei Merkmalsausprägungen: "0,563..." für jeden aus dem Osten und "1,205..." für jeden aus dem Westen.

Wenn ich nun also das Oversampling vom Osten, bei dem "zu viele" Ostdeutsche befragt worden sind herausrechnen will, muss ich lediglich die jeweilige Variable mit V870 multiplizieren.

Bei dem Beispiel wird jedes angebene Einkommen mit dem jeweiligen Faktor ("0,563..." oder "0,1205.." - je nachdem, ob der Befragte aus West oder Ostdeutschland kam) multipliziert, sodass man Aussagen über Gesamtdeutschland treffen kann, obwohl ein bewusstes Oversampling im Osten stattgefunden hat.

Code: Alles auswählen

lm(Income*V870~Age, data=PSID.Redux)
Allerdings wurde ja im gesamten Datensatz der Osten überrepräsentiert/oversampelt, deshalb müsste ich auch das Alter mit V870 multiplizieren :idea:

Code: Alles auswählen

lm(Income*V870~Age*V870, data=PSID.Redux)

Bei einer multiplen linearen Regression mit z.B. 5 Variblen aus dem (Allbus)-Datensatz, müsste ich also jede der 5 Variablen wieder mit V870 multiplizieren - mhh gibt es da vielleicht eine Möglichkeit das irgendwie zu vereinfachen? Eventuell bei der Rekodierung direkt mit V870 multiplizieren?

Code: Alles auswählen

PSID$Age <- PSID$V84*PSID$V870
anstatt

Code: Alles auswählen

PSID$Age <- PSID$V84


Edit: Mhh mit dem Rekodieren funktionierts bei mir nicht - allerdings wäre selbst wenn es funktioniert hätte jedes Alter, Einkommen etc. mit Faktor multipliziert und die einzelnen Daten würden keinen Sinn mehr ergeben. Zum Beispiel Kinderzahl 1 würde zu "0,563.." Kinder führen im Osten und im Westen wäre eine Kinderzahl von 1 zu "1,205..." geworden.
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: Gewichtung wegen Oversampling/Überrepräsentation im Datensatz

Beitrag von bigben »

Wie wäre es, wenn Du per Zufall einfach ein paar Ossis weglässt, bis ihr Anteil wieder dem Gesamtbevölkerungsanteil entspricht?
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Schlesinger
Beiträge: 11
Registriert: Mi Mär 08, 2017 2:41 pm

Re: Gewichtung wegen Oversampling/Überrepräsentation im Datensatz

Beitrag von Schlesinger »

Mhh gute Idee so würde ich denke ich das Problem umgehen ;)
Antworten