#set working directory setwd("D:/AJG/Documents/AJG Documents/R/R/RData") getwd() #1 #install and load packages install.packages("psych") install.packages() library('psych') #import data jobsat <- read.csv("job-satisfaction.csv", header=TRUE, colClasses=c("numeric", "numeric", "numeric", "numeric", "numeric", "numeric", "numeric")) jobsat <- read.csv("job-satisfaction.csv", header=TRUE, colClasses=c("numeric")) describe(jobsat) boxplot(jobsat) #test data for suitability for factor analysis cor(jobsat) jobsat.cor <- cor(jobsat) jobsat.cor round(jobsat.cor ,3) KMO(jobsat) cortest.bartlett(jobsat) det(jobsat.cor) #calculate eigenvalues jobsat.eigen <- eigen(jobsat.cor) jobsat.eigen$values #draw a scree plot scree(jobsat, fa=FALSE) scree(jobsat, main="Scree Plot") #carry our parallel analysis fa.parallel(jobsat, fa="pc", show.legend=TRUE, main="Scree plot with parallel analysis") #extract factors jobsat.analysis <- principal(jobsat, nfactor=3, rotate="none") jobsat.analysis #with rotation jobsat.analysis <- principal(jobsat, nfactor=3, rotate="varimax") #show diagrams fa.diagram(jobsat.analysis) fa.diagram(jobsat.analysis, simple=FALSE) fa.diagram(jobsat.analysis, digits=3) fa.diagram(jobsat.analysis, cut=.7) fa.diagram(jobsat.analysis, simple=FALSE, l.cex=3) fa.diagram(jobsat.analysis, simple=FALSE, adj=4) #correlation matrix from model factor.model(jobsat.analysis$loadings) factor.residuals(jobsat.cor, jobsat.analysis$loadings) jobsat.residuals <- factor.residuals(jobsat.cor, jobsat.analysis$loadings) #draw histogram, hist(jobsat.residuals) #to get component scores jobsat.analysis <- principal(jobsat, nfactor=3, rotate="varimax", scores=TRUE) jobsat.anaysis$scores jobsat.scores <- jobsat.analysis$scores jobsat.scores.round <- round(jobsat.scores,2) #add to original data frame jobsatplus <- cbind(jobsat,jobsat.scores.round) #change column names colnames(jobsatplus)[c(8,9,10)] <- c("Component 1", "Component 2", "Component 3") #to use just some variables jobsat1 = jobsat[, c(2:9)] or c(2,4,6) #2 #import data and look at it studsatall <- read.csv("student-satisfaction.csv", header=TRUE, colClasses=c("numeric")) studsatall <- read.csv("student-satisfaction-text.csv", header=TRUE) studsat <- studsatall[, c(6:17)] describe(studsat) boxplot(studsat) #look for high correlations studsat.cor <- cor(studsat) studsat.cor #determine eigenvalues studsat.eigen <- eigen(studsat.cor) studsat.eigen$values #various tests KMO(studsat) cortest.bartlett(studsat) det(studsat.cor) #how many factors scree(studsat, fa=FALSE) scree(studsat, main="Scree Plot") fa.parallel(studsat, fa="pc", show.legend=TRUE, main="Scree plot with parallel analysis") #exctract factors studsat.analysis <- principal(studsat, nfactor=2, rotate="none") studsat.analysis <- principal(studsat, nfactor=2, rotate="varimax") #diagram fa.diagram(studsat.analysis) fa.diagram(studsat.analysis, simple=FALSE) fa.diagram(studsat.analysis, digits=3) fa.diagram(studsat.analysis, cut=.7) fa.diagram(studsat.analysis, simple=FALSE, l.cex=3) fa.diagram(studsat.analysis, simple=FALSE, adj=4) #correlations from model compared to original factor.model(studsat.analysis$loadings) factor.residuals(studsat.cor, studsat.analysis$loadings) #draw histogram studsat.residuals <- factor.residuals(studsat.cor, studsat.analysis$loadings) hist(studsat.residuals) #analyse again with scores=TRUE studsat.analysis <- principal(studsat, nfactor=2, rotate="varimax", scores=TRUE) studsat.scores <- studsat.analysis$scores #add to original dataframe studsatplus <-cbind(studsat,studsat.scores) #change column names colnames(studsatplus)[14] <- "Component 2" colnames(studsatplus)[c(13,14)] <- c("Component 1", "Component 2") #t test t.test(studsatplus$RC1 ~ studsatplus$gender) #anova anova1 <- aov(studsatplus$ethnicgp ~ studsatplus$RC1) summary(anova1) --------------- #change values in dataframe df[df == 'Old Value'] <- 'New value' studsatall$gender[studsatall$gender == "1"] <- "Male" studsatall$gender[studsatall$gender == "2"] <- "Female" #check classes as.data.frame(sapply(studsatall,class)) #change integer to numeric studsatall[,6:17] <- lapply(studsatall[,6:17], as.numeric)