Variable zentrieren

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

Moderatoren: EDi, jogo

Sören Nonnengart
Beiträge: 9
Registriert: Mi Dez 18, 2019 10:31 pm

Variable zentrieren

Beitrag von Sören Nonnengart »

Hallo an alle

Ich würde gerne eine Variable in Abhängigkeit einer anderen Variable zentrieren.

Ich benutze einen Paneldatensatz und somit gibt es für eine Person mehrere Personenjahre (möglich sind maximal t=2008 - t= 2015), also 8 Wellen oder halt Personenjahre. Die Personenjahre werden unter der Variable "wave" gelistet.
Ich würde nun gerne diese Variable um das Jahr zentrieren, in welchem die Ausprägung einer anderen 0-1-dummy kodierten Variable "Arbeitslosigkeit" von 0=arbeitstätig auf 1=arbeitslos wechselt. Das heißt, für jede der N=508 Personen in meinem Datensatz, müsste sich dann ein entsprechender zentrierter Wert für die Variable "wave" ermitteln lassen. Also genau für das Jahr, indem die Person auf der anderen Variablen "Arbeitslosigkeit" zum ersten mal die Ausprägung 1 =arbeitslos angegeben hat.

Hat da jemand eine Idee wie man das machen kann?

Ps. In meinem Datensatz sind alle Personen drin, die zunächst berufstätig waren und dann im Laufe der 8 Erhebungswellen mindestens ein mal arbeitslos wurden.

Beste Grüße
Sauron
jogo
Beiträge: 2086
Registriert: Fr Okt 07, 2016 8:25 am

Re: Variable zentrieren

Beitrag von jogo »

Hallo Sören,

kannst Du bitte ein kleines Rechenbeispiel (Ausgangsdaten) angeben mit dem gewünschten Ergebnis?

Gruß, Jörg
Sören Nonnengart
Beiträge: 9
Registriert: Mi Dez 18, 2019 10:31 pm

Re: Variable zentrieren

Beitrag von Sören Nonnengart »

Ich kann es anhand des folgenden Beispielsdatensatzes versuchen (Sind also fiktive Daten)

Zunächst zur Kodierung: I = Personen-ID, W=Erhebungswelle, B=Beschäftigungsstatus (0=beschäftigt, 1=arbeitslos), L=Lebenszufriedenheit (0-10).
(Es sind in meinem Datensatz zwar 8 Wellen von 2008-2015. Zur besseren Übersicht belasse ich es aber bei 5.

Code: Alles auswählen

D <- read.table(header=TRUE, text=
"I W B L
1 1 0 7
1 2 0 7
1 3 1 5
1 4 0 6
1 5 0 7
2 1 0 9
2 2 1 7
2 3 0 8
2 4 0 8
2 5 0 9
3 1 0 7 
3 2 0 7
3 3 0 8
3 4 1 5
3 5 0 6")
Das wäre nun ein Datensatz mit nahezu idealen Werten. Das Ereignis Arbeitslosigkeit tritt ein und die LZ sinkt, geht aber wieder nach ein paar Jahren auf den alten Wert zurück. Empirisch zeigen bisherige studien zwar was anderes (Lucas et al. 2004), aber aus Darstellungsgründen ist das schon in Ordnung.
(Wobei -W1 1 Jahr vor dem Ereignis B=1 bedeutet, W0 für den Eintritt des Ereignisses B=1. W1 wäre dann 1 Jahr nach dem Ereignis... -W2 = 2 Jahre davor und W2 gleich zwei jahre danach usw.)
Gesetz dem Fall, ich hätte nun einen Datensatz wie den Obigen. Dann sollte es in etwa folgendermaßen aussehen:
ID 1: -W2 ist B=0 und L=7 // -W1 ist B=0 und L=7 // W0 ist B=1 und L=5 // W1 ist B=0 und L=6 // W2 ist B=0 und L=7.
ID 2: -W1 ist B=0 und L=9 // W0 ist B=1 und L=7 // W1 ist B=0 und L=8 // W2 ist B=0 und L=8 // W3 ist B=0 und L=9.
ID 3: -W3 ist B=0 und L=7 // -W2 ist B=0 und L=7 // -W1 ist B=0 und L=8 // W0 ist B=1 und L=5 // W1 ist B=0 und L=6 .... usw.

Also die Variable W ist zentriert in Abhängigkeit der Variable B=(Arbeitslos=1; beschäftigt=0) und zwar je nachdem, wann dieses Ereignis eintritt.

Somit sollte sich für jede Welle (-W3,-W2,-W1,W0, W1, W2,W3) ein Mittelwert für die Lebenszufriedenheit aller Personen berechnen lassen, die zu den entsprechenden Zeitpunkt gemeinsam haben (beispielsweise alle Personen die bei -W2 eine 0 haben), also wo die jewilige Person beberufstätig war, aber auch für den Zeitpunkt, wo die Person arbeitslos wurde usw.
In meinem Datensatz sind nur Personen drin, die mindestens 1 mal arbeitslos geworden sind und zum Zeitpunkt der ersten Erhebung, noch nicht arbeitslos waren. Damit kann dann auch ein Kausaleffekt bestimmt werden.

Ich hoffe, dass ist so halbwegs nachvollziehbar.
https://journals.sagepub.com/doi/full/1 ... 01501002.x <--- Hier ist noch ein Link einer Studie, wie es Lucas et al. gemacht haben. Abbildung 1. zeigt genau das, was ich auch darstellen will. (Predicted changes in life satisfaction before, during, and after unemployment. Satisfaction scores are centered. Year 0 is the year of unemployment.)
Zuletzt geändert von jogo am Fr Dez 27, 2019 11:54 am, insgesamt 2-mal geändert.
Grund: Formatierung verbessert, siehe http://forum.r-statistik.de/viewtopic.php?f=20&t=29
Sauron
Sören Nonnengart
Beiträge: 9
Registriert: Mi Dez 18, 2019 10:31 pm

Re: Variable zentrieren

Beitrag von Sören Nonnengart »

Zur Rechnung ... -W1 würde für die Lebenszufriedenheit einen Mittelwert von ( 7+9+8 ) /3= 8 ergeben. Der Mittelwert entspricht somit allen Werten für die Lebenszufriedenheit jeder Person, ein Jahr vor dem Ereignis Arbeitslosigkeit, summiert und durch die Anzahl an Personen geteilt, die dort einen Wert angegeben haben. Bei B=1 ergäbe sich dann ein MW von (5+7+5)/3=5,66.
Zuletzt geändert von jogo am Fr Dez 27, 2019 11:50 am, insgesamt 1-mal geändert.
Grund: ich habe die notwendigen Klammern ergänzt
Sauron
jogo
Beiträge: 2086
Registriert: Fr Okt 07, 2016 8:25 am

Re: Variable zentrieren

Beitrag von jogo »

Hallo Sören,

hier ist schonmal die Umrechnung der Waves auf den Zeitpunkt der Arbeitslosigkeit:

Code: Alles auswählen

D <- read.table(header=TRUE, text=
"I W B L
1 1 0 7
1 2 0 7
1 3 1 5
1 4 0 6
1 5 0 7
2 1 0 9
2 2 1 7
2 3 0 8
2 4 0 8
2 5 0 9
3 1 0 7 
3 2 0 7
3 3 0 8
3 4 1 5
3 5 0 6")

D$WB <- unlist(by(D, D$I, FUN=function(d) d$W-which(d$B==1)))
D
Wichtig dabei: der Dataframe ist nach $I sortiert (die Beobachtungen zu jedem Wert I sind ohne Lücke beisammen).

Gruß, Jörg
jogo
Beiträge: 2086
Registriert: Fr Okt 07, 2016 8:25 am

Re: Variable zentrieren

Beitrag von jogo »

Sören Nonnengart hat geschrieben: Mo Dez 23, 2019 3:48 pm Ich hoffe, dass ist so halbwegs nachvollziehbar.
https://journals.sagepub.com/doi/full/1 ... 01501002.x <--- Hier ist noch ein Link einer Studie, wie es Lucas et al. gemacht haben. Abbildung 1. zeigt genau das, was ich auch darstellen will. (Predicted changes in life satisfaction before, during, and after unemployment. Satisfaction scores are centered. Year 0 is the year of unemployment.)
Leider kann ich die Abbildung nicht sehen, weil ich nicht den gesamten Artikel sehen kann. (Vielleicht wird das besser, wenn ich an meinem Computer am Arbeitsplatz sitze. ... ab 07.01.2020)

Vielleicht ist dies passend:

Code: Alles auswählen

D <- read.table(header=TRUE, text=
"I W B L
1 1 0 7
1 2 0 7
1 3 1 5
1 4 0 6
1 5 0 7
2 1 0 9
2 2 1 7
2 3 0 8
2 4 0 8
2 5 0 9
3 1 0 7 
3 2 0 7
3 3 0 8
3 4 1 5
3 5 0 6")


modDF <- function(d) { 
  d$WB <- d$W-which(d$B==1)
  d
}

Dneu <- do.call(rbind, by(D, D$I, FUN=modDF))

tapply(Dneu$L, Dneu$WB, FUN=mean)
(ich habe auch gleich noch die Berechnung von $WB robust gestaltet, so dass die Originaldaten nicht zusammenhängend sein müssen bezüglich $I)

Gruß, Jörg
Sören Nonnengart
Beiträge: 9
Registriert: Mi Dez 18, 2019 10:31 pm

Re: Variable zentrieren

Beitrag von Sören Nonnengart »

Wow! ich weiß gar nicht wie sehr ich dir danken kann. Es hat alles wunderbar funktioniert. Ich habe nun nur noch ein Problem. Teilweise sind Personen 2 oder 3 Jahre Arbeitslos und im Datensatz wird dann folgendes angezeigt:

I W B WB
1 1 0 -2
1 2 0 -1
1 3 1 -1
1 4 1 1

Das heißt, ich müsste eventuell noch die Personen rausschmeißen, die länger als 1 Jahr arbeitslos waren, oder?
Sauron
jogo
Beiträge: 2086
Registriert: Fr Okt 07, 2016 8:25 am

Re: Variable zentrieren

Beitrag von jogo »

Sören Nonnengart hat geschrieben: Mo Dez 30, 2019 2:49 pm Wow! ich weiß gar nicht wie sehr ich dir danken kann. Es hat alles wunderbar funktioniert. Ich habe nun nur noch ein Problem. Teilweise sind Personen 2 oder 3 Jahre Arbeitslos und im Datensatz wird dann folgendes angezeigt: ...

Das heißt, ich müsste eventuell noch die Personen rausschmeißen, die länger als 1 Jahr arbeitslos waren, oder?
(ich komme zwar auf ein anderes Ergebnis, aber das sei dahingestellt) Die entscheidende Frage ist, ob Du die Personen in diesem Fall löschen möchtest, oder ob Du z.B. den Zeitpunkt des Beginns der ersten Arbeitslosigkeit nehmen möchtest als t0.

Falls ja, könnte es so aussehen:

Code: Alles auswählen

D <- read.table(header=TRUE, text=
"I W B WB0
1 1 0 -2
1 2 0 -1
1 3 1 -1
1 4 1 1")

modDF <- function(d) { 
  d$WB <- d$W - min(which(d$B==1))
  d
}

modDF(D)
Gruß, Jörg
Sören Nonnengart
Beiträge: 9
Registriert: Mi Dez 18, 2019 10:31 pm

Re: Variable zentrieren

Beitrag von Sören Nonnengart »

Das liegt daran, weil ich deine Syntax auf meinen anderen Datensatz, mit dem ich gegenwärtig arbeite, anwende. Mit dem obigen Datensatz habe ich natürlich das gleiche Ergebnis.

Ich habe es nun mit "min(which(...." gemacht. Die Ergebnisse sind ziemlich ähnlich. Wie schmeiße ich denn diejenigen raus, die mehr als 1 jahr arbeitslos waren?

Liebe Grüße
Sören
Zuletzt geändert von Sören Nonnengart am Mo Dez 30, 2019 10:58 pm, insgesamt 1-mal geändert.
Sauron
jogo
Beiträge: 2086
Registriert: Fr Okt 07, 2016 8:25 am

Re: Variable zentrieren

Beitrag von jogo »

... und hier ist noch eine Variante mit data.table:

Code: Alles auswählen

library("data.table")

D <- fread(
"I W B L
1 1 0 7
1 2 0 7
1 3 1 5
1 4 0 6
1 5 0 7
2 1 0 9
2 2 1 7
2 3 0 8
2 4 0 8
2 5 0 9
3 1 0 7 
3 2 0 7
3 3 0 8
3 4 1 5
3 5 0 6")

modDF <- function(d) { 
  d$WB <- d$W - min(which(d$B==1))
  d
}

D[, modDF(.SD), I][, .(L=mean(L)), WB]
Antworten