R'de aşağıdaki kukla değişkenleri oluşturmakta sorun yaşıyorum:
Yıllık zaman serisi verilerini analiz ediyorum (1948-2009 dönemi). İki sorum var:
Gözlem #10 için, yani 1957 yılı için nasıl bir kukla değişken oluşturabilirim (değer = 1957'de 1 ve aksi takdirde sıfır)?
1957'den önce sıfır olan ve 1957'den itibaren 2009'a kadar 1 değerini alan bir kukla değişkeni nasıl oluşturabilirim?
Çok sayıda değişkeniniz varsa daha iyi çalışabilecek başka bir seçenek de factor
ve model.matrix
tir.
> year.f = factor(year)
> dummies = model.matrix(~year.f)
Bu, bir kesişim sütunu (hepsi bir) ve veri setinizdeki yılların her biri için bir sütun içerecektir; bu sütun "varsayılan" veya kesişim değeri olacaktır.
Model.matrixiçindeki
contrasts.arg` ile oynayarak "default"'un nasıl seçildiğini değiştirebilirsiniz.
Ayrıca, kesişme noktasını atlamak istiyorsanız, sadece ilk sütunu bırakabilir veya formülün sonuna +0
ekleyebilirsiniz.
Umarım bu faydalı olur.
Bu kukla değişkenleri üretmenin en basit yolu aşağıdaki gibi bir şeydir:
> 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
Daha genel olarak, bir koşula bağlı olarak iki değer arasında seçim yapmak için ifelse
kullanabilirsiniz. Yani 0-1 kukla değişken yerine, herhangi bir nedenle, örneğin 4 ve 7 değerlerini kullanmak isterseniz, ifelse(year == 1957, 4, 7)
kullanabilirsiniz.
Normalde bu tür kukla değişkenlerle çalışmak için yaptığım şey şudur:
(1) #10 numaralı gözlem için, yani 1957 yılı için nasıl bir kukla değişken oluşturabilirim (değer = 1957'de 1 ve aksi takdirde sıfır)
data$factor_year_1 <- factor ( with ( data, ifelse ( ( year == 1957 ), 1 , 0 ) ) )
**(2) 1957'den önce sıfır olan ve 1957'den 2009'a kadar 1 değerini alan bir kukla değişken nasıl oluşturabilirim?
data$factor_year_2 <- factor ( with ( data, ifelse ( ( year < 1957 ), 0 , 1 ) ) )
Daha sonra bu faktörü modellerime kukla değişken olarak ekleyebilirim. Örneğin, y
değişkeninde uzun vadeli bir eğilim olup olmadığını görmek için:
summary ( lm ( y ~ t, data = data ) )
Umarım bu yardımcı olur!