Як виконати ортогональну регресію (всього найменших квадратів) за допомогою PCA?


29

Я завжди використовую lm()в R для виконання лінійної регресії на . Ця функція повертає коефіцієнт такий, щоyxβ

y=βx.

Сьогодні я дізнався про загальні найменші квадрати і цю princomp()функцію (аналіз основних компонентів, PCA) можна використовувати для її виконання. Це має бути добре для мене (точніше). Я зробив кілька тестів, використовуючи princomp(), наприклад:

r <- princomp( ~ x + y)

Моя проблема така: як інтерпретувати її результати? Як я можу отримати коефіцієнт регресії? Під "коефіцієнтом" я маю на увазі число яке мені потрібно використовувати для множення значення щоб дати число, близьке до .βxy


Хвилинку хлопці, я трохи розгублений. подивіться на: zoonek2.free.fr/UNIX/48_R/09.html Це називається PCA (аналіз основних компонентів, він же "ортогональна регресія" або "перпендикулярні суми квадратів" або "загальні найменші квадрати"), тому я думаю, що ми говоримо про TLS з princomp () Ні?
Dail

Ні; це дві різні речі, дивіться у статті wikipedia про PCA. Те, що він тут використовується, - це хак (я не знаю, наскільки точно, але я збираюся це перевірити); тому складне вилучення коефіцієнтів.

1
Питання, пов’язані з цим: stats.stackexchange.com/questions/2691/…, а в блозі посилається одна з відповідей: cerebralmastication.com/2010/09/…
Джонатан

Відповіді:


48

Звичайні найменші квадрати проти загальних найменших квадратів

Розглянемо спочатку найпростіший випадок лише однієї (незалежної) змінної . Для простоти нехай по центру і обидва і , тобто перехоплення завжди дорівнює нулю. Різниця між стандартною регресією OLS та "ортогональною" регресією TLS чітко показана на цій (адаптованій мною) фігурі з найпопулярнішої відповіді в найпопулярнішій темі PCA:х уxxy

OLS проти TLS

OLS підходить до рівняння , зводячи до мінімуму відстані у квадраті між спостережуваними значеннями та прогнозованими значеннями . TLS підходить до того ж рівняння, мінімізуючи відстані у квадраті між точками та їх проекцією на пряму. У цьому найпростішому випадку рядок TLS - це просто перший основний компонент 2D-даних. Для того, щоб знайти , зробіть PCA на точок, тобто побудувати ковариационной матриці і знайти свій перший власний вектор ; тоді .у у ( х , у ) β ( х , у ) 2 × 2 Σ v = ( v х , v у ) β = v у / v хy=βxyy^(x,y)β(x,y)2×2Σv=(vx,vy)β=vу/vх

У Матлабі:

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

В R:

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

До речі, це дасть правильний нахил, навіть якщо і не були в центрі (адже вбудовані функції PCA автоматично виконують центрування). Щоб відновити перехоплення, обчисліть .y β 0 = ˉ y - β ˉ xхуβ0=у¯-βх¯

OLS проти TLS, множинна регресія

З огляду на залежну змінну та безліч незалежних змінних (знову ж таки, все зосереджено для простоти), регресія відповідає рівняннюOLS підходить, мінімізуючи помилки в квадраті між спостережуваними значеннями та прогнозованими значеннями . TLS підходить, мінімізуючи відстані у квадраті між спостережуваними пунктами та найближчими точками на площині регресії / гіперплані.x i y = β 1 x 1 + + β p x p . у у ( х , у ) R р + 1ухi

у=β1х1++βpхp.
уу^(х,у)Rp+1

Зауважте, що вже немає "лінії регресії"! Вище наведене рівняння вказує на гіперплан : це 2D площина, якщо є два предиктори, 3D гіперплан, якщо є три предиктори тощо. Отже, рішення вище не працює: ми не можемо отримати рішення TLS, взявши лише перший ПК (який є рядок). Проте рішення можна легко отримати за допомогою PCA.

Як і раніше, PCA виконується в точках. Це дає власні вектори в колонках . Перші власні вектори визначають -вимірну гіперплощину яка нам потрібна; останній (число ) власного вектора є ортогональним для нього. Питання полягає в тому, як перетворити основу задану першими власними векторами, у коефіцієнти .p + 1 V p p H H p + 1 v p + 1 H p β(х,у)p+1VppНp+1vp+1Нpβ

Зауважте, що якщо ми встановимо для всіх і тільки , то , тобто вектор лежить в гиперплоскости . З іншого боку, ми знаємо, що є ортогональним для нього. Тобто їх крапковий добуток повинен дорівнювати нулю:я до х до = 1 у = β до ( 0 , ... , 1 , ... , β до ) H H v р + 1 = ( v 1 , ... , v р + 1 )хi=0iкхк=1у^=βк

(0,,1,,βк)Н
Нv k + β k v p + 1 = 0 β k = - v k / v p + 1 .
vp+1=(v1,,vp+1)Н
vк+βкvp+1=0βк=-vк/vp+1.

У Матлабі:

 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);

В R:

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

Знову ж таки, це призведе до правильних нахилів, навіть якщо і не були в центрі (оскільки вбудовані функції PCA автоматично виконують центрування). Щоб відновити перехоплення, обчисліть .y β 0 = ˉ y - ˉ x βхуβ0=у¯-х¯β

В якості перевірки обгрунтованості зауважте, що це рішення збігається з попереднім у випадку лише одного предиктора . Дійсно, тоді простір дорівнює 2D, і так, враховуючи, що перший власний вектор PCA ортогональний другому (останньому), .( x , y ) v ( 1 ) y / v ( 1 ) x = - v ( 2 ) x / v ( 2 ) yх(х,у)vу(1)/vх(1)=-vх(2)/vу(2)

Розчин закритої форми для TLS

Дивно, але виявляється, що для існує рівняння закритої форми . Аргумент, наведений нижче, взято з книги Сабін ван Хаффеля "Загальні найменші квадрати" (розділ 2.3.2).β

Нехай і - централізовані матриці даних. Останній власний вектор PCA є власним вектором коваріаційної матриці з власним значенням . Якщо це власний вектор, то так . Запис рівняння власного вектора: Хуvp+1[Ху]σp+12( XX Xy yX-vp+1/vp+1=(β-1)

(ХХХууХуу)(β-1)=σp+12(β-1),
і добуток зліва, ми одразу отримуємо, що що сильно нагадує знайомий вираз OLS
βТLS=(ХХ-σp+12Я)-1Ху,
βОLS=(ХХ)-1Ху.

Багатоваріантна множинна регресія

Ця ж формула може бути узагальнена до мультиваріантного випадку, але навіть для визначення того, що робить багатоваріантний TLS, потрібна була б алгебра. Дивіться Вікіпедію на TLS . Багатоваріантна регресія OLS еквівалентна купі одновимірних регресій OLS для кожної залежної змінної, але у випадку TLS це не так.


1
Я не знаю R, але все ж хотів надати R фрагменти для подальшого використання. Тут багато людей, які знають Р. Будь ласка, не соромтесь редагувати мої фрагменти, якщо потрібно! Дякую.
амеба каже: Відновити Моніку

Приємний пост, але якщо я можу запитати, що гарантує той факт, що вектор лежить у гіперплані? (0,,1,,βк)
ДжонК

@JohnK, я не впевнений, що саме незрозуміло. Як я писав, нехай усі дорівнюють нулю, крім . Тоді якщо ви підключите це до , ви отримаєте . Отже точка лежить на гіперплані, визначеній рівнянням . x k = 1 y = β j x j y = β k1 = β k ( 0 , , 1 , β k ) y = β j x jхiхк=1у=βjхjу=βк1=βк(0,,1,βк)у=βjхj
амеба каже: Відновити Моніку

Я, здається, неправильно прочитав цю частину, але зараз це зрозуміло. Дякуємо також за роз’яснення.
JohnK

2
У R ви можете віддати перевагу "eigen (cov (cbind (x, y)))" $ $ vectors "over" prcomp (cbind (x, y)) $ rotatation ", тому що колишній набагато швидший для більших векторів.
Томас Браун

9

На основі наївної реалізації GNU Octave, знайденої тут , щось подібне може (зерно солі, пізно) працювати.

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проводиться аналіз основних компонентів замість загальної регресії найменших квадратів. Наскільки я знаю, немає функції R, ні пакета, який виконує TLS; у MethComp - максимум, є регресія Демінга .
Але, будь ласка, трактуйте це як припущення, що це, швидше за все, не варто.


Я думав, що Демінг у пакеті MethComp був TLS - у чому різниця?
mark999

Ви повинні дати йому співвідношення помилок на x і y; чистий TLS оптимізує це.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.