Nama Aggota Kelompok:

1. Christine Aprilia Putri (24031554046)

2. Fridania Nisa Calita (24031554208)

1. Import Data

library(readr)

data <- read_csv("C:/Users/ASUS/Downloads/SMA.csv")
## Rows: 1029 Columns: 15
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## dbl (15): Q1_Gender, Q2_Living_Area, Q3_Maritial_Status, SMAQ1, SMAQ2, SMAQ3...
## 
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.

2. Pre-Processing

Cek Missing Value

print(paste("Jumlah Data Hilang (NA):", sum(is.na(data))))
## [1] "Jumlah Data Hilang (NA): 0"

Cek Data Duplikat

duplikat <- data[duplicated(data), ]
print(paste("Jumlah Baris Duplikat:", nrow(duplikat)))
## [1] "Jumlah Baris Duplikat: 34"

TanganiDuplikat

data_clean <- data[!duplicated(data), ]

Ubah ke Numerik & Buat Data Manifest

Variabel SMA_Scale_value dan SMA_Scale (Class_Lebel) tidak digunakan dalam uji KMO dan analisis faktor karena keduanya merupakan variabel turunan dari item kuesioner SMAQ1–SMAQ10. Variabel SMA_Scale_value merupakan skor total hasil penjumlahan item, sedangkan SMA_Scale (Class_Lebel) merupakan kategorisasi dari skor tersebut. Penggunaan variabel turunan bersama indikator aslinya dapat menyebabkan redundansi informasi dan meningkatkan multikolinearitas dalam matriks korelasi.

data_uji <- data_clean[, c(
  "Q1_Gender", "Q2_Living_Area", "Q3_Maritial_Status",
  "SMAQ1", "SMAQ2", "SMAQ3", "SMAQ4", "SMAQ5",
  "SMAQ6", "SMAQ7", "SMAQ8", "SMAQ9", "SMAQ10"
)]

# Memastikan semuanya bertipe numerik kontinu/ordinal
data_uji <- as.data.frame(lapply(data_uji, function(x) as.numeric(as.character(x))))

Uji Kelayakan Dataset

library(psych)
## 
## Attaching package: 'psych'
## The following objects are masked from 'package:ggplot2':
## 
##     %+%, alpha
library(car)
## Warning: package 'car' was built under R version 4.5.3
## Loading required package: carData
## 
## Attaching package: 'car'
## The following object is masked from 'package:psych':
## 
##     logit
## The following object is masked from 'package:dplyr':
## 
##     recode
## The following object is masked from 'package:purrr':
## 
##     some

KMO Test

Nilai harus > 0.50 (Sangat bagus jika > 0.70 atau > 0.80).

r_matrix <- cor(data_uji)
kmo_result <- KMO(r_matrix)
print(kmo_result)
## Kaiser-Meyer-Olkin factor adequacy
## Call: KMO(r = r_matrix)
## Overall MSA =  0.87
## MSA for each item = 
##          Q1_Gender     Q2_Living_Area Q3_Maritial_Status              SMAQ1 
##               0.41               0.67               0.77               0.86 
##              SMAQ2              SMAQ3              SMAQ4              SMAQ5 
##               0.87               0.85               0.89               0.90 
##              SMAQ6              SMAQ7              SMAQ8              SMAQ9 
##               0.90               0.84               0.87               0.88 
##             SMAQ10 
##               0.90

Delete variabel yang <0.5

data_uji <- data_uji[, !colnames(data_uji) %in% "Q1_Gender"]
r_matrix <- cor(data_uji)
kmo_result <- KMO(r_matrix)
print(kmo_result)
## Kaiser-Meyer-Olkin factor adequacy
## Call: KMO(r = r_matrix)
## Overall MSA =  0.87
## MSA for each item = 
##     Q2_Living_Area Q3_Maritial_Status              SMAQ1              SMAQ2 
##               0.80               0.79               0.86               0.87 
##              SMAQ3              SMAQ4              SMAQ5              SMAQ6 
##               0.85               0.90               0.90               0.90 
##              SMAQ7              SMAQ8              SMAQ9             SMAQ10 
##               0.84               0.87               0.88               0.90

Uji Multikolinearitas

### A. Determinan Matriks Kovarians
cov_matrix <- cov(data_uji, use = "complete.obs")
det_cov <- det(cov_matrix)
print(paste("Determinan matriks kovarians:", det_cov))
## [1] "Determinan matriks kovarians: 0.0560416147312985"
# Catatan: Nilai harus > 0 (misal 0.001 atau lebih tinggi), tidak boleh eror singular lagi.

#### B. Nilai VIF (Variance Inflation Factor)
# Di sini kita gunakan salah satu item (misal SMAQ10) hanya sebagai target tiruan
# untuk memanggil fungsi lm() guna melihat nilai VIF antar-item kuesioner lainnya
model_vif <- lm(SMAQ10 ~ Q2_Living_Area + Q3_Maritial_Status + 
                SMAQ1 + SMAQ2 + SMAQ3 + SMAQ4 + SMAQ5 + SMAQ6 + SMAQ7 + SMAQ8 + SMAQ9,
                data = data_uji)

vif_values <- vif(model_vif)
print("Nilai VIF per Indikator:")
## [1] "Nilai VIF per Indikator:"
print(vif_values)
##     Q2_Living_Area Q3_Maritial_Status              SMAQ1              SMAQ2 
##           1.002150           1.008940           1.201705           1.607028 
##              SMAQ3              SMAQ4              SMAQ5              SMAQ6 
##           1.571537           1.665361           1.288217           1.201162 
##              SMAQ7              SMAQ8              SMAQ9 
##           1.680197           2.053738           1.727158