Làm thế nào để thực hiện hồi quy trực giao (tổng bình phương nhỏ nhất) thông qua PCA?


29

Tôi luôn sử dụng lm()trong R để thực hiện hồi quy tuyến tính của trên . Hàm đó trả về một hệ số sao choyxβ

y=βx.

Hôm nay tôi đã học về tổng bình phương tối thiểuprincomp()chức năng đó (phân tích thành phần chính, PCA) có thể được sử dụng để thực hiện nó. Nó sẽ tốt cho tôi (chính xác hơn). Tôi đã thực hiện một số thử nghiệm bằng cách sử dụng princomp(), như:

r <- princomp( ~ x + y)

Vấn đề của tôi là: làm thế nào để giải thích kết quả của nó? Làm thế nào tôi có thể có được hệ số hồi quy? Theo "hệ số", ý tôi là số mà tôi phải sử dụng để nhân giá trị để đưa ra một số gần với .x yβxy


Một lúc nào đó, tôi hơi bối rối. nhìn vào: zoonek2.free.fr/UNIX/48_R/09.html Đây được gọi là PCA (Phân tích thành phần chính, còn gọi là "hồi quy trực giao" hoặc "tổng bình phương vuông góc" hoặc "tổng bình phương nhỏ nhất") vì vậy tôi nghĩ chúng ta đang nói chuyện về TLS với Princeomp () Không?
Tweets

Không; Đó là hai điều khác nhau, xem bài viết trên wikipedia về PCA. Thực tế nó được sử dụng ở đây là một hack (tôi không biết chính xác như thế nào, nhưng tôi sẽ kiểm tra nó); đó là lý do tại sao việc trích xuất các hệ số phức tạp.

1
Một câu hỏi liên quan: stats.stackexchange.com/questions/2691/ và một bài đăng trên blog được tham chiếu bởi một trong những câu trả lời: cerebralmastication.com/2010/09/ Thẻ
Jonathan

Câu trả lời:


48

Bình phương tối thiểu bình thường so với tổng bình phương tối thiểu

Trước tiên chúng ta hãy xem xét trường hợp đơn giản nhất chỉ có một biến dự đoán (độc lập) . Để đơn giản, hãy để cả xy làm trung tâm, tức là chặn luôn bằng không. Sự khác biệt giữa hồi quy OLS tiêu chuẩn và hồi quy TLS "trực giao" được thể hiện rõ ràng trên hình này (được điều chỉnh bởi tôi) từ câu trả lời phổ biến nhất trong luồng phổ biến nhất trên PCA:xxy

OLS vs TLS

OLS phù hợp phương trình bằng cách giảm thiểu khoảng cách bình phương giữa các giá trị quan sát y và các giá trị dự đoán y . TLS phù hợp với cùng một phương trình bằng cách giảm thiểu khoảng cách bình phương giữa các điểm ( x , y ) và hình chiếu của chúng trên đường thẳng. Trong trường hợp đơn giản nhất, dòng TLS chỉ đơn giản là thành phần chính đầu tiên của dữ liệu 2D. Để tìm β , đừng PCA trên ( x , y ) điểm, tức là xây dựng 2 × 2 hiệp phương sai ma trận Σ và tìm eigenvector đầu tiên v =y=βxyy^(x,y)β(x,y)2×2Σ ; sau đó β = v y / v x .v=(vx,vy)β=vy/vx

Trong Matlab:

 v = pca([x y]);    //# x and y are centered column vectors
 beta = v(2,1)/v(1,1);

Trong R:

 v <- prcomp(cbind(x,y))$rotation
 beta <- v[2,1]/v[1,1]

Nhân tiện, điều này sẽ mang lại độ dốc chính xác ngay cả khi y không được căn giữa (vì các chức năng PCA tích hợp sẽ tự động thực hiện định tâm). Để khôi phục lại đánh chặn, tính toán beta 0 = ˉ y - beta ˉ x .xyβ0=y¯βx¯

OLS so với TLS, hồi quy bội

Cho một biến phụ thuộc và nhiều biến độc lập x i (một lần nữa, tất cả các trung tâm vì đơn giản), hồi quy phù hợp với một phương trình y = β 1 x 1 + ... + β p x p . OLS không phù hợp bằng cách giảm thiểu các lỗi bình phương giữa các giá trị quan sát của y và các giá trị dự đoán y . TLS không phù hợp bằng cách giảm thiểu khoảng cách bình phương giữa quan sát ( x , y ) R p + 1yxi

y=β1x1++βpxp.
yy^(x,y)Rp+1 điểm và các điểm gần nhất trên mặt phẳng hồi quy / siêu phẳng.

Lưu ý rằng không còn "đường hồi quy" nữa! Phương trình trên chỉ định một siêu phẳng : đó là mặt phẳng 2D nếu có hai dự đoán, siêu phẳng 3D nếu có ba dự đoán, v.v ... Vì vậy, giải pháp trên không hoạt động: chúng ta không thể lấy giải pháp TLS bằng cách chỉ sử dụng PC đầu tiên (đó là một dòng). Tuy nhiên, giải pháp có thể dễ dàng thu được thông qua PCA.

Như trước, PCA được thực hiện trên điểm. Điều này mang lại p + 1 vector riêng trong các cột của V . Đầu tiên p vector riêng định nghĩa một p chiều siêu phẳng H mà chúng ta cần; eigenvector cuối cùng (số p + 1 ) v p + 1 là trực giao với nó. Câu hỏi đặt ra là làm thế nào để chuyển đổi cơ sở H được đưa ra bởi đầu tiên p vector riêng vào β hệ số.(x,y)p+1VppHp+1vp+1Hpβ

Quan sát rằng nếu chúng ta đặt cho tất cả i k và chỉ x k = 1 , sau đó y = β k , tức là vector ( 0 , ... , 1 , ... , β k ) H nằm trong các siêu phẳng H . Mặt khác, chúng ta biết rằng v p + 1 = ( v 1 , ... , v p + 1xi=0ikxk=1y^=βk

(0,,1,,βk)H
H là trực giao với nó. Tức là chấm sản phẩm của họ phải bằng không: v k + β k v p + 1 = 0 β k = - v k / v p + 1 .
vp+1=(v1,,vp+1)H
vk+βkvp+1=0βk=vk/vp+1.

Trong Matlab:

 v = pca([X y]);    //# X is a centered n-times-p matrix, y is n-times-1 column vector
 beta = -v(1:end-1,end)/v(end,end);

Trong R:

 v <- prcomp(cbind(X,y))$rotation
 beta <- -v[-ncol(v),ncol(v)] / v[ncol(v),ncol(v)]

Một lần nữa, điều này sẽ mang lại độ dốc chính xác ngay cả khi y không được căn giữa (vì các chức năng PCA tích hợp sẽ tự động thực hiện định tâm). Để khôi phục lại đánh chặn, tính toán beta 0 = ˉ y - ˉ x β .xyβ0=y¯x¯β

x(x,y)vy(1)/vx(1)=vx(2)/vy(2)

Giải pháp dạng đóng cho TLS

β

Xyvp+1[Xy]σp+12vp+1/vp+1=(β1)

(XXXyyXyy)(β1)=σp+12(β1),
βTLS=(XXσp+12I)1Xy,
βOLS=(XX)1Xy.

Hồi quy đa biến

Công thức tương tự có thể được khái quát cho trường hợp đa biến, nhưng ngay cả để xác định TLS đa biến làm gì, sẽ cần một số đại số. Xem Wikipedia trên TLS . Hồi quy OLS đa biến tương đương với một loạt các hồi quy OLS đơn biến cho mỗi biến phụ thuộc, nhưng trong trường hợp TLS thì không như vậy.


1
Tôi không biết R, nhưng vẫn muốn cung cấp đoạn trích R để tham khảo trong tương lai. Có nhiều người ở đây thành thạo R. Xin vui lòng chỉnh sửa đoạn trích của tôi nếu cần! Cảm ơn bạn.
amip nói rằng Phục hồi Monica

(0,,1,,βk)

xixk=1y=βjxjy=βk1=βk(0,,1,βk)y=βjxj
amip nói phục hồi Monica

Tôi dường như đã đọc sai phần đó nhưng bây giờ thì rõ ràng. Cảm ơn đã làm rõ quá.
JohnK

2
Trong R, bạn có thể thích "eigen (cov (cbind (x, y))) $ vectơ" hơn "prcomp (cbind (x, y)) $ rotation" vì trước đây nhanh hơn nhiều đối với các vectơ lớn hơn.
Thomas Browne

9

Dựa trên việc triển khai GNU Octave ngây thơ được tìm thấy ở đây , một cái gì đó như thế này có thể (hạt muối, đã muộn).

tls <- function(A, b){

  n <- ncol(A)
  C <- cbind(A, b)

  V <- svd(C)$v
  VAB <- V[1:n, (n+1):ncol(V)]
  VBB <- V[(n+1):nrow(V), (n+1):ncol(V)]
  return(-VAB/VBB)
}

4

princompđang chạy phân tích thành phần chính thay vì hồi quy tổng bình phương tối thiểu. Theo như tôi biết thì không có chức năng R cũng như gói nào không có TLS; nhiều nhất là hồi quy Deming trong MethComp .
Tuy nhiên, xin vui lòng coi điều này như một gợi ý rằng rất có thể nó không xứng đáng.


Tôi nghĩ rằng Deming trong gói MethComp là TLS - sự khác biệt là gì?
đánh dấu999

Bạn phải cho nó tỷ lệ lỗi trên x và y; TLS thuần túy tối ưu hóa điều này.
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.