Lab_FA and PCA
FactorAnalysis.txt — Plain Text, 3 kB (3438 bytes)
Contenuto del file
setwd("C:/Dropbox/Lavoro/Didattica/Course Statistics for Economics and Business/Datasets_Codes") ##################### ### Example Passito ##################### # import dataset X=read.csv("Passito.csv",header=TRUE,sep=";") head(X) # remove unuseful variables (columns) X=X[,-c(1,2,3,4,5)] head(X) dim(X) # perform factor analysis with no rotation and 5 factors F=factanal(X,factors=5,rotation="none",scores="regression") # compute correlations between the original variables R=F$correlation R # compute eigenvalues and eigenfactors of the matrix of correlations e=eigen(R) e$values # create the scree plot to represent the eigenvalues barplot(rep(1,ncol(X))),col="yellow",ylim=c(0,max(e$values)+2)) barplot(e$values,main="Scree plot",ylab="eigenvalue",add=TRUE) F # perform factor analysis with varimax rotation and 5 factors F=factanal(X,factors=5,rotation="varimax",scores="regression") F # perform factor analysis with promax rotation and 5 factors F=factanal(X,factors=5,rotation="promax",scores="regression") F # Factor loadings L=F$loadings L # variances of unique factors (proportions of variance of the original observed variables not explained by the factors) U=F$uniquenesses U # communalities (proportions of variance of the original observed variables explained by the factors) Comm=1-U Comm # rotation matrix G=F$rotmat G # factor scores (factor values for each statistical unit (country) ) FScores=F$scores FScores # p-value of the test on the hypothesis that the considered factrs are sufficient p=F$PVAL p # Principal Component Analysis PC=prcomp(X,retx =TRUE,center=TRUE,scale.=TRUE) e_values=PC$sdev^2 e_values e_vectors=PC$rotation e_vectors # YScores=PC$x YScores=as.matrix(X)%*%e_vectors ifelse(abs(e_vectors)>0.3,e_vectors,0) ##################### ### Example Mall ##################### X=read.csv("Mall.csv",header=TRUE,sep=";") head(X) dim(X) F=factanal(X,factors=2,rotation="none",scores="regression") R=F$correlation R e=eigen(R) e$values barplot(rep(1,ncol(X)),col="yellow",ylim=c(0,max(e$values)+2)) barplot(e$values,main="Scree plot",ylab="eigenvalue",add=TRUE) F F=factanal(X,factors=2,rotation="varimax",scores="regression") F F=factanal(X,factors=2,rotation="promax",scores="regression") F L=F$loadings L U=F$uniquenesses U Comm=1-U Comm R=F$correlation R G=F$rotmat G FScores=F$scores FScores plot(FScores[,1],FScores[,2]) ##################### ### Example Eating Habits ##################### data=read.csv("EatingHabits.csv",header=TRUE,sep=";") head(data) X=data[,-c(1,2,15)] dim(X) F=factanal(X,factors=5,rotation="none",scores="regression") R=F$correlation R plot(X) e=eigen(R) e$values barplot(rep(1,ncol(X)),col="yellow",ylim=c(0,max(e$values)+2)) barplot(e$values,main="Scree plot",ylab="eigenvalue",add=TRUE) F F=factanal(X,factors=4,rotation="varimax",scores="regression") F F=factanal(X,factors=4,rotation="promax",scores="regression") F L=F$loadings L ifelse(L>0.5,L,0) U=F$uniquenesses U Comm=1-U Comm R=F$correlation R G=F$rotmat G FScores=F$scores FScores class(FScores) cor(FScores) plot(as.data.frame(FScores)) data$Countries FScores[data$Countries=="Italy",] p=F$PVAL p PC=prcomp(X,retx =TRUE,center=TRUE,scale.=TRUE) e_values=PC$sdev^2 e_values e_vectors=PC$rotation e_vectors YScores=PC$x YScores