====== EFA datasets: Car buying factors ====== {{:r:EFA.csv}} # read the dataset into R variable using the read.csv(file) function data <- read.csv("http://commres.net/wiki/_media/r/efa.csv") head(data) # install the package # install.packages("psych") # install.packages("GPArotation") # load the package library(psych) library(GPArotation) # calculate the correlation matrix corMat <- cor(data) # display the correlation matrix round(corMat,3) # use fa() to conduct an oblique principal-axis exploratory factor analysis # save the solution to an R variable fa.ini <- fa(r = corMat) # display the solution output fa.ini names(fa.ini) fa.ini$e.values num <- 5 fa.5 <- fa(r=corMat, nfactors=num, rotate="varimax", fm="pa") fa.5.oblimin.minres <- fa(r=corMat, nfactors=num, rotate="oblimin", fm="minres") fa.5.vm.minres <- fa(r=corMat, nfactors=num, rotate="varimax", fm="minres") fa.sort(fa.5.oblimin.minres) fa.sort(fa.5.vm.minres) > fa.sort(fa.5.oblimin.minres) Factor Analysis using method = minres Call: fa(r = corMat, nfactors = num, rotate = "oblimin", fm = "minres") Standardized loadings (pattern matrix) based upon correlation matrix MR1 MR2 MR4 MR5 MR3 h2 u2 com Resale_Value 0.73 -0.20 0.08 -0.05 -0.10 0.59 0.413 1.2 Price 0.58 0.23 -0.11 -0.01 -0.07 0.35 0.645 1.4 Maintenance 0.55 0.11 -0.01 0.26 0.01 0.45 0.549 1.5 Fuel_Efficiency 0.38 0.01 0.33 0.23 0.22 0.49 0.512 3.3 Safety -0.31 0.23 0.17 0.07 -0.24 0.21 0.790 3.6 Space_comfort -0.02 0.88 0.04 -0.06 0.03 0.83 0.172 1.0 Fuel_Type 0.03 0.52 0.11 0.02 -0.13 0.30 0.699 1.2 Technology 0.00 0.28 0.14 0.06 0.01 0.13 0.873 1.6 After_Sales_Service -0.01 0.04 0.95 -0.01 -0.01 0.92 0.085 1.0 Color 0.03 -0.05 0.02 0.78 0.09 0.67 0.329 1.0 Exterior_Looks 0.09 0.05 0.03 -0.54 0.31 0.33 0.669 1.7 Testimonials -0.23 0.04 -0.04 0.08 0.63 0.47 0.535 1.3 Test_drive 0.06 -0.02 0.23 -0.06 0.44 0.26 0.745 1.6 Product_reviews 0.33 0.25 -0.08 0.12 0.35 0.36 0.642 3.2 MR1 MR2 MR4 MR5 MR3 SS loadings 1.64 1.41 1.21 1.12 0.97 Proportion Var 0.12 0.10 0.09 0.08 0.07 Cumulative Var 0.12 0.22 0.30 0.38 0.45 Proportion Explained 0.26 0.22 0.19 0.18 0.15 Cumulative Proportion 0.26 0.48 0.67 0.85 1.00 With factor correlations of MR1 MR2 MR4 MR5 MR3 MR1 1.00 -0.03 0.16 0.25 0.03 MR2 -0.03 1.00 0.32 -0.07 0.21 MR4 0.16 0.32 1.00 0.13 0.07 MR5 0.25 -0.07 0.13 1.00 0.17 MR3 0.03 0.21 0.07 0.17 1.00 Mean item complexity = 1.8 Test of the hypothesis that 5 factors are sufficient. The degrees of freedom for the null model are 91 and the objective function was 2.97 The degrees of freedom for the model are 31 and the objective function was 0.34 The root mean square of the residuals (RMSR) is 0.04 The df corrected root mean square of the residuals is 0.06 Fit based upon off diagonal values = 0.97 Measures of factor score adequacy MR1 MR2 MR4 MR5 MR3 Correlation of (regression) scores with factors 0.87 0.92 0.96 0.86 0.79 Multiple R square of scores with factors 0.76 0.85 0.92 0.73 0.63 Minimum correlation of possible factor scores 0.52 0.70 0.85 0.46 0.26 > fa.sort(fa.5.vm.minres) Factor Analysis using method = minres Call: fa(r = corMat, nfactors = num, rotate = "varimax", fm = "minres") Standardized loadings (pattern matrix) based upon correlation matrix MR1 MR2 MR3 MR5 MR4 h2 u2 com Resale_Value 0.69 -0.22 -0.17 0.16 0.01 0.59 0.413 1.5 Maintenance 0.61 0.07 0.07 0.07 0.25 0.45 0.549 1.4 Price 0.57 0.15 -0.05 -0.04 -0.02 0.35 0.645 1.2 Fuel_Efficiency 0.46 0.09 0.28 0.37 0.23 0.49 0.512 3.2 Space_comfort 0.02 0.87 0.21 0.00 -0.17 0.83 0.172 1.2 Fuel_Type 0.06 0.54 -0.02 0.08 -0.04 0.30 0.699 1.1 Technology 0.04 0.32 0.09 0.13 0.03 0.13 0.873 1.5 Safety -0.28 0.30 -0.16 0.11 0.05 0.21 0.790 2.9 Testimonials -0.18 0.04 0.66 -0.05 0.02 0.47 0.535 1.2 Test_drive 0.09 0.06 0.43 0.23 -0.07 0.26 0.745 1.7 Product_reviews 0.38 0.18 0.41 -0.03 0.07 0.36 0.642 2.4 After_Sales_Service 0.06 0.37 0.06 0.88 0.04 0.92 0.085 1.4 Color 0.21 -0.05 0.26 0.07 0.74 0.67 0.329 1.4 Exterior_Looks -0.01 0.05 0.20 0.01 -0.54 0.33 0.669 1.3 MR1 MR2 MR3 MR5 MR4 SS loadings 1.72 1.50 1.09 1.03 1.00 Proportion Var 0.12 0.11 0.08 0.07 0.07 Cumulative Var 0.12 0.23 0.31 0.38 0.45 Proportion Explained 0.27 0.24 0.17 0.16 0.16 Cumulative Proportion 0.27 0.51 0.68 0.84 1.00 Mean item complexity = 1.7 Test of the hypothesis that 5 factors are sufficient. The degrees of freedom for the null model are 91 and the objective function was 2.97 The degrees of freedom for the model are 31 and the objective function was 0.34 The root mean square of the residuals (RMSR) is 0.04 The df corrected root mean square of the residuals is 0.06 Fit based upon off diagonal values = 0.97 Measures of factor score adequacy MR1 MR2 MR3 MR5 MR4 Correlation of (regression) scores with factors 0.86 0.91 0.80 0.93 0.82 Multiple R square of scores with factors 0.75 0.82 0.64 0.87 0.67 Minimum correlation of possible factor scores 0.50 0.64 0.27 0.75 0.34 > > Factor Analysis using method = minres Call: fa(r = corMat, nfactors = num, rotate = "varimax", fm = "minres") Standardized loadings (pattern matrix) based upon correlation matrix MR1 MR2 MR3 MR5 MR4 h2 u2 com ---------------------------------------------------------------- Resale_Value 0.69 -0.22 -0.17 0.16 0.01 0.59 0.413 1.5 Maintenance 0.61 0.07 0.07 0.07 0.25 0.45 0.549 1.4 Price 0.57 0.15 -0.05 -0.04 -0.02 0.35 0.645 1.2 Fuel_Efficiency 0.46 0.09 0.28 0.37 0.23 0.49 0.512 3.2 ---------------------------------------------------------------- Space_comfort 0.02 0.87 0.21 0.00 -0.17 0.83 0.172 1.2 Fuel_Type 0.06 0.54 -0.02 0.08 -0.04 0.30 0.699 1.1 Technology 0.04 0.32 0.09 0.13 0.03 0.13 0.873 1.5 Safety -0.28 0.30 -0.16 0.11 0.05 0.21 0.790 2.9 ---------------------------------------------------------------- Testimonials -0.18 0.04 0.66 -0.05 0.02 0.47 0.535 1.2 Test_drive 0.09 0.06 0.43 0.23 -0.07 0.26 0.745 1.7 Product_reviews 0.38 0.18 0.41 -0.03 0.07 0.36 0.642 2.4 ---------------------------------------------------------------- After_Sales_Service 0.06 0.37 0.06 0.88 0.04 0.92 0.085 1.4 ---------------------------------------------------------------- Color 0.21 -0.05 0.26 0.07 0.74 0.67 0.329 1.4 Exterior_Looks -0.01 0.05 0.20 0.01 -0.54 0.33 0.669 1.3 MR1 MR2 MR3 MR5 MR4 SS loadings 1.72 1.50 1.09 1.03 1.00 Proportion Var 0.12 0.11 0.08 0.07 0.07 Cumulative Var 0.12 0.23 0.31 0.38 0.45 Proportion Explained 0.27 0.24 0.17 0.16 0.16 Cumulative Proportion 0.27 0.51 0.68 0.84 1.00 ====== 2 ====== food <- read.csv("http://commres.net/wiki/_media/r/food-texture.csv", row.names = "X") str(food) food.ini <- fa(food) food.ini$e.values # we decide to get two factors based on eigenvalues food.fa <- factanal(food, factors = 2) food.fa food.fa$uniquenesses apply(food.fa$loadings^2,1,sum) # communality 1 - apply(food.fa$loadings^2,1,sum) # 1 - communality = uniq Lambda <- food.fa$loadings Psi <- diag(food.fa$uniquenesses) S <- food.fa$correlation Sigma <- Lambda %*% t(Lambda) + Psi round(S - Sigma, 6) food.fa.none <- factanal(food, factors = 2, rotation = "none") food.fa.varimax <- factanal(food, factors = 2, rotation = "varimax") food.fa.promax <- factanal(food, factors = 2, rotation = "promax") par(mfrow = c(1,3)) plot(food.fa.none$loadings[,1], food.fa.none$loadings[,2], xlab = "Factor 1", ylab = "Factor 2", ylim = c(-1,1), xlim = c(-1,1), main = "No rotation") abline(h = 0, v = 0) plot(food.fa.varimax$loadings[,1], food.fa.varimax$loadings[,2], xlab = "Factor 1", ylab = "Factor 2", ylim = c(-1,1), xlim = c(-1,1), main = "Varimax rotation") text(food.fa.varimax$loadings[,1]-0.08, food.fa.varimax$loadings[,2]+0.08, colnames(food), col="blue") abline(h = 0, v = 0) plot(food.fa.promax$loadings[,1], food.fa.promax$loadings[,2], xlab = "Factor 1", ylab = "Factor 2", ylim = c(-1,1), xlim = c(-1,1), main = "Promax rotation") abline(h = 0, v = 0) par(mfrow = c(1,1))