Mengapa kolom intersep dalam model.matrix menggantikan faktor pertama?

9

Saya mencoba mengonversi kolom faktor menjadi variabel dummy:

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

Tidak ada kolom untuk nilai pertama dari faktor saya ( ".lte100"), yang harus dikategorikan sebagai baris pertama. Bagaimana saya mendapatkan kembali data ini? Dan apa arti kolom Intercept yang tampaknya menjadi 1 semua?

digitgopher
sumber
3
Ketika Anda memiliki variabel dummy "K" maka model yang Anda hasilkan akan memiliki a.) Istilah intersep (yang merupakan kolom dari yang) dan b.) "K-1" kolom tambahan. Alasannya adalah karena jika tidak, kolom dari matriks yang dihasilkan tidak akan bebas linear (dan, sebagai hasilnya, Anda tidak akan dapat melakukan OLS ).
Steve S
2
Kenapa 'tidak berarti'? Ini model yang sama dengan goodness of fit yang sama, hanya parameter dengan cara yang berbeda.
Wolfgang
2
@digitgopher: Ketika Anda menjalankan regresi dan berakhir dengan model seperti ini: , Anda secara teknis berakhir dengan model seperti ini: , di mana istilah baru ini selalu sama dengan "1" (maka kolom dari yang). Jika Anda menghilangkan kolom yang ini ketika menjalankan regresi reguler, Anda akan berakhir dengan model yang bias karena Anda, pada dasarnya, akan memaksa setiap model tunggal melalui asal. y^=β0+β1x1y^=β0x0+β1x1x0
Steve S
2
@SteveS: Faktanya R sangat ramah sehingga jika Anda mencoba menghapus intersep - 1ketika Anda memiliki satu prediktor kategori yang direpresentasikan sebagai faktor (seperti dalam pertanyaan ini), ia akan menganggap Anda tidak benar-benar bermaksud itu & beralih untuk menggunakan jumlah- to-zero coding; yang tentu saja hanya parametrization yang berbeda. Terlalu ramah, jika Anda bertanya kepada saya.
Scortchi
2
@SteveS: Terima kasih. Saya harus memeriksa: itu beralih ke pengkodean sel-cara. Itu tidak melakukan apa yang Anda harapkan, yang sesuai dengan model paksa-melalui-asal Anda cukup tepat memperingatkan terhadap (itu akan melakukan itu, ketika kolom dari tipe numerik).
Scortchi

Jawaban:

10

Pertimbangkan yang berikut ini:

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)

Dua perintah pertama identik. Dua perintah terakhir menentukan untuk tidak menghasilkan intersepsi dan membuat dua variabel tiruan diproduksi.

RUser4512
sumber
1
Terima kasih - ini menjelaskan kode yang saya inginkan. Tetapi itu tidak menjelaskan mengapa atau membantu saya memahami.
digitgopher
2
@digitgopher: Lihat ats.ucla.edu/stat/r/library/contrast_coding.htm untuk penjelasan tentang pengkodean tingkat referensi & skema pengkodean lainnya.
Scortchi