Tenho dificuldade em gerar as seguintes variáveis fictícias em R:
I'm analisando dados de séries temporais anuais (período de tempo 1948-2009). Eu tenho duas perguntas:
Como gerar uma variável dummy para a observação #10, ou seja, para o ano 1957 (valor = 1 em 1957 e zero no caso contrário)?
Como posso gerar uma variável dummy que é zero antes de 1957 e leva o valor 1 de 1957 em diante até 2009?
Outra opção que pode funcionar melhor se você tiver muitas variáveis é factor' e
model.matrix'.
> year.f = factor(year)
> dummies = model.matrix(~year.f)
Isto incluirá uma coluna de intercepção (todas) e uma coluna para cada um dos anos do seu conjunto de dados excepto uma, que será a "default" ou valor de intercepção.
Você pode mudar como o "default" é escolhido mexendo com contrasts.arg
em model.matrix
.
Além disso, se você quiser omitir a interceptação, você pode simplesmente soltar a primeira coluna ou adicionar +0
ao final da fórmula.
Espero que isto seja útil.
A maneira mais simples de produzir estas variáveis fictícias é algo como o seguinte:
> 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
De modo mais geral, você pode utilizar o ifelse
para escolher entre dois valores, dependendo de uma condição. Assim, se em vez de uma variável dummy 0-1, por alguma razão você quisesse utilizar, digamos, 4 e 7, você poderia utilizar ifelse(ano == 1957, 4, 7)
.
O que eu normalmente faço para trabalhar com este tipo de variáveis fictícias é:
(1) como gerar uma variável dummy para observação #10, ou seja, para o ano 1957 (valor = 1 em 1957 e zero no caso contrário)
data$factor_year_1 <- factor ( with ( data, ifelse ( ( year == 1957 ), 1 , 0 ) ) )
(2) como gerar uma dummy-variável que é zero antes de 1957 e leva o valor 1 de 1957 em diante até 2009?
data$factor_year_2 <- factor ( with ( data, ifelse ( ( year < 1957 ), 0 , 1 ) ) )
Então, posso introduzir este factor como uma variável fictícia nos meus modelos. Por exemplo, para ver se existe uma tendência de longo prazo em uma variável y
:
summary ( lm ( y ~ t, data = data ) )
Espero que isto ajude!