Not a good advice (On regression over principal axis)
Author
Andrés Gutiérrez
Published
June 8, 2016
Some time ago, someone told me about a robust methodology that was used in order to select the significant variables on a factor. Long story short: he was performing some factor analysis and he wanted to know which variables were more important than others on that very factor.
The good advice was: define a model between the factor scores and the variables on the data set and then use a stepwise regression methodology in order to identify which variables were significant. This way, his response variable was defined to be the factor score on every unit and the explanatory variables were exactly the same variables used to perform the factor analysis.
So, I wrote some R code and found the obvious thing. Take a look. First I perform a principal component analysis on a data set.
data("iris")attach(iris)Ex1 <- iris[, 1:4]library(ade4)Ex1 <-as.matrix(scale(Ex1))acp4 <-dudi.pca(Ex1,scannf=F,nf=10) ### Analisis de componentes principalesprint(acp4$c1) # column normed scores - principal axes
Then I fitted the model by using the first principal component as the response variable.
datos <-data.frame(Ex1, score = score[, 1])model <-lm(score ~0+ ., data = datos)summary(model)
Call:
lm(formula = score ~ 0 + ., data = datos)
Residuals:
Min 1Q Median 3Q Max
-2.256e-15 2.688e-16 3.640e-16 4.607e-16 8.576e-15
Coefficients:
Estimate Std. Error t value Pr(>|t|)
Sepal.Length 5.228e-01 2.249e-16 2.325e+15 <2e-16 ***
Sepal.Width -2.702e-01 1.226e-16 -2.205e+15 <2e-16 ***
Petal.Length 5.824e-01 4.728e-16 1.232e+15 <2e-16 ***
Petal.Width 5.667e-01 3.392e-16 1.671e+15 <2e-16 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 1.032e-15 on 146 degrees of freedom
Multiple R-squared: 1, Adjusted R-squared: 1
F-statistic: 1.027e+32 on 4 and 146 DF, p-value: < 2.2e-16
Then I found that every variable were significant. I repeated the exercise for the second, third and fourth factor and I found the same behaviour: every variable was significant for every factor. It is not over, I found that the values of regression coefficients were exactly the same to those defining the factor loads.
cbind(model$coefficients, acp4$c1[, 1])
Sepal.Length
0.5228115
0.5210659
Sepal.Width
-0.2702498
-0.2693474
Petal.Length
0.5823575
0.5804131
Petal.Width
0.5667489
0.5648565
Then, I realised that by definition a factor is defined to be a linear combination of the variables. That way, it is evident that every variable is not only significant but share the same value of regression coefficients and factor loads. So, if the response is defined as
\[ F = a_1X_1 + a_2X_2 + a_3X_3 + a_4X_4\]
Then the regression coefficients of the following model