Model.matrix'deki kesişme sütunu neden ilk faktörün yerini alıyor?


9

Faktör sütunumu kukla değişkenlere dönüştürmeye çalışıyorum:

str(cards$pointsBin)
# Factor w/ 5 levels ".lte100",".lte150",..: 3 2 3 1 4 4 2 2 4 4 ...

labels <- model.matrix(~ pointsBin, data=cards)

head(labels)

#     (Intercept) pointsBin.lte150 pointsBin.lte200 pointsBin.lte250 pointsBin.lte300
# 741           1                0                0                0                0
# 407           1                1                0                0                0
# 676           1                0                0                1                0
# 697           1                1                0                0                0
# 422           1                0                1                0                0
# 300           1                0                1                0                0

Faktörümün ( ".lte100") ilk değeri için sütun yok , bu da ilk satırın kategorize edilmesi gereken şey. Bu verileri nasıl geri alabilirim? Peki 1'in tümü gibi görünen Kesişim sütunu ne anlama geliyor?


3
"K" kukla değişkenleriniz olduğunda, sonuçta ortaya çıkan modelinizde a.) Kesişme terimi (bunların sütunlarıdır) ve b.) "K-1" ek sütunları bulunur. Bunun nedeni, sonuçta ortaya çıkan matrisin sütunlarının doğrusal olarak bağımsız olmamasıdır (ve sonuç olarak OLS yapamazsınız ).
Steve S

2
Neden 'anlamlı değil'? Aynı uyum iyiliği ile aynı model, sadece farklı bir şekilde parametrelendirildi.
Wolfgang

2
@digitgopher: Bir regresyon çalıştırdığınızda ve bunun gibi bir modelle sonlandırdığınızda: , teknik olarak şöyle bir modelle sonuçlanırsınız this: ; burada bu yeni terimi her zaman "1" e eşittir (bu nedenle olanlar). Düzenli bir regresyon yürütürken bu sütunları ortadan kaldıracak olsaydınız, aslında her bir modeli başlangıç ​​noktasına doğru zorlayacağınız için taraflı bir model elde edersiniz. y^=β0+β1x1y^=β0x0+β1x1x0
Steve S

2
@SteveS: Aslında R o kadar kolay ki - 1, bir faktör olarak temsil edilen tek bir kategorik öngörücünüz olduğunda kesmeyi kaldırmaya çalışırsanız (gerçekten bu soruda olduğu gibi), sıfıra kodlama; tabii ki sadece farklı bir parametrelendirmedir. Bana sorarsan çok arkadaş canlısı.
Scortchi - Monica'yı eski durumuna döndürün

2
@SteveS: Teşekkürler. Kontrol etmeliydim: hücre aracı kodlamaya geçer. Beklediğiniz şeyi yapmaz, bu da oldukça haklı olarak uyardığınız köken üzerinden zorlanan modele uygundur (ancak, sütun sayısal türde olduğunda bunu yapacaktır).
Scortchi - Monica'yı eski durumuna döndürün

Yanıtlar:


10

Aşağıdakileri göz önünde bulundur:

require(mlbench)

data(HouseVotes84, package = "mlbench")
head(HouseVotes84)

labels <- model.matrix(~ V1, data=HouseVotes84)
head(labels)

labels1 <- model.matrix(~ V1+1, data=HouseVotes84)
head(labels1)

labels0 <- model.matrix(~ V1+0, data=HouseVotes84)
head(labels0)

labels_1 <- model.matrix(~ V1-1, data=HouseVotes84)
head(labels_1)

İlk iki komut aynıdır. Son iki komut, kesmenin üretilmemesini belirtir ve üretilen iki yapay değişkeni tutar.


1
Teşekkür ederim - bu istediğim kodu açıklıyor. Ama neden açıklamam ya da anlamama yardımcı olmuyor.
digitgopher

2
@digitgopher: bakınız ats.ucla.edu/stat/r/library/contrast_coding.htm referans seviye Kodlama ve diğer kodlama şemaları ile ilgili açıklama için.
Scortchi - Monica'yı eski durumuna döndürün
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.