Как выполнить ортогональную регрессию (наименьших квадратов) с помощью PCA?


29

Я всегда использую lm()в R для выполнения линейной регрессии y на x . Эта функция возвращает коэффициент β такой, что

y=βx.

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

r <- princomp( ~ x + y)

Моя проблема: как интерпретировать ее результаты? Как я могу получить коэффициент регрессии? Под «коэффициентом» я подразумеваю число β которое я должен использовать для умножения значения x чтобы получить число, близкое к y .


Один момент, ребята, я немного запутался. посмотрите на: zoonek2.free.fr/UNIX/48_R/09.html Это называется PCA (анализ основных компонентов, или «ортогональная регрессия», или «перпендикулярные суммы квадратов», или «общее количество наименьших квадратов»), так что я думаю, что мы говорим о TLS с princomp () Нет?
— Dail

Нет; это две разные вещи, смотрите статью в Википедии о PCA. Факт, что это используется здесь, является взломом (я не знаю, насколько точно, но я собираюсь проверить это); Вот почему комплексное извлечение коэффициентов.

1
Смежный вопрос: stats.stackexchange.com/questions/2691/… и на сообщение в блоге ссылается один из ответов: cerebralmastication.com/2010/09/…
— Джонатан

Ответы:


48

Обычные наименьшие квадраты против общих наименьших квадратов

Давайте сначала рассмотрим простейший случай только одной предикторной (независимой) переменной . Для простоты, пусть и x, и y центрированы, т. Е. Точка пересечения всегда равна нулю. Различие между стандартной регрессией OLS и «ортогональной» регрессией TLS ясно показано на этом (адаптированном мной) рисунке из самого популярного ответа в самой популярной теме на PCA:ИксИксY

OLS против TLS

МНК припадки уравнение путем минимизации квадратов расстояний между наблюдаемыми значениями Y и прогнозируемых значений у . TLS соответствует тому же уравнению, минимизируя квадратные расстояния между точками ( x , y ) и их проекцией на линию. В этом простейшем случае линия TLS является просто первым основным компонентом двумерных данных. Чтобы найти β , проведите PCA по ( x , y ) точкам, т.е. построитеYзнак равноβИксYY^(Икс,Y)β(Икс,Y)ковариационную матрицу 2 × 2 Σ и найдите ее первый собственный вектор v =2×2Σ. ; тогда β = v y / v xv=(vx,vy)β=vy/vx

В Matlab:

 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]

Кстати, это даст правильный наклон, даже если и y не были отцентрированы (потому что встроенные функции PCA автоматически выполняют центрирование). Чтобы восстановить перехват, вычислите β 0 = ˉ y - βxyβ0=y¯−βx¯ .

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

Для заданной зависимой переменной и множества независимых переменных x i (опять же, все по центру для простоты) регрессия соответствует уравнению y = β 1 x 1 + … + β p x p . МНК делает подгонку путем минимизации квадратов ошибок между наблюдаемыми значениями у и предсказанных значений у . TLS подгоняет, минимизируя квадрат расстояния между наблюдаемыми ( x , y ) ∈ R p + 1YИкся

Yзнак равноβ1Икс1+...+βпИксп,
YY^(Икс,Y)∈рп+1 точки и ближайшие точки на плоскости регрессии / гиперплоскости.

Обратите внимание, что больше нет «линии регрессии»! Вышеупомянутое уравнение определяет гиперплоскость : это двухмерная плоскость, если есть два предиктора, трехмерная гиперплоскость, если есть три предиктора, и т. Д. Таким образом, приведенное выше решение не работает: мы не можем получить решение TLS, взяв только первый ПК (который является линия). Тем не менее, решение может быть легко получено через PCA.

Как и раньше, PCA проводится по точкам. Это дает р + 1 собственных векторов в столбцах V . Первые р собственных векторов определяют р - мерную гиперплоскость H , что нам нужно; последний (число p + 1 ) собственный вектор v p + 1 ортогонален ему. Вопрос в том, как преобразовать основу H, заданную первым(Икс,Y)p+1VppHp+1vp+1H собственных векторов в рpβ коэффициенты.

Заметим , что если положить для всех я ≠ K и только х К = 1 , то Y = р к , то есть вектор ( 0 , ... , 1 , ... , β к ) ∈ H лежит в гиперплоскости H , С другой стороны, мы знаем, что v p + 1 = ( v 1 , … , v p + 1xi=0i≠kxk=1y^=βk

(0,…,1,…,βk)∈H
H ортогонально этому. Т.е. их скалярное произведение должно быть равно нулю: 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.

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

В R:

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

Опять же, это даст правильные наклоны, даже если и y не были отцентрированы (потому что встроенные функции PCA автоматически выполняют центрирование). Чтобы восстановить перехват, вычислите β 0 = ˉ y - ˉ x β .xyβ0=y¯−x¯β

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

Решение в закрытой форме для TLS

β

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

(X⊤XX⊤yy⊤Xy⊤y)(β−1)=σp+12(β−1),
βTLS=(X⊤X−σp+12I)−1X⊤y,
βOLS=(X⊤X)−1X⊤y.

Многофакторная множественная регрессия

Эту же формулу можно обобщить для многомерного случая, но даже для определения того, что делает многомерный TLS, потребуется некоторая алгебра. Смотрите Википедию на TLS . Многомерная регрессия OLS эквивалентна группе одномерных регрессий OLS для каждой зависимой переменной, но в случае TLS это не так.


1
Я не знаю R, но все же хотел предоставить фрагменты R для дальнейшего использования. Здесь много людей, хорошо владеющих R. Пожалуйста, не стесняйтесь редактировать мои фрагменты, если это необходимо! Спасибо.
— говорит амеба: восстанови монику

Хороший пост, но если я могу спросить, что гарантирует тот факт, что вектор (0,...,1,...,βК)лежит в гиперплоскости?
— JohnK

@JohnK, я не уверен, что именно неясно. Как я уже писал, пусть всеИкся быть равным нулю, кроме ИксКзнак равно1, Тогда, если вы подключите это вYзнак равноΣβJИксJ, ты получишь Yзнак равноβК⋅1знак равноβК, Итак, точка(0,...,1,...βК) лежит на гиперплоскости, определяемой уравнением Yзнак равноΣβJИксJ,
— говорит амеба, восстанови Монику

Кажется, я неправильно понял эту часть, но теперь все ясно. Спасибо за разъяснения тоже.
— JohnK

2
В R вы можете предпочесть векторы «eigen (cov (cbind (x, y))) $ », а не prcomp (cbind (x, y)) $ вращение, потому что первое намного быстрее для больших векторов.
— Томас Браун

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

You must give it the ratio of errors on x and y; pure TLS optimises this.
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.