Jeg har problemer med å generere følgende dummy-variabler i R:
Jeg analyserer årlige tidsseriedata (tidsperiode 1948-2009). Jeg har to spørsmål:
Hvordan genererer jeg en dummyvariabel for observasjon nr. 10, dvs. for år 1957 (verdi = 1 i 1957 og null ellers)?
Hvordan genererer jeg en dummyvariabel som er null før 1957 og tar verdien 1 fra 1957 og frem til 2009?
Et annet alternativ som kan fungere bedre hvis du har mange variabler, er factor
og model.matrix
.
> year.f = factor(year)
> dummies = model.matrix(~year.f)
Dette inkluderer en intercept-kolonne (alle enere) og en kolonne for hvert av årene i datasettet, bortsett fra ett, som vil være "default" eller intercept-verdien.
Du kan endre hvordan "default" velges ved å endre contrasts.arg
i model.matrix
.
Hvis du vil utelate skjæringspunktet, kan du bare droppe den første kolonnen eller legge til +0
på slutten av formelen.
Håper dette er nyttig.
Den enkleste måten å produsere disse dummyvariablene på er omtrent som følger:
> print(year)
[1] 1956 1957 1957 1958 1958 1959
> dummy <- as.numeric(year == 1957)
> print(dummy)
[1] 0 1 1 0 0 0
> dummy2 <- as.numeric(year >= 1957)
> print(dummy2)
[1] 0 1 1 1 1 1
Mer generelt kan du bruke ifelse
til å velge mellom to verdier avhengig av en betingelse. Hvis du av en eller annen grunn ønsker å bruke for eksempel 4 og 7 i stedet for en 0-1 dummyvariabel, kan du bruke ifelse(år == 1957, 4, 7)
.
Det jeg vanligvis gjør når jeg arbeider med denne typen dummyvariabler, er følgende:
(1) Hvordan genererer jeg en dummyvariabel for observasjon nr. 10, dvs. for år 1957 (verdi = 1 i 1957 og null ellers)?
data$factor_year_1 <- factor ( with ( data, ifelse ( ( year == 1957 ), 1 , 0 ) ) )
**(2) hvordan genererer jeg en dummy-variabel som er null før 1957 og tar verdien 1 fra 1957 og frem til 2009?
data$factor_year_2 <- factor ( with ( data, ifelse ( ( year < 1957 ), 0 , 1 ) ) )
Deretter kan jeg introdusere denne faktoren som en dummyvariabel i modellene mine. For eksempel for å se om det er en langsiktig trend i en variabel y
:
summary ( lm ( y ~ t, data = data ) )
Håper dette er til hjelp!