Обычно вы делаете это так, мы можем использовать набор данных iris, и давайте сделаем Sepal.Length зависимой, а другие независимой переменной.
Прежде всего, существует корреляция между зависимым Petal.Width и Petal.Length:
cor(iris[,2:4])
Sepal.Width Petal.Length Petal.Width
Sepal.Width 1.0000000 -0.4284401 -0.3661259
Petal.Length -0.4284401 1.0000000 0.9628654
Petal.Width -0.3661259 0.9628654 1.0000000
Как вы сказали, если мы делаем регрессию, мы видим один из них go минус:
summary(lm(Sepal.Length ~ .,data=iris[,1:4]))
Call:
lm(formula = Sepal.Length ~ ., data = iris[, 1:4])
Residuals:
Min 1Q Median 3Q Max
-0.82816 -0.21989 0.01875 0.19709 0.84570
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 1.85600 0.25078 7.401 9.85e-12 ***
Sepal.Width 0.65084 0.06665 9.765 < 2e-16 ***
Petal.Length 0.70913 0.05672 12.502 < 2e-16 ***
Petal.Width -0.55648 0.12755 -4.363 2.41e-05 ***
Мы делаем PCA и получаем основную сумму компоненты, которые находятся под $x
:
pca=prcomp(iris[,2:4])
cor(iris[,"Sepal.Length"],pca$x)
PC1 PC2 PC3
[1,] 0.8619141 -0.279587 0.1937703
data = data.frame(
Sepal.Length=iris[,"Sepal.Length"],
pca$x)
summary(lm(Sepal.Length ~ .,data=data))
Call:
lm(formula = Sepal.Length ~ ., data = data)
Residuals:
Min 1Q Median 3Q Max
-0.82816 -0.21989 0.01875 0.19709 0.84570
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 5.84333 0.02568 227.519 < 2e-16 ***
PC1 0.37123 0.01340 27.697 < 2e-16 ***
PC2 -0.58457 0.06506 -8.984 1.22e-15 ***
PC3 0.86983 0.13969 6.227 4.80e-09 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Компоненты P C не коррелированы, и вы можете использовать их для регрессии. Если у вас много переменных, вы также можете выбрать корреляцию с целевой переменной, как указано выше.