Я очень новичок в частичных наименьших квадратах (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)
Я ожидал, что следующие числа иб
> ( 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
Это числовая ошибка, или я неправильно понимаю природу и ?б
Я также хотел бы знать, каковы эти коэффициенты:
> 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
Так что я думаю, что я прав насчет природы и .б
РЕДАКТИРОВАТЬ: Учитывая комментарии, представленные @chl, я чувствую, что мой вопрос не достаточно ясен, поэтому позвольте мне предоставить более подробную информацию. В моем примере есть вектор ответов и двухстолбцовая матрица предикторов, и я использую нормализованную версию для и нормализованную версию для (центрированная и деленная на стандартные отклонения). Определение первого компонента PLS : где и выбраны так, чтобы иметь максимальное значение внутреннего произведения .X ˜ Y Y ˜ X X t 1 t 1 = a ˜ X 1 + b ˜ X 2 б ⟨ т 1 , ~ Y ⟩ т 1 УСледовательно, это эквивалентно максимизации корреляции между и , не так ли?
источник
pls
этой статье JSS есть хороший обзор пакета и регрессии PLS .?coef.mvr
Ответы:
Регрессия PLS основана на итерационных алгоритмах (например, NIPALS, SIMPLS). Ваше описание основных идей верно: мы ищем один (PLS1, одна переменная ответа / несколько предикторов) или два (PLS2, с различными режимами, множественные переменные ответа / несколько предикторов) вектор (ы) весов, (и ) скажем, чтобы сформировать линейную комбинацию (и) исходной (ых) переменной (ей) так, чтобы ковариация между Xu и Y (Yv, для PLS2) была максимальной. Давайте сосредоточимся на извлечении первой пары весов, связанных с первым компонентом. Формально критерий для оптимизации гласит: В вашем случае является одномерным, так что это означает максимизироватьu v
X=[x_1;x_2]
Я должен поблагодарить Артура Тененхауса, который указал мне правильное направление.
Использование векторов веса единицы не является ограничительным, и некоторые пакеты (u Виньетка также предлагает хорошее обсуждение (стр. 26-29). Особое значение также имеет тот факт, что большинство процедур PLS (по крайней мере, те, которые я знаю в R) предполагают, что вы предоставляете нестандартные переменные, потому что центрирование и / или масштабирование обрабатываются внутренне (это особенно важно, например, при перекрестной проверке) ).
pls. regression
в plsgenomics , основанные на коде из более раннего пакета Wehrenspls.pcr
) будут возвращать нестандартные векторы веса (но со скрытыми компонентами по-прежнему нормы 1), если требуется. Но большинство пакетов PLS будут возвращать стандартизированные , включая тот, который вы использовали, особенно те, которые реализуют алгоритм SIMPLS или NIPALS; Я нашел хороший обзор обоих подходов в презентации Барри М. Вайза « Регрессия свойств частичных наименьших квадратов (PLS)» и различия между алгоритмами , но хемометрикойУчитывая ограничение , вектор определяется какu′u=1 u
Используя небольшое моделирование, его можно получить следующим образом:
Вы можете сравнить вышеупомянутые результаты (
u=[0.5792043;0.8151824]
в частности) с тем, что дали бы пакеты R. Например, с помощью NIPALS из Хемометрика пакета (другая реализация , который я знаю , что можно найти в mixOmics пакете), мы получим:Аналогичные результаты будут получены с
plsr
алгоритмом ядра PLS по умолчанию:Во всех случаях мы можем проверить, что имеет длину 1.u
При условии, что вы измените свою функцию для оптимизации на такую, которая читает
и нормализовать
u
впоследствии (u <- u/sqrt(crossprod(u))
), вы должны быть ближе к вышеупомянутому решению.Sidenote : В качестве критерия (1) эквивалентно может быть найдено в качестве левого особого вектора из СВД из , соответствующего наибольшему собственному:
В более общем случае (PLS2) способ суммировать вышеизложенное состоит в том, чтобы сказать, что первые канонические векторы PLS являются наилучшим приближением ковариационной матрицы X и Y в обоих направлениях.
Ссылки
источник