Tôi đang cố chạy lm () chỉ trên một tập hợp con dữ liệu của mình và gặp sự cố.
dt = data.table(y = rnorm(100), x1 = rnorm(100), x2 = rnorm(100), x3 = as.factor(c(rep('men',50), rep('women',50)))) # sample data
lm( y ~ ., dt) # Use all x: Works
lm( y ~ ., dt[x3 == 'men']) # Use all x, limit to men: doesn't work (as expected)
Ở trên không hoạt động vì bộ dữ liệu hiện chỉ có nam giới và do đó chúng tôi không thể đưa x3, biến giới tính vào mô hình. NHƯNG...
lm( y ~ . -x3, dt[x3 == 'men']) # Exclude x3, limit to men: STILL doesn't work
lm( y ~ x1 + x2, dt[x3 == 'men']) # Exclude x3, with different notation: works great
Đây là một vấn đề với ký hiệu "dấu trừ" trong công thức? Làm ơn cho lời khuyên. Lưu ý: Tất nhiên tôi có thể làm theo cách khác; ví dụ, tôi có thể loại trừ các biến trước khi đưa chúng vào lm (). Nhưng tôi đang dạy một lớp về những thứ này và tôi không muốn gây nhầm lẫn cho các sinh viên, vì đã nói với họ rằng họ có thể loại trừ biến bằng cách sử dụng một dấu trừ trong công thức.
.
để có được một công thức đơn giản hóa terms(y ~ . -x3, data=dt, simplify=TRUE)
nhưng kỳ lạ là nó vẫn giữ nguyên x3
thuộc tính biến đi lênlm
neg.out=
tùy chọn chưa thực hiện trong R có thể liên quan. Từ các tệp trợ giúp S cho terms
, nơi neg.out=
được triển khai: cờ kiểm soát việc xử lý các thuật ngữ nhập bằng dấu "-". Nếu TRUE, các điều khoản sẽ được kiểm tra để hủy bỏ và nếu không thì bỏ qua. Nếu SAI, các thuật ngữ phủ định sẽ được giữ lại (với thứ tự âm).
lm
gọi model.matrix
một phiên bản sửa đổi của dữ liệu. Ngay từ đầu, hãy lm
soạn thảo và đánh giá biểu thức sau : mf <- stats::model.frame( y ~ . -x3, dt[x3=="men"], drop.unused.levels=TRUE )
. Điều này gây ra x3
để trở thành một yếu tố cấp độ duy nhất. model.matrix()
sau đó được gọi mf
, không phải dữ liệu gốc, dẫn đến lỗi chúng tôi quan sát thấy.
model.matrix(y ~ . - x3, data = dt[x3 == "men"])
vàmodel.matrix(y ~ x1 + x2, data = dt[x3 == "men"])
công việc (lm
gọimodel.matrix
nội bộ). Sự khác biệt duy nhất giữa cả hai ma trận mô hình là một"contrasts"
thuộc tính (vẫn chứax3
) và được chọn sau này tronglm
thói quen, có khả năng gây ra lỗi mà bạn nhìn thấy. Vì vậy, cảm giác của tôi là vấn đề liên quan đến cáchmodel.matrix
tạo và lưu trữ ma trận thiết kế khi loại bỏ các điều khoản.