Giảm số lượng biến trong hồi quy bội


9

Tôi có một bộ dữ liệu lớn bao gồm các giá trị của hàng trăm biến tài chính có thể được sử dụng trong hồi quy bội để dự đoán hành vi của một quỹ chỉ số theo thời gian. Tôi muốn giảm số lượng biến xuống còn mười hoặc hơn trong khi vẫn giữ được sức mạnh dự đoán càng nhiều càng tốt. Đã thêm: Tập hợp các biến giảm cần phải là tập hợp con của bộ biến ban đầu để duy trì ý nghĩa kinh tế của các biến ban đầu. Vì vậy, ví dụ, tôi không nên kết thúc với các kết hợp tuyến tính hoặc tổng hợp của các biến ban đầu.

Một số suy nghĩ (có thể ngây thơ) về cách làm điều này:

  1. Thực hiện hồi quy tuyến tính đơn giản với mỗi biến và chọn mười với giá trị lớn nhất . Tất nhiên, không có gì đảm bảo rằng mười biến cá nhân tốt nhất được kết hợp sẽ là nhóm mười biến tốt nhất.R2
  2. Thực hiện phân tích thành phần chính và cố gắng tìm mười biến ban đầu với các liên kết lớn nhất với một vài trục chính đầu tiên.

Tôi không nghĩ rằng tôi có thể thực hiện hồi quy phân cấp vì các biến không thực sự được lồng vào nhau. Thử tất cả các kết hợp có thể có của mười biến là không thể tính toán được vì có quá nhiều kết hợp.

Có một cách tiếp cận tiêu chuẩn để giải quyết vấn đề này về việc giảm số lượng biến trong hồi quy bội?

Có vẻ như đây sẽ là một vấn đề đủ phổ biến rằng sẽ có một cách tiếp cận tiêu chuẩn.

Một câu trả lời rất hữu ích sẽ là một câu hỏi không chỉ đề cập đến một phương pháp tiêu chuẩn mà còn đưa ra một cái nhìn tổng quan về cách thức và lý do tại sao nó hoạt động. Ngoài ra, nếu không có một cách tiếp cận tiêu chuẩn nào mà thay vào đó là nhiều cách tiếp cận với các điểm mạnh và điểm yếu khác nhau, một câu trả lời rất hữu ích sẽ là một câu hỏi thảo luận về ưu và nhược điểm của chúng.

bình luận của người dưới đây cho thấy rằng yêu cầu trong đoạn cuối quá rộng. Thay vào đó, tôi sẽ chấp nhận như một câu trả lời tốt một danh sách các cách tiếp cận chính, có lẽ với một mô tả rất ngắn gọn về mỗi phương pháp. Khi tôi có các điều khoản, tôi có thể tự tìm hiểu chi tiết về từng chi tiết.


1
Mike, bạn có thể duyệt qua Chương 3 của ESL , nếu bạn không quen với nó. Trang tại liên kết đã cung cấp các điểm văn bản PDF hợp pháp miễn phí.
Đức hồng y

Bạn có thể làm rõ nếu bạn đang tìm cách chỉ giữ, giả sử, mười trong số các biến ban đầu hoặc cũng sẽ quan tâm đến các phương thức sử dụng một tập hợp nhỏ kết hợp tuyến tính của các biến ban đầu (sau này là một biến giống như hồi quy thành phần chính truyền thống sẽ cung cấp cho bạn).
Đức hồng y

3
Câu trả lời này đưa ra một ví dụ cụ thể về một trong (nhiều) vấn đề với phương pháp 1. Nhận xét của @cardinal cho câu trả lời của Frank Harrell có vấn đề mấu chốt với phương pháp 2: bất cứ điều gì bạn làm với các biến độc lập, mà không xem xét chúng mối quan hệ với biến phụ thuộc, rủi ro không liên quan hoặc tồi tệ hơn. Theo như câu trả lời tiêu chuẩn hoặc "chính tắc", yêu cầu một câu hỏi ở đây cũng giống như yêu cầu thảo luận về tất cả các phương pháp để tìm điểm hợp lý trên các đường cong elliptic, với ưu và nhược điểm của chúng :-).
whuber

2
Theo ghi nhận của những người khác ở đây, phương pháp 1 sẽ dẫn đến các vấn đề. Để biết cách xử lý trực quan về lý do tại sao điều đó đúng / mô tả về một trong những vấn đề khác với cách tiếp cận này, bạn có thể muốn đọc điều này: stats.stackexchange.com/questions/20836/iêu
gung - Tái lập Monica

1
Cảm ơn whuber và gung cho những lời giải thích về các vấn đề với ý tưởng đầu tiên.
Mike Spivey

Câu trả lời:



6

Phương pháp 1 không hoạt động. Phương pháp 2 có hy vọng tùy thuộc vào cách bạn làm điều đó. Tốt hơn là nhập các thành phần chính theo thứ tự phương sai giảm dần được giải thích. Một cách tiếp cận dễ hiểu hơn là thực hiện phân cụm biến, sau đó giảm từng cụm xuống một điểm duy nhất (không sử dụng Y), sau đó khớp một mô hình với điểm số của cụm.


+1. Theo "phân cụm biến", bạn có nghĩa là phân tích nhân tố - đó là một chiến lược tôi có thể sử dụng (cũng trước khi nhìn vào y). Tôi nghĩ về phân tích cụm là quan sát nhóm chứ không phải là biến, nhưng tôi chỉ có kiến ​​thức hời hợt về phân tích cụm.
gung - Phục hồi Monica

1
Dường như không có bất kỳ lý do tiên nghiệm nào để tin rằng các hướng của phương sai tối đa của các yếu tố dự đoán nhất thiết phải tương quan cao với phản ứng . Có lẽ tôi đã nhầm hoặc đã hiểu nhầm ý kiến ​​của bạn. Bạn có thể làm rõ?
Đức hồng y

1
Ngoài ra, có vẻ như OP không (hoàn toàn) mô tả hồi quy thành phần chính trong Phương pháp 2.
hồng y

Tôi đã không hoàn toàn rõ ràng trong bài viết gốc của mình, nhưng tôi cần một tập hợp con của các biến ban đầu. Vì vậy, một phân tích thành phần chính thẳng hoặc phân cụm không thực sự là những gì tôi sau.
Mike Spivey

1
Phân cụm biến có liên quan đến phân tích nhân tố nhưng đơn giản hơn. Các biến được nhóm lại theo cách chúng tương quan với nhau. Xem varcluschức năng trong Hmiscgói R hoặc PROC VARCLUS trong SAS. Giảm dữ liệu có thể giúp với các biến phụ nếu bạn thực hiện một chút thận trọng; bạn có thể xóa toàn bộ cụm nếu giá trị của nó là 0,3. Với các thành phần chính, có các kỹ thuật như giảm pin trong đó về cơ bản bạn xấp xỉ các PC với một tập hợp các biến cấu thành của chúng. P
Frank Harrell

3

Trong chương 5 của Khai thác dữ liệu với R, tác giả chỉ ra một số cách để chọn các dự đoán hữu ích nhất. (Trong bối cảnh tin sinh học, trong đó mỗi hàng mẫu có hơn 12.000 cột!)

Đầu tiên anh ta sử dụng một số bộ lọc dựa trên phân phối thống kê. Chẳng hạn, nếu bạn có nửa tá dự đoán với một giá trị trung bình và sd tương tự thì bạn có thể thoát khỏi việc chỉ giữ một trong số chúng.

Sau đó, ông chỉ ra cách sử dụng một khu rừng ngẫu nhiên để tìm ra khu rừng nào là dự đoán hữu ích nhất. Dưới đây là một ví dụ trừu tượng khép kín. Bạn có thể thấy tôi đã có 5 dự đoán tốt, 5 dự đoán xấu. Mã này cho thấy làm thế nào để giữ 3 tốt nhất.

set.seed(99)

d=data.frame(
  y=c(1:20),
  x1=log(c(1:20)),
  x2=sample(1:100,20),
  x3=c(1:20)*c(11:30),
  x4=runif(20),
  x5=-c(1:20),
  x6=rnorm(20),
  x7=c(1:20),
  x8=rnorm(20,mean=100,sd=20),
  x9=jitter(c(1:20)),
  x10=jitter(rep(3.14,20))
  )

library(randomForest)
rf=randomForest(y~.,d,importance=T)
print(importance(rf))
#         %IncMSE IncNodePurity
# x1  12.19922383    130.094641
# x2  -1.90923082      6.455262
# ...

i=importance(rf)
best3=rownames(i)[order(i[,"%IncMSE"],decreasing=T)[1:3]]
print(best3)
#[1] "x1" "x5" "x9"

reduced_dataset=d[,c(best3,'y')]

Cách tiếp cận cuối cùng của tác giả là sử dụng thuật toán phân cụm theo cấp bậc để phân cụm các dự đoán tương tự thành 30 nhóm. Nếu bạn muốn 30 dự đoán đa dạng, sau đó chọn một trong số 30 nhóm đó.

Đây là một số mã, sử dụng cùng một dữ liệu mẫu như trên, để chọn 3 trong số 10 cột:

library(Hmisc)
d_without_answer=d[,names(d)!='y']
vc=varclus(as.matrix(d_without_answer))
print(cutree(vc$hclust,3))
# x1  x2  x3  x4  x5  x6  x7  x8  x9 x10 
#  1   2   1   3   1   1   1   2   1   3 

Dữ liệu mẫu của tôi hoàn toàn không phù hợp với phương pháp này, bởi vì tôi có 5 dự đoán tốt và 5 chỉ là nhiễu. Nếu tất cả 10 dự đoán được một chút tương quan với y, đã có một cơ hội tốt để được thậm chí tốt hơn khi sử dụng cùng nhau (đó là khá tốt trong lĩnh vực tài chính), thì đây có thể là một cách tiếp cận tốt.


2

Bạn có thể cân nhắc sử dụng một phương pháp như LASSO để thường xuyên bình phương tối thiểu bằng cách chọn một giải pháp tối thiểu hóa một chỉ tiêu của vectơ tham số. Nó chỉ ra rằng điều này có tác dụng trong thực tế để giảm thiểu số lượng các mục khác không trong vectơ tham số. Mặc dù LASSO phổ biến trong một số giới thống kê, nhiều phương pháp liên quan khác đã được xem xét trong thế giới của cảm biến nén.


Cảm ơn. Tôi sẽ tra cứu LASSO. (Có vẻ như nó cũng được đề cập trong bản hồng y tham chiếu.)
Mike Spivey
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.