Phân tích nhân tố khám phá với R
(Exploratory Factor Analysis with R)
chuc1803@gmail.com
Phân tích nhân tố khám phá (EFA- Exploratory Factor Analysis) là phương pháp phân tích dữ liệu nâng cao dùng trong phân tích đa chiều thường được sử dụng để đánh giá các thang đo liên quan đến hoạt động điều tra xã hội học (tâm lý, nhận thức). EFA thường được sử dụng như 1 bước trong tiền xử lý dữ liệu để rút gọn số chiều của dữ liệu (dimension reduction), ngoài ra EFA cũng có thể được sử dụng như một bước tiền phân tích để định hướng các phân tích chuyên sâu như phân tích hồi qui hay sử dụng cho các mô hình SEM. Bài viết này giới thiệu cách triển khai phân tích nhân tố khám phá với ngôn ngữ R.
Dataset minh họa:
SAQ.sav (file dữ liệu SPSS) được thu thập từ hơn 2500 sinh viên bằng Questionnaire với thang đo Likert 5 mức gồm 23 câu hỏi với mục đích nghiên cứu, phân tích để trả lời câu hỏi “Các nhân tố nào làm cho người học sợ học môn SPSS”. Chi tiết về Questionnaire được mô tả trong cuốn sách Discovering Statistics using SPSS của Andy Field.
Dữ liệu trong file SAQ.sav:
Download file SAQ.sav tại ĐÂY Download file dữ liệu đã mã hóa tại ĐÂY (file được mã hóa bởi tác giả Nguyễn Chí Dũng trên diễn đàn phantichdinhluong.wordpress.com)
Download file Code R để phân tích EFA tại ĐÂY
Các bước phân tích nhân tố trong R
Bước 1. Cài đặt (install) và nạp (load) các gói (Packages) cần thiết cho phân tích EFA
#Install packages requirements
install.packages("GPArotation")
install.packages("corpcor")
install.packages("ggplot2")
install.packages("corrplot")
install.packages("grid")
install.packages("likert")
install.packages("factoextra")
install.packages("jbryer")
#Load the requirement libraries
library(devtools)
library(psych)
library(GPArotation)
library(corpcor)
library(corrplot)
library(factoextra)
library(likert)
library(jbryer)
library(ggplot2)
library(grid
Bước 2. Đọc dữ liệu
#Read dataset
setwd("D:/R")
myData<-read.delim("raq.dat",header=T)
attach(myData)
fix(myData)
Bước 3. Phân tích tương quan giữa các biến #Correlation Analysis
corMatrix=cor(myData)
round(corMatrix,5)
Mô tả mối tương quan giữa các biến trực quan bằng đồ thị (sử dụng các loại đồ thị trong gói ggplot2) corrplot(corMatrix, method = "color")
Trong hình trên, màu xanh thể hiện tương quan dương, màu đỏ thể hiện tương quan âm. Mức độ (độ lớn) của tương quan thể hiện bởi mức độ đậm nhạt của màu sắc. Các ô vuông trên đường chéo chính luôn là màu xanh đậm (tương quan với chính nó, dương 1).
Có thể điều chỉnh để xem rõ hơn mối tương quan
corrplot(corMatrix, method = "color", order = "hclust")
Bước 4. Kiểm định dataset bằng KMO và Bartlett
Thông thường, trước khi tiến hành phân tích thành phần chính (PCA) và EFA, ta phải kiểm tra xem dữ liệu ta thu thập được có phù hợp cho phân tích hay không. Hai phương pháp kiểm định thường dùng để làm điều này là kiểm định KMO và Bartlett
#KMO Test
KMO(myData)
Một bộ dữ liệu được xem là phù hợp để phân tích EFA thường có giá trị KMO Test tối thiểu là 0.5. Trong ví dụ này, giá trị KMO Test cho dataset là 0.93 có nghĩa là có thể sử dụng phân tích EFA cho bộ dữ liệu này. Kiểm định Bartlett
Bartlett Test thường đường dùng như một kiểm định bổ sung cho KMO Test.
cortest.bartlett(myData)
Bartlett Test có giá trị 19334.49, bậc tự do là 253 và trị số p (p value =0) nhỏ hơn <5%, có nghĩa là quan hệ giữa các biến (items) đủ lớn để sử dụng phân tích EFA.
Bước 5. Xác định số lượng các nhân tố chính rút ra
Trong phân tích EFA, căn cứ để xác định các nhân tố chính được rút ra là sử dụng giá trị của Eigenvalue. Theo tiêu chuẩn của Kaiser thì nhân tố chính được rút ra phải có Eigenvalue >1. Một tiêu chuẩn khác ít nghiêm ngặt hơn đó là tiêu chuẩn của Jolliffe, theo Jolliffe thì các nhân tố có Eigenvalue >0.7 có thể được chọn. Trong ví dụ này, số lượng nhân tố chính được rút ra dựa vào tiêu chuẩn của Kaiser.
Theo tiêu chuẩn của Kaiser, có 4 nhân tố được rút ra (có Eigenvalue >1). Nhân tố thứ nhất (Dim.1) có Eigenvalue là 7.29 có nghĩa là nhân tố này giải thích được 7.29/23= 31.7% tổng phương sai (total variance). Tương tự, nhân tố thứ 4 (Dim.4) có Eigenvalue là 1.23, có nghĩa là nhân tố này giải thích cho 1.23/27 =5.3% tổng phương sai. Cả 4 nhân tố được rút ra (Dim.1, Dim.2, Dim.3 và Dim.4) giải thích được (7.29+1.74+1.32+1.23)/23 = 50.34% tổng phương sai.
Minh họa trực quan kết quả
fviz_screeplot(pca1, addlabels = TRUE, n = 12)
Phương sai giải thích cho 12 nhân tố đầu tiên
Eigenvalue của tất cả 23 nhân tố
fviz_screeplot(pca1, n = 23, choice = "eigenvalue", addlabels = TRUE)
Bước 6. Xác định các biến cấu thành nhân tố được rút ra, đặt tên nhân tốỞ trên, sử dụng Eigenvalue theo tiêu chuẩn Kaiser ta đã trích ra được 4 nhân tố chính, để biết các nhân tố này được cấu thành từ những biến (items) nào ta sử dụng phép xoay Varimax.
pc2 <- principal(myData, nfactors = 4, rotate = "varimax")
print.psych(pc2, cut = 0.4, sort = TRUE) # Loại bỏ các biến có hệ số tải (Factor Loading) bé hơn 0.4
Theo kết quả trên ta thấy với nhân tố thứ 3 (RC3), các biến cấu thành nhân tố này là Q06, Q18, Q13,Q07,Q14, Q10, Q15. Đối chiếu với nội dung các câu hỏi này trong bảng hỏi thì phần lớn các câu hỏi tập trung vào kiến thức về máy tính (Computer), vì vậy có thể đặt tên cho nhân tố thứ 3 này là “Kiến thức máy tính”. Tương tự, để đặt tên cho các nhân tố còn lại ta phải dựa vào nội dung các biến cấu thành nhân tố được rút ra. Chú ý: Nếu có một biến (câu hỏi) thuộc nhiều nhân tố thì ta đưa vào nhân tố có hệ số tải (Factor loading) lớn hơn. Chẳng hạn như trong ví dụ trên, biến Q12 vừa thuộc nhân tố thứ 3 và nhân tố thứ 1, nhưng do hệ số tải của Q12 với nhân tố thứ 1 lớn hơn so với nhân tố thứ 3 (0.52>0.47) nên biến Q12 thuộc về nhân tố thứ 1.
Bước 7. Kiểm định Cronbach Alpha cho thang đo
Để kiểm tra thang đo nhân tố được rút ra được tạo thành từ các biến có phù hợp hay không ta sử dụng kiểm định Cronbach Alpha. Chẳng hạn để kiểm định xem nhân tố thứ 3 được đặt tên là “Kiến thức máy tính” được cấu thành từ 7 biến (câu hỏi) Q06, Q18, Q13,Q07,Q14, Q10, Q15 có phù hợp không, ta sử dụng lệnh sau
psych::alpha(myData[, c(06, 18, 13, 07, 14, 10, 15)])
Một thang đo được xem là hợp lý nếu giá trị Cronbach Alpha > 0.7. Trong ví dụ này giá trị Cronbach Alpha là 0.82 nên ta có thể nói rằng thang đo “kiến thức máy tính” được cấu thành từ 7 biến (items) Q06, Q18, Q13,Q07,Q14, Q10, Q15 là hợp lý. Tương tự, thực hiện kiểm định thang đo cho 3 nhân tố còn lại.