Регрессия частичных наименьших квадратов в R: почему PLS на стандартизированных данных не эквивалентно максимизации корреляции?


12

Я очень новичок в частичных наименьших квадратах (PLS) и пытаюсь понять вывод функции R plsr()в plsпакете. Давайте смоделируем данные и запустим PLS:

library(pls)
n <- 50
x1 <- rnorm(n); xx1 <- scale(x1) 
x2 <- rnorm(n); xx2 <- scale(x2)
y <- x1 + x2 + rnorm(n,0,0.1); yy <- scale(y)
p <- plsr(yy ~ xx1+xx2, ncomp=1)

Я ожидал, что следующие числа ибab

> ( w <- loading.weights(p) )

Loadings:
    Comp 1
xx1 0.723 
xx2 0.690 

               Comp 1
SS loadings       1.0
Proportion Var    0.5
> a <- w["xx1",]
> b <- w["xx2",]
> a^2+b^2
[1] 1

рассчитаны для того, чтобы максимально

> cor(y, a*xx1+b*xx2)
          [,1]
[1,] 0.9981291

но это не совсем так:

> f <- function(ab){
+ a <- ab[1]; b <- ab[2]
+ cor(y, a*xx1+b*xx2)
+ }
> optim(c(0.7,0.6), f, control=list(fnscale=-1))
$par
[1] 0.7128259 0.6672870

$value
[1] 0.9981618

Это числовая ошибка, или я неправильно понимаю природу и ?бab

Я также хотел бы знать, каковы эти коэффициенты:

> p$coef
, , 1 comps

           yy
xx1 0.6672848
xx2 0.6368604 

РЕДАКТИРОВАТЬ : Теперь я вижу, что p$coefэто:

> x <- a*xx1+b*xx2
> coef(lm(yy~0+x))
        x 
0.9224208 
> coef(lm(yy~0+x))*a
        x 
0.6672848 
> coef(lm(yy~0+x))*b
        x 
0.6368604 

Так что я думаю, что я прав насчет природы и .бab

РЕДАКТИРОВАТЬ: Учитывая комментарии, представленные @chl, я чувствую, что мой вопрос не достаточно ясен, поэтому позвольте мне предоставить более подробную информацию. В моем примере есть вектор ответов и двухстолбцовая матрица предикторов, и я использую нормализованную версию для и нормализованную версию для (центрированная и деленная на стандартные отклонения). Определение первого компонента PLS : где и выбраны так, чтобы иметь максимальное значение внутреннего произведения .X ˜ Y Y ˜ X X t 1 t 1 = a ˜ X 1 + b ˜ X 2YXY~YX~Xt1t1=aX~1+bX~2 б т 1 , ~ Yт 1 Уabt1,Y~Следовательно, это эквивалентно максимизации корреляции между и , не так ли?t1Y


2
Регрессия PLS максимизирует факторные оценки (которые вычисляются как произведение необработанных данных с вектором (ами) нагрузок) ковариацией , а не корреляцией (как это делается в каноническом корреляционном анализе). В plsэтой статье JSS есть хороший обзор пакета и регрессии PLS .
ЧЛ

1
Поскольку все векторы центрированы и нормализованы, ковариация является корреляцией, не так ли? Извините, но статья JSS слишком техническая для новичка.
Стефан Лоран

В общем, существует асимметричный процесс дефляции (в результате регрессии линейной комбинации одного блока в линейную комбинацию другого), который немного усложняет ситуацию. Я дал некоторую схематическую картину в этом ответе . Эрве Абди дал общий обзор регрессии PLS, и методы Wegelin's Survey of Partial Least Squares (PLS) также весьма полезны. На данный момент, я, вероятно, должен преобразовать все эти комментарии в ответ ...
chl

В моем примере есть вектор ответов и двухстолбцовая матрица предикторов, и я использую нормализованную версию для и нормализованную версию для (центрированная и деленная на стандартные отклонения). Мое определение первого компонента PLS : где и выбраны так, чтобы иметь максимальное значение скалярного произведения . Разве это не хорошее определение? Х ~ У У ~ Х Х т 1 т 1 = ~ Х 1 + Ь ~ Х 2 б т 1 , ~ YYXY~YX~Xt1t1=aX~1+bX~2abt1,Y~
Стефан Лоран

Извините, @ Stéphane, потому что мои комментарии выше не учитывали тот факт, что вы запросили только один компонент (поэтому дефляция здесь не играет решающей роли). Однако, похоже, что ваша функция оптимизации не навязывает весовые векторы единичной нормы, так что в конце. (кстати, даст вам больше информации о том, что это за «коэффициенты», но вы, очевидно, сами это уже поняли.)a2+b21?coef.mvr
chl

Ответы:


17

Регрессия PLS основана на итерационных алгоритмах (например, NIPALS, SIMPLS). Ваше описание основных идей верно: мы ищем один (PLS1, одна переменная ответа / несколько предикторов) или два (PLS2, с различными режимами, множественные переменные ответа / несколько предикторов) вектор (ы) весов, (и ) скажем, чтобы сформировать линейную комбинацию (и) исходной (ых) переменной (ей) так, чтобы ковариация между Xu и Y (Yv, для PLS2) была максимальной. Давайте сосредоточимся на извлечении первой пары весов, связанных с первым компонентом. Формально критерий для оптимизации гласит: В вашем случае является одномерным, так что это означает максимизировать uv

maxcov(Xu,Yv).(1)
Y
cov(Xu,y)Var(Xu)1/2×cor(Xu,y)×Var(y)1/2,st.u=1.
Поскольку не зависит от , мы должны максимизировать . Давайте рассмотрим , где данные стандартизируются индивидуально (изначально я допустил ошибку при масштабировании вашей линейной комбинации вместо и отдельно!), Так что ; однако и зависит от . В заключение, максимальная корреляция между скрытым компонентом и переменной отклика не даст одинаковых результатов.Var(y)uVar(Xu)1/2×cor(Xu,y)X=[x_1;x_2]x1x2Var(x1)=Var(x2)=1Var(Xu)1u,

Я должен поблагодарить Артура Тененхауса, который указал мне правильное направление.

Использование векторов веса единицы не является ограничительным, и некоторые пакеты ( pls. regressionв plsgenomics , основанные на коде из более раннего пакета Wehrens pls.pcr) будут возвращать нестандартные векторы веса (но со скрытыми компонентами по-прежнему нормы 1), если требуется. Но большинство пакетов PLS будут возвращать стандартизированные , включая тот, который вы использовали, особенно те, которые реализуют алгоритм SIMPLS или NIPALS; Я нашел хороший обзор обоих подходов в презентации Барри М. Вайза « Регрессия свойств частичных наименьших квадратов (PLS)» и различия между алгоритмами , но хемометрикойuВиньетка также предлагает хорошее обсуждение (стр. 26-29). Особое значение также имеет тот факт, что большинство процедур PLS (по крайней мере, те, которые я знаю в R) предполагают, что вы предоставляете нестандартные переменные, потому что центрирование и / или масштабирование обрабатываются внутренне (это особенно важно, например, при перекрестной проверке) ).

Учитывая ограничение , вектор определяется какuu=1u

u=XyXy.

Используя небольшое моделирование, его можно получить следующим образом:

set.seed(101)
X <- replicate(2, rnorm(100))
y <- 0.6*X[,1] + 0.7*X[,2] + rnorm(100)
X <- apply(X, 2, scale)
y <- scale(y)

# NIPALS (PLS1)
u <- crossprod(X, y)
u <- u/drop(sqrt(crossprod(u)))         # X weights
t  <- X%*%u
p <- crossprod(X, t)/drop(crossprod(t)) # X loadings

Вы можете сравнить вышеупомянутые результаты ( u=[0.5792043;0.8151824]в частности) с тем, что дали бы пакеты R. Например, с помощью NIPALS из Хемометрика пакета (другая реализация , который я знаю , что можно найти в mixOmics пакете), мы получим:

library(chemometrics)
pls1_nipals(X, y, 1)$W  # X weights [0.5792043;0.8151824]
pls1_nipals(X, y, 1)$P  # X loadings

Аналогичные результаты будут получены с plsrалгоритмом ядра PLS по умолчанию:

> library(pls)
> as.numeric(loading.weights(plsr(y ~ X, ncomp=1)))
[1] 0.5792043 0.8151824

Во всех случаях мы можем проверить, что имеет длину 1.u

При условии, что вы измените свою функцию для оптимизации на такую, которая читает

f <- function(u) cov(y, X%*%(u/sqrt(crossprod(u))))

и нормализовать uвпоследствии ( u <- u/sqrt(crossprod(u))), вы должны быть ближе к вышеупомянутому решению.

Sidenote : В качестве критерия (1) эквивалентно может быть найдено в качестве левого особого вектора из СВД из , соответствующего наибольшему собственному:

maxuXYv,
uXY
svd(crossprod(X, y))$u

В более общем случае (PLS2) способ суммировать вышеизложенное состоит в том, чтобы сказать, что первые канонические векторы PLS являются наилучшим приближением ковариационной матрицы X и Y в обоих направлениях.

Ссылки

  1. Тененхаус, М. (1999). L'Approche PLS . Revue de Statistique Appliquée , 47 (2), 5-40.
  2. тер Браак, CJF и де Йонг, S (1993). Целевая функция частичной регрессии наименьших квадратов . Журнал хемометрики , 12, 41–54.
  3. Абди, H (2010). Частичная регрессия наименьших квадратов и проекция на регрессию скрытой структуры (PLS Regression) . Междисциплинарные обзоры Wiley: вычислительная статистика , 2, 97-106.
  4. Boulesteix, AL и Strimmer, K (2007). Частичные наименьшие квадраты: универсальный инструмент для анализа многомерных геномных данных . Брифинги по биоинформатике , 8 (1), 32-44.

Спасибо, гл. Я прочитаю ваш ответ, когда это возможно (и, конечно же, добавлю голос и поставлю галочку!)
Стефан Лоран

Я только что прочитал ваш ответ - поздравляю и большое спасибо.
Стефан Лоран
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.