2012-07-04 22 views
6

Tôi đã cố gắng tìm ra cách đối số subset trong chức năng lm() của R hoạt động. Đặc biệt là các mã follwoing dường như mơ hồ đối với tôi:Đối số tập hợp con hoạt động như thế nào trong hàm lm()?

data(mtcars) 
summary(lm(mpg ~ wt, data=mtcars)) 
summary(lm(mpg ~ wt, cyl, data=mtcars)) 

Trong mọi trường hợp hồi quy có 32 quan sát

dim(lm(mpg ~ wt, cyl ,data=mtcars)$model) 
    [1] 32 2 
    dim(lm(mpg ~ wt ,data=mtcars)$model) 
    [1] 32 2 

nhưng các hệ số thay đổi (cùng với R²). Sự giúp đỡ không cung cấp quá nhiều thông tin về vấn đề này:

tập hợp con một vector tùy chọn chỉ định một tập hợp con của các quan sát sẽ được sử dụng trong quá trình phù hợp

+0

Nếu bạn đang làm việc với tập con không phải là số, đừng quên sử dụng dấu ngoặc kép. – user3598724

Trả lời

12

Như một nguyên tắc chung, vectơ sử dụng trong Subsetting có thể logic (ví dụ: TRUE hoặc FALSE cho mỗi phần tử) hoặc số (ví dụ: một số). Là một tính năng để giúp lấy mẫu, nếu nó là số R sẽ bao gồm cùng một phần tử nhiều lần nếu nó xuất hiện trong một vector số subsetting.

Chúng ta hãy nhìn vào cyl:

> mtcars$cyl 
[1] 6 6 4 6 8 6 8 4 4 6 6 8 8 8 8 8 8 4 4 4 4 8 8 8 8 4 4 4 8 6 8 4 

Vì vậy, bạn đang nhận được một data.frame chiều dài tương tự, nhưng nó bao gồm hàng 6, hàng 6, hàng 4, hàng 6, vv

bạn có thể thấy điều này nếu bạn làm như Subsetting mình:

> head(mtcars[mtcars$cyl,]) 
       mpg cyl disp hp drat wt qsec vs am gear carb 
Valiant  18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1 
Valiant.1  18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1 
Hornet 4 Drive 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1 
Valiant.2  18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1 
Merc 240D  24.4 4 146.7 62 3.69 3.190 20.00 1 0 4 2 
Valiant.3  18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1 

Ý của bạn là để làm điều gì đó như thế này?

summary(lm(mpg ~ wt, cyl==6, data=mtcars)) 
+0

cảm ơn bạn đã phản hồi nhanh chóng! Tôi đã đoán rằng nó hoạt động như thế nhưng trong mã thực tế của tôi, tập hợp con đã sử dụng các chỉ mục hàng không có trong dữ liệu (các hàm này bị hàm 'lm()' làm lẫn lộn tôi nhiều hơn;). Tôi thực sự vấp phải điều này bởi vì tôi vô tình thêm một dấu phẩy :) xe tăng một lần nữa! – Seb