Как согласовать модель линейной регрессии с двумя основными компонентами в R? - PullRequest
6 голосов
/ 26 ноября 2009

Допустим, у меня есть матрица данных d

pc = prcomp(d)

# pc1 and pc2 are the principal components  
pc1 = pc$rotation[,1] 
pc2 = pc$rotation[,2]

Тогда это должно соответствовать модели линейной регрессии, верно?

r = lm(y ~ pc1+pc2)

Но тогда я получаю эту ошибку:

Errormodel.frame.default(formula = y ~ pc1+pc2, drop.unused.levels = TRUE) : 
   unequal dimensions('pc1')

Я думаю, есть пакеты, которые делают это автоматически, но это тоже должно работать?

1 Ответ

16 голосов
/ 27 ноября 2009

Ответ: вам не нужно pc $ вращение, это матрица вращения, а не матрица повернутых значений (баллов).

Составьте некоторые данные:

x1 = runif(100)
x2 = runif(100)
y = rnorm(2+3*x1+4*x2)
d = cbind(x1,x2)

pc = prcomp(d)
dim(pc$rotation)
## [1] 2 2

К сожалению. Компонент "х" - это то, что мы хотим. От? Prcomp:

x: если «retx» равно true, возвращается значение повернутых данных (центрированные (и масштабированные, если требуется) данные, умноженные на матрицу «вращения»).

dim(pc$x)
## [1] 100   2
lm(y~pc$x[,1]+pc$x[,2])
## 
## Call:
## lm(formula = y ~ pc$x[, 1] + pc$x[, 2])

## Coefficients:
## (Intercept)    pc$x[, 1]    pc$x[, 2]  
##     0.04942      0.14272     -0.13557  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...