Как выполнить ортогональную регрессию (наименьших квадратов) с помощью 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=0ikxk=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+12vp+1/vp+1=(β1)

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

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

Эту же формулу можно обобщить для многомерного случая, но даже для определения того, что делает многомерный 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.