Tại sao cột chặn trong model.matrix thay thế yếu tố đầu tiên?


9

Tôi đang cố gắng chuyển đổi cột yếu tố của mình thành các biến giả:

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

Không có cột cho giá trị đầu tiên của yếu tố của tôi ( ".lte100"), đó là giá trị của hàng đầu tiên được phân loại là. Làm thế nào để tôi lấy lại dữ liệu này? Và cột Chặn dường như là tất cả của 1 nghĩa là gì?


3
Khi bạn có các biến giả "K" thì mô hình kết quả của bạn sẽ có a.) Thuật ngữ chặn (là một cột của các biến) và b.) "Các cột bổ sung" K-1 ". Lý do là vì nếu không các cột của ma trận kết quả sẽ không độc lập tuyến tính (và kết quả là, bạn sẽ không thể thực hiện OLS ).
Steve S

2
Tại sao "không có ý nghĩa"? Đó là cùng một mô hình với cùng độ tốt của sự phù hợp, chỉ được tham số hóa theo một cách khác.
Wolfgang

2
@digitgopher: Khi bạn chạy hồi quy và kết thúc với một mô hình như thế này: , về mặt kỹ thuật bạn sẽ kết thúc bằng một mô hình như this: , trong đó thuật ngữ mới này luôn bằng "1" (do đó cột của những cái). Nếu bạn đã loại bỏ cột này khi chạy hồi quy thông thường, bạn sẽ kết thúc với một mô hình thiên vị vì thực tế, bạn sẽ buộc mọi mô hình đơn lẻ thông qua gốc. y =β0*x0+β1*x1x0y^=β0+β1x1y^=β0x0+β1x1x0
Steve S

2
@SteveS: Trên thực tế R thân thiện đến mức nếu bạn cố gắng loại bỏ chặn - 1khi bạn có một công cụ dự đoán phân loại duy nhất được biểu thị như một yếu tố (như trong câu hỏi này), nó sẽ cho rằng bạn không thực sự có ý đó & chuyển sang sử dụng tổng mã hóa bằng không; tất nhiên đó chỉ là một tham số khác nhau. Quá thân thiện, nếu bạn hỏi tôi.
Scortchi - Tái lập Monica

2
@SteveS: Cảm ơn. Tôi nên kiểm tra: nó chuyển sang mã hóa tế bào. Nó không làm những gì bạn có thể mong đợi, phù hợp với mô hình bắt buộc thông qua nguồn gốc mà bạn hoàn toàn cảnh báo chống lại (mặc dù vậy, nó sẽ làm điều đó khi cột có kiểu số).
Scortchi - Tái lập Monica

Câu trả lời:


10

Hãy xem xét những điều sau đây:

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)

Hai lệnh đầu tiên giống hệt nhau. Hai lệnh cuối chỉ định không tạo ra phần chặn và giữ hai biến giả được tạo.


1
Cảm ơn bạn - điều này giải thích mã tôi muốn. Nhưng nó không giải thích tại sao hoặc giúp tôi hiểu.
chữ số

2
@digitgopher: Xem ats.ucla.edu/stat/r/l Library / contrast_coding.htmlm để được giải thích về mã hóa mức tham chiếu và các sơ đồ mã hóa khác.
Scortchi - Tái lập Monica
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.