## R Programming Assignment on Factor Analysis

• 2nd Jun, 2022
• 23:43 PM
```Personality <- read.csv("Personality.txt", sep="")
head(Personality)
summary(Personality)
library(corrplot)
corrplot(cor(Personality), order = "hclust", tl.col='black', tl.cex=.75)

d_stan = as.data.frame(scale(Personality))
### Factor analysis with no rotation
res1b = factanal(d_stan, factors = 10, rotation = "none", na.action = na.omit)
res1b\$loadings

# Compute eigenvalues from factor loadings

# Compute eigenvalue of factor 1
loadings_fac1 = res1b\$loadings[,1]
eigenv_fac1 = sum(loadings_fac1^2); eigenv_fac1
# Compute proportion variance
eigenv_fac1/32

# Uniqueness & Communality
res1b\$uniquenesses
# Calculate uniqueness
loadings_distant = res1b\$loadings[1,]
communality_distant = sum(loadings_distant^2); communality_distant
uniqueness_distant = 1-communality_distant; uniqueness_distant

### Plot loadings against one another
load = res1b\$loadings[,1:2]
plot(load, type="n") # set up plot
text(load,labels=names(d_stan),cex=.7) # add variable names

# Rotation of Factors

### Factor analysis with rotation
res1a = factanal(d_stan, factors = 10, rotation = "varimax", na.action = na.omit)
res1a\$loadings
### Plot loadings against one another
load = res1a\$loadings[,1:2]
plot(load, type="n") # set up plot
text(load,labels=names(d_stan),cex=.7) # add variable names

# Creating composite variables

k = 2
p = 5
yes = 'yes! lets extract k factors!'
no = 'no! we need more data or fewer factors!'
ifelse(((p-k)^2 > p+k), yes, no)

#Let’s try combining some synonyms and then look at the extracted Factors!
shy = rowMeans(cbind(d_stan\$distant, d_stan\$shy, d_stan\$withdrw, d_stan\$quiet))
outgoing = rowMeans(cbind(d_stan\$talkatv, d_stan\$outgoin, d_stan\$sociabl))
hardworking = rowMeans(cbind(d_stan\$hardwrk, d_stan\$persevr, d_stan\$discipl))

friendly = rowMeans(cbind(d_stan\$friendl, d_stan\$kind, d_stan\$coopera, d_stan\$agreebl, d_stan\$approvn,
d_stan\$sociabl))
anxious = rowMeans(cbind(d_stan\$tense, d_stan\$anxious, d_stan\$worryin))
#etc, you guys choose what you want to combine
combined_data = cbind(shy,outgoing,hardworking,friendly,anxious)
combined_data = as.data.frame(combined_data)
res2 = factanal(combined_data, factors = 2, na.action=na.omit)
res2\$loadings

### Plot loadings against one another
load = res2\$loadings[,1:2]
plot(load, type="n") # set up plot
text(load,labels=names(combined_data),cex=.7) # add variable names```