2014-04-07 13 views
11

Trong hồi quy về phía trước R từng bước, tôi chỉ định một mô hình tối thiểu và một tập hợp các biến thêm (hoặc không thêm):mong hồi quy từng bước

min.model = lm(y ~ 1) 
fwd.model = step(min.model, direction='forward', scope=(~ x1 + x2 + x3 + ...)) 

Có cách nào để xác định sử dụng tất cả các biến trong một ma trận /data.frame, vì vậy tôi không phải liệt kê chúng?

Ví dụ để minh họa cho những gì tôi muốn làm, nhưng họ không làm việc:

# 1 
fwd.model = step(min.model, direction='forward', scope=(~ ., data=my.data.frame)) 

# 2 
min.model = lm(y ~ 1, data=my.data.frame) 
fwd.model = step(min.model, direction='forward', scope=(~ .)) 

Trả lời

16

scope hy vọng (trích dẫn các trang trợ giúp ?step)

hoặc là một công thức duy nhất, hoặc một danh sách có chứa các thành phần là 'trên' và 'thấp hơn', cả hai công thức. Xem chi tiết để biết cách chỉ định công thức và cách chúng được sử dụng .

Bạn có thể trích xuất và sử dụng công thức tương ứng với "~". như thế này:

> my.data.frame=data.frame(y=rnorm(20),foo=rnorm(20),bar=rnorm(20),baz=rnorm(20)) 
> min.model = lm(y ~ 1, data=my.data.frame) 
> biggest <- formula(lm(y~.,my.data.frame)) 
> biggest 
y ~ foo + bar + baz 
> fwd.model = step(min.model, direction='forward', scope=biggest) 
Start: AIC=0.48 
y ~ 1 

     Df Sum of Sq RSS  AIC 
+ baz 1 2.5178 16.015 -0.44421 
<none>    18.533 0.47614 
+ foo 1 1.3187 17.214 0.99993 
+ bar 1 0.4573 18.075 1.97644 

Step: AIC=-0.44 
y ~ baz 

     Df Sum of Sq RSS  AIC 
<none>    16.015 -0.44421 
+ foo 1 0.41200 15.603 1.03454 
+ bar 1 0.20599 15.809 1.29688 
> 
+0

Cảm ơn, mà giải quyết là hoàn hảo. –

+9

Bạn đã đọc về số lượng lớn bằng chứng cho thấy sự lựa chọn biến có gây ra các vấn đề nghiêm trọng về ước lượng và suy luận không? Ít nhất, phương pháp tiếp cận từng bước nên được bootstrapped để hiển thị arbitrariness của nó. –

+0

@FrankHarrell - Tôi có thể tìm hiểu thêm về việc khởi động lại từng bước ở đâu? – EngrStudent

0

Bạn có thể làm điều đó chỉ trong một bước như thế này

fwd.model = step(lm(y ~ 1, data=my.data.frame), direction='forward', scope=~ x1 + x2 + x3 + ...)

Các vấn đề liên quan