Dataset Investment yang terdapat dalam package
sandwich
digunakan untuk melakukan analisis faktor. Dataset
ini terdiri dari tujuh kolom, namun kita akan menggunakan enam kolom
untuk analisis faktor, yaitu:
#Input Data
data(Investment, package="sandwich")
Investment <- as.data.frame(Investment[,1:6])
head(Investment)
## GNP Investment Price Interest RealGNP RealInv
## 1 596.7 90.9 0.7167 3.23 832.5659 126.8313
## 2 637.7 97.4 0.7277 3.55 876.3227 133.8464
## 3 691.1 113.5 0.7436 4.04 929.3975 152.6358
## 4 756.0 125.7 0.7676 4.50 984.8880 163.7572
## 5 799.6 122.8 0.7906 4.19 1011.3838 155.3251
## 6 873.4 133.3 0.8254 5.16 1058.1536 161.4975
Terilhat bahwa variabel-variabelnya memiliki skala yang berbeda-beda, sehingga perlu di standarisasi.
zinvestment<-data.frame(scale(Investment))
head(zinvestment)
## GNP Investment Price Interest RealGNP RealInv
## 1 -1.1249182 -1.1478402 -1.0681849 -1.1527290 -1.6976136 -1.5795163
## 2 -1.0731174 -1.0958112 -1.0423975 -1.0421224 -1.4945241 -1.4017030
## 3 -1.0056499 -0.9669393 -1.0051229 -0.8727559 -1.2481860 -0.9254396
## 4 -0.9236530 -0.8692849 -0.9488595 -0.7137588 -0.9906364 -0.6435429
## 5 -0.8685673 -0.8924978 -0.8949404 -0.8209090 -0.8676606 -0.8572743
## 6 -0.7753258 -0.8084509 -0.8133584 -0.4856325 -0.6505861 -0.7008206
Terlihat bahwa, setelah proses standarisasi, seluruh variabel sudah memiliki skala yang sebanding. Selanjutnya akan diperiksa normalitas, korelasi, dan kecukupan data
#cek histogram dan kurva setiap variabel
hist(zinvestment[,1], prob=TRUE, main="X1", xlab="X1")
lines(density(zinvestment[,1]))
hist(zinvestment[,2], prob=TRUE, main="X2", xlab="X")
lines(density(zinvestment[,2]))
hist(zinvestment[,3], prob=TRUE, main="X3", xlab="X3")
lines(density(zinvestment[,3]))
hist(zinvestment[,4], prob=TRUE, main="X4", xlab="X4")
lines(density(zinvestment[,4]))
hist(zinvestment[,5], prob=TRUE, main="X5", xlab="X5")
lines(density(zinvestment[,5]))
hist(zinvestment[,6], prob=TRUE, main="X6", xlab="X6")
lines(density(zinvestment[,6]))
#normality test
library(MVN)
## Warning: package 'MVN' was built under R version 4.3.3
result <- mvn(data =zinvestment,mvnTest = "mardia")
result
## $multivariateNormality
## Test Statistic p value Result
## 1 Mardia Skewness 81.264615451692 0.0153260019439198 NO
## 2 Mardia Kurtosis -0.298396533549195 0.765400534455039 YES
## 3 MVN <NA> <NA> NO
##
## $univariateNormality
## Test Variable Statistic p value Normality
## 1 Anderson-Darling GNP 0.7245 0.0493 NO
## 2 Anderson-Darling Investment 0.9209 0.0154 NO
## 3 Anderson-Darling Price 0.7279 0.0483 NO
## 4 Anderson-Darling Interest 1.0673 0.0065 NO
## 5 Anderson-Darling RealGNP 0.3130 0.5204 YES
## 6 Anderson-Darling RealInv 0.3923 0.3449 YES
##
## $Descriptives
## n Mean Std.Dev Median Min Max 25th
## GNP 20 -4.857226e-17 1 -0.29174606 -1.124918 2.003726 -0.7986361
## Investment 20 -8.113085e-17 1 -0.27015068 -1.147840 1.925874 -0.8236594
## Price 20 2.222614e-17 1 -0.33664292 -1.068185 2.101557 -0.8337539
## Interest 20 -1.671298e-16 1 -0.30416838 -1.152729 2.369403 -0.7137588
## RealGNP 20 -3.966554e-16 1 0.04832706 -1.697614 1.464388 -0.7048547
## RealInv 20 -5.407323e-17 1 -0.12800541 -1.579516 1.766614 -0.7249998
## 75th Skew Kurtosis
## GNP 0.6224122 0.67604403 -0.9542482
## Investment 0.8438707 0.58362449 -1.2362325
## Price 0.5956306 0.70003321 -0.8708394
## Interest 0.3413253 0.99777586 -0.2452418
## RealGNP 0.8754060 -0.02656484 -1.3519458
## RealInv 0.7641314 0.29791744 -1.1619473
Berdasarkan hasil uji Mardia Skewness, data tidak berdistribusi normal karena p-value < 0.05. Hal ini menunjukkan adanya kemencengan yang signifikan pada distribusi data.
Namun, berdasarkan uji Mardia Kurtosis, tidak ada perbedaan signifikan antara distribusi data dengan distribusi normal dalam hal keruncingan, karena p-value > 0.05. Ini berarti bahwa data tidak memiliki masalah yang signifikan dalam hal kurtosis.
Secara keseluruhan, hasil ini menunjukkan bahwa data tidak berdistribusi normal, terutama terkait dengan aspek kemencengan. Meskipun demikian, tidak ditemukan masalah signifikan pada sisi kurtosis.
Bartlett’s Test digunakan untuk menguji apakah matriks kovarians dari data cukup berbeda dari matriks identitas, yang menunjukkan bahwa ada hubungan antar variabel. Uji ini menguji hipotesis nol yang menyatakan bahwa matriks kovarians adalah matriks identitas, yang berarti tidak ada hubungan antar variabel (kovarians = 0).
#Bartlett test dan KMO
library(REdaS)
## Warning: package 'REdaS' was built under R version 4.3.3
## Loading required package: grid
bart_spher(zinvestment)
## Bartlett's Test of Sphericity
##
## Call: bart_spher(x = zinvestment)
##
## X2 = 326.331
## df = 15
## p-value < 2.22e-16
Hasil Bartlett’s Test menunjukkan p-value < 2.22 × 10⁻¹⁶, yang sangat signifikan. Oleh karena itu, kita menolak H₀ dan dapat disimpulkan bahwa matriks kovarians tidak sama dengan matriks identitas, yang berarti ada hubungan signifikan antara variabel dalam data.
Tes ini mengukur seberapa kuat hubungan antar variabel dalam dataset yang digunakan untuk analisis faktor. KMO memberikan indikasi apakah data memiliki korelasi yang cukup antar variabel untuk melanjutkan analisis faktor.
KMOS(zinvestment)
##
## Kaiser-Meyer-Olkin Statistics
##
## Call: KMOS(x = zinvestment)
##
## Measures of Sampling Adequacy (MSA):
## GNP Investment Price Interest RealGNP RealInv
## 0.7831090 0.7370062 0.7156671 0.7856602 0.6989793 0.6157259
##
## KMO-Criterion: 0.720777
Nilai KMO keseluruhan yang dihitung adalah 0.720777, yang menunjukkan bahwa data memiliki kecukupan sampel yang baik untuk melakukan analisis faktor.
Selain itu, nilai MSA (Measure of Sampling Adequacy) untuk masing-masing variabel juga berada di atas 0.5, yang berarti semua variabel memiliki kecukupan sampel yang baik dan tidak ada variabel yang perlu dikeluarkan dari analisis.
#Analisis Faktor
R<-cov(zinvestment)
R
## GNP Investment Price Interest RealGNP RealInv
## GNP 1.0000000 0.9800277 0.9984821 0.9168936 0.9509425 0.8128710
## Investment 0.9800277 1.0000000 0.9692190 0.8994475 0.9627388 0.9017168
## Price 0.9984821 0.9692190 1.0000000 0.9098894 0.9415563 0.7852829
## Interest 0.9168936 0.8994475 0.9098894 1.0000000 0.8561796 0.7272522
## RealGNP 0.9509425 0.9627388 0.9415563 0.8561796 1.0000000 0.9153848
## RealInv 0.8128710 0.9017168 0.7852829 0.7272522 0.9153848 1.0000000
Matriks kovarians yang ditampilkan menunjukkan hubungan yang sangat kuat antara sebagian besar variabel dalam dataset. Variabel-variabel seperti GNP, Investment, Price, dan RealGNP memiliki korelasi yang sangat tinggi satu sama lain, yang mengindikasikan bahwa mereka cenderung bergerak seiring dan mungkin dapat dikelompokkan dalam analisis faktor. Korelasi yang tinggi ini menguatkan bahwa analisis faktor dapat efektif dalam mengidentifikasi faktor-faktor utama yang mampu menjelaskan sebagian besar variabilitas dalam data, dengan memperhitungkan keterkaitan antara variabel-variabel tersebut.
eigen<-eigen(R)
eigen
## eigen() decomposition
## $values
## [1] 5.5173791599 0.3300284791 0.1151570916 0.0361705689 0.0010496037
## [6] 0.0002150969
##
## $vectors
## [,1] [,2] [,3] [,4] [,5] [,6]
## [1,] 0.4194705 -0.22343018 0.32000450 0.13760165 0.33486088 0.73529214
## [2,] 0.4230439 0.05771685 0.07624479 0.53240938 -0.72647463 -0.02577197
## [3,] 0.4155335 -0.28516498 0.41772067 0.06975269 0.33813839 -0.67254686
## [4,] 0.3931743 -0.48686777 -0.77062786 -0.11413025 0.02673516 -0.02767562
## [5,] 0.4165632 0.21444001 0.18394897 -0.80469596 -0.31224573 0.04025371
## [6,] 0.3798674 0.76315392 -0.29931383 0.17938590 0.38412637 -0.06305315
Berdasarkan hasil analisis eigenvalues, hanya satu komponen utama yang memenuhi kriteria eigenvalue > 1, dengan nilai 5.5174. Meskipun demikian, dua faktor tetap digunakan dalam analisis untuk menjelaskan variabilitas data, karena kedua faktor ini cukup memberikan representasi yang baik terhadap data.
Investment_fac<-factanal(factors=2,covmat=R)
Investment_fac
##
## Call:
## factanal(factors = 2, covmat = R)
##
## Uniquenesses:
## GNP Investment Price Interest RealGNP RealInv
## 0.005 0.007 0.005 0.161 0.039 0.005
##
## Loadings:
## Factor1 Factor2
## GNP 0.871 0.490
## Investment 0.766 0.637
## Price 0.892 0.449
## Interest 0.812 0.424
## RealGNP 0.710 0.676
## RealInv 0.427 0.902
##
## Factor1 Factor2
## SS loadings 3.487 2.297
## Proportion Var 0.581 0.383
## Cumulative Var 0.581 0.964
##
## The degrees of freedom for the model is 4 and the fit was 3.7934
Faktor 1: Variabel GNP, Investment, Price, dan Interest memiliki loading yang tinggi, yang menunjukkan hubungan yang kuat dengan faktor ini.
Faktor 2: Variabel RealGNP dan RealInv memiliki loading yang tinggi, yang menunjukkan hubungan yang kuat dengan faktor ini.
Semua variabel dalam analisis memiliki uniquenesses yang rendah (< 0.2), yang menunjukkan bahwa sebagian besar variabilitas mereka dapat dijelaskan oleh faktor-faktor yang diekstrak.
Statistik fit untuk model analisis faktor: - Chi-square (𝜒²): 3.7934 - Derajat kebebasan (df): 4
Nilai Chi-square yang relatif kecil dan derajat kebebasan yang sesuai menunjukkan bahwa model memiliki fit yang baik, karena jumlah faktor yang digunakan cukup untuk menjelaskan variabilitas data.
data<-read.csv("D:/POLSTAT STIS/Semester 5/APG/Pertemuan 9/life_data.csv")
print(data)
## Country m0 m25 m50 m75 w0 w25 w50 w75
## 1 Algeria 63 51 30 13 67 54 34 15
## 2 Cameroon 34 29 13 5 38 32 17 6
## 3 Madagascar 38 30 17 7 38 34 20 7
## 4 Mauritius 59 42 20 6 64 46 25 8
## 5 Reunion 56 38 18 7 62 46 25 10
## 6 Seychelles 62 44 24 7 69 50 28 14
## 7 South Africa (C) 50 39 20 7 55 43 23 8
## 8 South Africa (W) 65 44 22 7 72 50 27 9
## 9 Tunisia 56 46 24 11 63 54 33 19
## 10 Canada 69 47 24 8 75 53 29 10
## 11 Costa Rica 65 48 26 9 68 50 27 10
## 12 Dominican Rep. 64 50 28 11 66 51 29 11
# Menghapus kolom non-numerik (Country)
data_numeric <- data[, sapply(data, is.numeric)]
data_numeric2 <- scale(data_numeric)
# Mengevaluasi jumlah faktor dari 1 hingga 3
sapply(1:3, function(f) factanal(data_numeric2, factors = f, method = "mle")$PVAL)
## objective objective objective
## 9.124083e-09 6.882874e-04 2.642170e-01
# Melakukan analisis faktor dengan 3 faktor
factanal_result <- factanal(data_numeric2, factors = 3, method = "mle")
print(factanal_result)
##
## Call:
## factanal(x = data_numeric2, factors = 3, method = "mle")
##
## Uniquenesses:
## m0 m25 m50 m75 w0 w25 w50 w75
## 0.005 0.020 0.030 0.028 0.005 0.005 0.010 0.065
##
## Loadings:
## Factor1 Factor2 Factor3
## m0 0.948 0.272 0.152
## m25 0.758 0.563 0.298
## m50 0.592 0.736 0.278
## m75 0.180 0.840 0.483
## w0 0.958 0.152 0.236
## w25 0.794 0.362 0.484
## w50 0.587 0.503 0.627
## w75 0.234 0.347 0.872
##
## Factor1 Factor2 Factor3
## SS loadings 3.804 2.165 1.866
## Proportion Var 0.475 0.271 0.233
## Cumulative Var 0.475 0.746 0.979
##
## Test of the hypothesis that 3 factors are sufficient.
## The chi square statistic is 8.84 on 7 degrees of freedom.
## The p-value is 0.264
#jika menggunakan input data manual
data_manual <- data.frame(
m0 = c(63, 34, 38, 59, 56, 62, 50, 65, 56, 69, 65, 64),
m25 = c(51, 29, 30, 42, 38, 44, 39, 44, 46, 47, 48, 50),
m50 = c(30, 13, 17, 20, 18, 24, 20, 22, 24, 24, 26, 28),
m75 = c(13, 5, 7, 6, 7, 7, 7, 7, 11, 8, 9, 11),
w0 = c(67, 38, 38, 64, 62, 69, 55, 72, 63, 75, 68, 66),
w25 = c(54, 32, 34, 46, 46, 50, 43, 50, 54, 53, 50, 51),
w50 = c(34, 17, 20, 25, 25, 28, 23, 27, 33, 29, 27, 29),
w75 = c(15, 6, 7, 8, 10, 14, 8, 9, 19, 10, 10, 11)
)
sapply(1:3, function(f) factanal(data_manual, factors = f, method = "mle")$PVAL)
## objective objective objective
## 9.124083e-09 6.882874e-04 2.642170e-01
factanal_result <- factanal(data_manual, factors = 3, method = "mle")
print(factanal_result)
##
## Call:
## factanal(x = data_manual, factors = 3, method = "mle")
##
## Uniquenesses:
## m0 m25 m50 m75 w0 w25 w50 w75
## 0.005 0.020 0.030 0.028 0.005 0.005 0.010 0.065
##
## Loadings:
## Factor1 Factor2 Factor3
## m0 0.948 0.272 0.152
## m25 0.758 0.563 0.298
## m50 0.592 0.736 0.278
## m75 0.180 0.840 0.483
## w0 0.958 0.152 0.236
## w25 0.794 0.362 0.484
## w50 0.587 0.503 0.627
## w75 0.234 0.347 0.872
##
## Factor1 Factor2 Factor3
## SS loadings 3.804 2.165 1.866
## Proportion Var 0.475 0.271 0.233
## Cumulative Var 0.475 0.746 0.979
##
## Test of the hypothesis that 3 factors are sufficient.
## The chi square statistic is 8.84 on 7 degrees of freedom.
## The p-value is 0.264
Interpretasi:
Terlihat bahwa faktor pertama didominasi oleh harapan hidup saat lahir bagi laki-laki dan perempuan; mungkin faktor ini bisa diberi label “ketahanan hidup saat lahir”
Yang kedua mencerminkan harapan hidup pada usia yang lebih tua, dan kita mungkin menyebutnya “ketahanan hidup di antara orang tua”.
Faktor ketiga dari rotasi varimax memiliki beban tertinggi untuk harapan hidup laki-laki berusia 50 dan 75 dan dalam nada yang sama mungkin diberi label “ketahanan hidup untuk laki-laki lanjut usia”.