【问题标题】:Principal Component Regression? What is the dependent variable?主成分回归?什么是因变量?
【发布时间】:2020-03-23 18:23:27
【问题描述】:

我正在执行PCA 以尝试清除高度相关的变量实系数。我有一个非常大的数据集,但会尝试在这里简化。我有公式:

lm(y~x1+x2+x3...x55) -> reg_linear_model

我遇到的问题是 x1:x4高度相关,因此其中一些是负面的。当我尝试执行 时,我得到了组件列表及其值。我想测试要使用哪些组件,但从属 Y 是按周分解的三年数据,所以它是 y1, y2, y3, y4, ....y156. 156 weeks。我遇到的问题是我无法将组件回归到 y 因为长度不同。我是否需要以某种方式转换 Y 以使其适合作为组件的行数?很难找到答案。许多 PCR 解释只是说将组件回归到 y 但 Y 不在 中。

感谢您对此的任何帮助!

【问题讨论】:

  • 输入和输出的行数需要相同。因此,如果 y 值是每周一次,它们会按周汇总您的输入值,然后计算 PCA 并使用回归中的前几个组件

标签: pca pca r regression pca


【解决方案1】:

通常你这样做,我们可以使用 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

就像你说的,如果我们做回归,我们会看到其中一个变成负数:

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 ***

我们做主成分分析,得到主成分,在$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

PC 组件不相关,您可以将它们用于回归。如果你有很多变量,你也可以像上面一样通过与目标变量的相关性来选择。

【讨论】:

  • 非常感谢。我还有几个问题。我想为正向的常规线性回归找到一个替换系数,我将如何进行 PCR 并将其应用于第一个回归中的负 Peta.Width 系数?
  • 你必须取出所有相关的块,所以在我的例子中,像 data = data.frame(Sepal.Length[,1:2],pca$x[,1:2] ),这将排除最后两个相关变量
  • 在您的情况下,请将所有变量放在一个名为 data 的 data.frame 中。然后, pca = prcomp(data[,1:4]) ; newdata = data.frame(pca$x[,1:2],data[,-c(1:4)]) 并再次进行回归
  • prcomp(data[,1:4]) ; newdata = data.frame(pca$x[,1:2],data[,-c(1:4)]) cbind("Actual" =dependent$Actual, newdata)-> newmodel summary(lm(Actual ~ PC1 + PC2, data = newmodel)) 调用:lm(formula = Actual ~ PC1 + PC2, data = newmodel) 我仍然有点不确定这如何接管新系数,前两个 PCA x 值是否是新的线性组合中的系数? PC 1和PC2的系数很高
  • 知道了,我离完全理解还有一步之遥,有没有其他平台可以快速和你聊天?
猜你喜欢
  • 1970-01-01
  • 2018-07-19
  • 2022-01-15
  • 1970-01-01
  • 1970-01-01
  • 2015-03-30
  • 2014-01-27
  • 2020-09-23
  • 1970-01-01
相关资源
最近更新 更多