Penelitian ini bertujuan menganalisis pengaruh Faktor Sosial Ekonomi dan Aktivitas Belajar terhadap Prestasi Akademik mahasiswa menggunakan pendekatan Confirmatory Factor Analysis (CFA) dan Structural Equation Modeling (SEM). Analisis dilakukan untuk mengetahui hubungan antar konstruk laten serta menguji apakah variabel-variabel yang digunakan mampu merepresentasikan konstruk penelitian secara valid.

Dataset yang digunakan adalah Student Performance & Behavior Dataset dari platform Kaggle yang berisi sekitar 5.000 data mahasiswa. Dataset ini dipilih karena memiliki variabel yang relevan dengan faktor sosial ekonomi, aktivitas belajar, dan prestasi akademik sehingga sesuai untuk dianalisis menggunakan metode CFA dan SEM.

Kerangka Konstruk:


Import Library

library(psych)
library(car)
## Warning: package 'car' was built under R version 4.5.3
## Loading required package: carData
## Warning: package 'carData' was built under R version 4.5.3
## 
## Attaching package: 'car'
## The following object is masked from 'package:psych':
## 
##     logit
library(lavaan)
## Warning: package 'lavaan' was built under R version 4.5.3
## This is lavaan 0.6-21
## lavaan is FREE software! Please report any bugs.
## 
## Attaching package: 'lavaan'
## The following object is masked from 'package:psych':
## 
##     cor2cov
library(semPlot)
## Warning: package 'semPlot' was built under R version 4.5.3
library(corrplot)
## corrplot 0.95 loaded
library(ggplot2)
## 
## Attaching package: 'ggplot2'
## The following objects are masked from 'package:psych':
## 
##     %+%, alpha
library(dplyr)
## Warning: package 'dplyr' was built under R version 4.5.3
## 
## Attaching package: 'dplyr'
## The following object is masked from 'package:car':
## 
##     recode
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union

Import Dataset

data <- read.csv("C:/Users/LEGION/OneDrive/Documents/Students Performance Dataset.csv", header = TRUE)

head(data)
##   Student_ID First_Name Last_Name                   Email Gender Age
## 1      S1000       Omar  Williams student0@university.com Female  22
## 2      S1001      Maria     Brown student1@university.com   Male  18
## 3      S1002      Ahmed     Jones student2@university.com   Male  24
## 4      S1003       Omar  Williams student3@university.com Female  24
## 5      S1004       John     Smith student4@university.com Female  23
## 6      S1005       Liam     Brown student5@university.com   Male  21
##    Department Attendance.... Midterm_Score Final_Score Assignments_Avg
## 1 Mathematics          97.36         40.61       59.61           73.69
## 2    Business          97.71         57.27       74.00           74.23
## 3 Engineering          99.52         41.84       63.85           85.85
## 4 Engineering          90.38         45.65       44.44           68.10
## 5          CS          59.41         53.13       61.77           67.66
## 6 Mathematics          60.60         70.21       64.48           87.85
##   Quizzes_Avg Participation_Score Projects_Score Total_Score Grade
## 1       53.17                73.4          62.84     59.8865     F
## 2       98.23                88.0          98.23     81.9170     B
## 3       50.00                 4.7          91.22     67.7170     D
## 4       66.27                 4.2          55.48     51.6535     F
## 5       83.98                64.3          87.43     71.4030     C
## 6       52.26                54.8          67.65     68.0900     D
##   Study_Hours_per_Week Extracurricular_Activities Internet_Access_at_Home
## 1                 10.3                        Yes                      No
## 2                 27.1                         No                      No
## 3                 12.4                        Yes                      No
## 4                 25.5                         No                     Yes
## 5                 13.3                        Yes                      No
## 6                 25.3                        Yes                      No
##   Parent_Education_Level Family_Income_Level Stress_Level..1.10.
## 1               Master's              Medium                   1
## 2            High School                 Low                   4
## 3            High School                 Low                   9
## 4            High School                 Low                   8
## 5               Master's              Medium                   6
## 6                   None              Medium                   6
##   Sleep_Hours_per_Night
## 1                   5.9
## 2                   4.3
## 3                   6.1
## 4                   4.9
## 5                   4.5
## 6                   5.6

Dataset ini memiliki 23 kolom variabel yang berisi informasi identitas mahasiswa, data akademik, serta faktor sosial dan aktivitas belajar. Output head(data) menampilkan 6 baris pertama dari total data yang digunakan. Tipe data yang terdeteksi terdiri atas untuk data teks atau kategori dan untuk data numerik bulat seperti umur.

Data Understanding

Dimensi Dataset

dim(data)
## [1] 5000   23

Struktur Dataset

str(data)
## 'data.frame':    5000 obs. of  23 variables:
##  $ Student_ID                : chr  "S1000" "S1001" "S1002" "S1003" ...
##  $ First_Name                : chr  "Omar" "Maria" "Ahmed" "Omar" ...
##  $ Last_Name                 : chr  "Williams" "Brown" "Jones" "Williams" ...
##  $ Email                     : chr  "student0@university.com" "student1@university.com" "student2@university.com" "student3@university.com" ...
##  $ Gender                    : chr  "Female" "Male" "Male" "Female" ...
##  $ Age                       : int  22 18 24 24 23 21 24 19 21 22 ...
##  $ Department                : chr  "Mathematics" "Business" "Engineering" "Engineering" ...
##  $ Attendance....            : num  97.4 97.7 99.5 90.4 59.4 ...
##  $ Midterm_Score             : num  40.6 57.3 41.8 45.6 53.1 ...
##  $ Final_Score               : num  59.6 74 63.9 44.4 61.8 ...
##  $ Assignments_Avg           : num  73.7 74.2 85.8 68.1 67.7 ...
##  $ Quizzes_Avg               : num  53.2 98.2 50 66.3 84 ...
##  $ Participation_Score       : num  73.4 88 4.7 4.2 64.3 54.8 15.5 54.8 97.4 63.1 ...
##  $ Projects_Score            : num  62.8 98.2 91.2 55.5 87.4 ...
##  $ Total_Score               : num  59.9 81.9 67.7 51.7 71.4 ...
##  $ Grade                     : chr  "F" "B" "D" "F" ...
##  $ Study_Hours_per_Week      : num  10.3 27.1 12.4 25.5 13.3 25.3 22.1 16.7 18.1 9.4 ...
##  $ Extracurricular_Activities: chr  "Yes" "No" "Yes" "No" ...
##  $ Internet_Access_at_Home   : chr  "No" "No" "No" "Yes" ...
##  $ Parent_Education_Level    : chr  "Master's" "High School" "High School" "High School" ...
##  $ Family_Income_Level       : chr  "Medium" "Low" "Low" "Low" ...
##  $ Stress_Level..1.10.       : int  1 4 9 8 6 6 2 5 9 8 ...
##  $ Sleep_Hours_per_Night     : num  5.9 4.3 6.1 4.9 4.5 5.6 4 7.8 4.8 7.1 ...

Output dim(data) menunjukkan dataset memiliki 5.000 baris dan 23 kolom. Output str(data) menunjukkan tipe data variabel terdiri atas chr, num, dan int. Variabel chr berisi data teks atau kategori, sedangkan num dan int berisi data numerik.

Statistik Deskriptif Awal

summary(data)
##   Student_ID         First_Name         Last_Name            Email          
##  Length:5000        Length:5000        Length:5000        Length:5000       
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
##                                                                             
##                                                                             
##                                                                             
##     Gender               Age         Department        Attendance....  
##  Length:5000        Min.   :18.00   Length:5000        Min.   : 50.01  
##  Class :character   1st Qu.:19.00   Class :character   1st Qu.: 62.95  
##  Mode  :character   Median :21.00   Mode  :character   Median : 75.67  
##                     Mean   :21.05                      Mean   : 75.36  
##                     3rd Qu.:23.00                      3rd Qu.: 87.86  
##                     Max.   :24.00                      Max.   :100.00  
##  Midterm_Score    Final_Score    Assignments_Avg  Quizzes_Avg   
##  Min.   :40.00   Min.   :40.01   Min.   :50.00   Min.   :50.00  
##  1st Qu.:55.71   1st Qu.:54.70   1st Qu.:62.34   1st Qu.:62.36  
##  Median :70.86   Median :69.48   Median :75.09   Median :74.91  
##  Mean   :70.70   Mean   :69.55   Mean   :74.96   Mean   :74.84  
##  3rd Qu.:85.76   3rd Qu.:83.92   3rd Qu.:87.35   3rd Qu.:87.29  
##  Max.   :99.99   Max.   :99.98   Max.   :99.99   Max.   :99.99  
##  Participation_Score Projects_Score    Total_Score       Grade          
##  Min.   :  0.00      Min.   : 50.00   Min.   :50.60   Length:5000       
##  1st Qu.: 25.07      1st Qu.: 61.97   1st Qu.:66.53   Class :character  
##  Median : 49.60      Median : 74.54   Median :71.70   Mode  :character  
##  Mean   : 49.96      Mean   : 74.78   Mean   :71.65                     
##  3rd Qu.: 75.50      3rd Qu.: 87.63   3rd Qu.:76.71                     
##  Max.   :100.00      Max.   :100.00   Max.   :95.09                     
##  Study_Hours_per_Week Extracurricular_Activities Internet_Access_at_Home
##  Min.   : 5.00        Length:5000                Length:5000            
##  1st Qu.:11.50        Class :character           Class :character       
##  Median :17.40        Mode  :character           Mode  :character       
##  Mean   :17.52                                                          
##  3rd Qu.:23.70                                                          
##  Max.   :30.00                                                          
##  Parent_Education_Level Family_Income_Level Stress_Level..1.10.
##  Length:5000            Length:5000         Min.   : 1.000     
##  Class :character       Class :character    1st Qu.: 3.000     
##  Mode  :character       Mode  :character    Median : 6.000     
##                                             Mean   : 5.507     
##                                             3rd Qu.: 8.000     
##                                             Max.   :10.000     
##  Sleep_Hours_per_Night
##  Min.   :4.000        
##  1st Qu.:5.300        
##  Median :6.500        
##  Mean   :6.514        
##  3rd Qu.:7.800        
##  Max.   :9.000

Output summary(data) menunjukkan sebagian besar variabel numerik memiliki sebaran data yang cukup stabil dengan rata-rata berada pada rentang menengah hingga tinggi. Usia mahasiswa berada pada rentang 18–24 tahun dengan rata-rata 21 tahun, sedangkan rata-rata kehadiran mencapai 75.36% dan jam belajar sekitar 17.52 jam per minggu. Nilai akademik seperti Midterm_Score, Final_Score, Assignments_Avg, dan Total_Score juga berada pada rentang cukup baik dengan rata-rata nilai akhir sebesar 71.65.

Cek Missing Value

sum(is.na(data))
## [1] 0
colSums(is.na(data))
##                 Student_ID                 First_Name 
##                          0                          0 
##                  Last_Name                      Email 
##                          0                          0 
##                     Gender                        Age 
##                          0                          0 
##                 Department             Attendance.... 
##                          0                          0 
##              Midterm_Score                Final_Score 
##                          0                          0 
##            Assignments_Avg                Quizzes_Avg 
##                          0                          0 
##        Participation_Score             Projects_Score 
##                          0                          0 
##                Total_Score                      Grade 
##                          0                          0 
##       Study_Hours_per_Week Extracurricular_Activities 
##                          0                          0 
##    Internet_Access_at_Home     Parent_Education_Level 
##                          0                          0 
##        Family_Income_Level        Stress_Level..1.10. 
##                          0                          0 
##      Sleep_Hours_per_Night 
##                          0

Cek Data Duplikat

sum(duplicated(data))
## [1] 0

Data Preprocessing

Menghapus Variabel yang Tidak Digunakan

data_clean <- data %>%
  select(
    Gender,
    Age,
    Department,
    Attendance....,
    Midterm_Score,
    Final_Score,
    Assignments_Avg,
    Quizzes_Avg,
    Participation_Score,
    Projects_Score,
    Total_Score,
    Grade,
    Study_Hours_per_Week,
    Extracurricular_Activities,
    Internet_Access_at_Home,
    Parent_Education_Level,
    Family_Income_Level,
    Stress_Level..1.10.,
    Sleep_Hours_per_Night
  )

head(data_clean)
##   Gender Age  Department Attendance.... Midterm_Score Final_Score
## 1 Female  22 Mathematics          97.36         40.61       59.61
## 2   Male  18    Business          97.71         57.27       74.00
## 3   Male  24 Engineering          99.52         41.84       63.85
## 4 Female  24 Engineering          90.38         45.65       44.44
## 5 Female  23          CS          59.41         53.13       61.77
## 6   Male  21 Mathematics          60.60         70.21       64.48
##   Assignments_Avg Quizzes_Avg Participation_Score Projects_Score Total_Score
## 1           73.69       53.17                73.4          62.84     59.8865
## 2           74.23       98.23                88.0          98.23     81.9170
## 3           85.85       50.00                 4.7          91.22     67.7170
## 4           68.10       66.27                 4.2          55.48     51.6535
## 5           67.66       83.98                64.3          87.43     71.4030
## 6           87.85       52.26                54.8          67.65     68.0900
##   Grade Study_Hours_per_Week Extracurricular_Activities Internet_Access_at_Home
## 1     F                 10.3                        Yes                      No
## 2     B                 27.1                         No                      No
## 3     D                 12.4                        Yes                      No
## 4     F                 25.5                         No                     Yes
## 5     C                 13.3                        Yes                      No
## 6     D                 25.3                        Yes                      No
##   Parent_Education_Level Family_Income_Level Stress_Level..1.10.
## 1               Master's              Medium                   1
## 2            High School                 Low                   4
## 3            High School                 Low                   9
## 4            High School                 Low                   8
## 5               Master's              Medium                   6
## 6                   None              Medium                   6
##   Sleep_Hours_per_Night
## 1                   5.9
## 2                   4.3
## 3                   6.1
## 4                   4.9
## 5                   4.5
## 6                   5.6

Konversi Variabel Kategorik ke Numerik

data_numeric <- data_clean

for(col in colnames(data_numeric)){
  
  if(!is.numeric(data_numeric[[col]])){
    
    data_numeric[[col]] <- as.numeric(as.factor(data_numeric[[col]]))
  }
}

str(data_numeric)
## 'data.frame':    5000 obs. of  19 variables:
##  $ Gender                    : num  1 2 2 1 1 2 2 2 1 1 ...
##  $ Age                       : int  22 18 24 24 23 21 24 19 21 22 ...
##  $ Department                : num  4 1 3 3 2 4 1 3 2 1 ...
##  $ Attendance....            : num  97.4 97.7 99.5 90.4 59.4 ...
##  $ Midterm_Score             : num  40.6 57.3 41.8 45.6 53.1 ...
##  $ Final_Score               : num  59.6 74 63.9 44.4 61.8 ...
##  $ Assignments_Avg           : num  73.7 74.2 85.8 68.1 67.7 ...
##  $ Quizzes_Avg               : num  53.2 98.2 50 66.3 84 ...
##  $ Participation_Score       : num  73.4 88 4.7 4.2 64.3 54.8 15.5 54.8 97.4 63.1 ...
##  $ Projects_Score            : num  62.8 98.2 91.2 55.5 87.4 ...
##  $ Total_Score               : num  59.9 81.9 67.7 51.7 71.4 ...
##  $ Grade                     : num  5 2 4 5 3 4 2 3 4 2 ...
##  $ Study_Hours_per_Week      : num  10.3 27.1 12.4 25.5 13.3 25.3 22.1 16.7 18.1 9.4 ...
##  $ Extracurricular_Activities: num  2 1 2 1 2 2 2 2 1 2 ...
##  $ Internet_Access_at_Home   : num  1 1 1 2 1 1 1 2 2 1 ...
##  $ Parent_Education_Level    : num  3 2 2 2 3 4 1 4 5 4 ...
##  $ Family_Income_Level       : num  3 2 2 2 3 3 1 2 1 1 ...
##  $ Stress_Level..1.10.       : int  1 4 9 8 6 6 2 5 9 8 ...
##  $ Sleep_Hours_per_Night     : num  5.9 4.3 6.1 4.9 4.5 5.6 4 7.8 4.8 7.1 ...

Output preprocessing menunjukkan jumlah kolom berkurang dari 23 menjadi 19 setelah variabel identitas seperti Student_ID, First_Name, Last_Name, dan Email dihapus. Selanjutnya, seluruh variabel kategorik berhasil dikonversi menjadi numerik menggunakan as.factor() dan as.numeric() sehingga data dapat digunakan dalam analisis CFA dan SEM.

Exploratory Data Analysis (EDA)

Statistik Deskriptif Setelah Preprocessing

summary(data_numeric)
##      Gender          Age          Department    Attendance....  
##  Min.   :1.00   Min.   :18.00   Min.   :1.000   Min.   : 50.01  
##  1st Qu.:1.00   1st Qu.:19.00   1st Qu.:1.000   1st Qu.: 62.95  
##  Median :2.00   Median :21.00   Median :2.000   Median : 75.67  
##  Mean   :1.51   Mean   :21.05   Mean   :2.491   Mean   : 75.36  
##  3rd Qu.:2.00   3rd Qu.:23.00   3rd Qu.:3.000   3rd Qu.: 87.86  
##  Max.   :2.00   Max.   :24.00   Max.   :4.000   Max.   :100.00  
##  Midterm_Score    Final_Score    Assignments_Avg  Quizzes_Avg   
##  Min.   :40.00   Min.   :40.01   Min.   :50.00   Min.   :50.00  
##  1st Qu.:55.71   1st Qu.:54.70   1st Qu.:62.34   1st Qu.:62.36  
##  Median :70.86   Median :69.48   Median :75.09   Median :74.91  
##  Mean   :70.70   Mean   :69.55   Mean   :74.96   Mean   :74.84  
##  3rd Qu.:85.76   3rd Qu.:83.92   3rd Qu.:87.35   3rd Qu.:87.29  
##  Max.   :99.99   Max.   :99.98   Max.   :99.99   Max.   :99.99  
##  Participation_Score Projects_Score    Total_Score        Grade     
##  Min.   :  0.00      Min.   : 50.00   Min.   :50.60   Min.   :1.00  
##  1st Qu.: 25.07      1st Qu.: 61.97   1st Qu.:66.53   1st Qu.:3.00  
##  Median : 49.60      Median : 74.54   Median :71.70   Median :3.00  
##  Mean   : 49.96      Mean   : 74.78   Mean   :71.65   Mean   :3.33  
##  3rd Qu.: 75.50      3rd Qu.: 87.63   3rd Qu.:76.71   3rd Qu.:4.00  
##  Max.   :100.00      Max.   :100.00   Max.   :95.09   Max.   :5.00  
##  Study_Hours_per_Week Extracurricular_Activities Internet_Access_at_Home
##  Min.   : 5.00        Min.   :1.000              Min.   :1.000          
##  1st Qu.:11.50        1st Qu.:1.000              1st Qu.:1.000          
##  Median :17.40        Median :2.000              Median :2.000          
##  Mean   :17.52        Mean   :1.502              Mean   :1.504          
##  3rd Qu.:23.70        3rd Qu.:2.000              3rd Qu.:2.000          
##  Max.   :30.00        Max.   :2.000              Max.   :2.000          
##  Parent_Education_Level Family_Income_Level Stress_Level..1.10.
##  Min.   :1.000          Min.   :1.000       Min.   : 1.000     
##  1st Qu.:2.000          1st Qu.:1.000       1st Qu.: 3.000     
##  Median :3.000          Median :2.000       Median : 6.000     
##  Mean   :3.013          Mean   :2.007       Mean   : 5.507     
##  3rd Qu.:4.000          3rd Qu.:3.000       3rd Qu.: 8.000     
##  Max.   :5.000          Max.   :3.000       Max.   :10.000     
##  Sleep_Hours_per_Night
##  Min.   :4.000        
##  1st Qu.:5.300        
##  Median :6.500        
##  Mean   :6.514        
##  3rd Qu.:7.800        
##  Max.   :9.000
describe(data_numeric)
##                            vars    n  mean    sd median trimmed   mad   min
## Gender                        1 5000  1.51  0.50   2.00    1.51  0.00  1.00
## Age                           2 5000 21.05  1.99  21.00   21.06  2.97 18.00
## Department                    3 5000  2.49  1.12   2.00    2.49  1.48  1.00
## Attendance....                4 5000 75.36 14.39  75.67   75.44 18.37 50.01
## Midterm_Score                 5 5000 70.70 17.44  70.86   70.83 22.19 40.00
## Final_Score                   6 5000 69.55 17.11  69.48   69.45 21.56 40.01
## Assignments_Avg               7 5000 74.96 14.40  75.09   74.94 18.47 50.00
## Quizzes_Avg                   8 5000 74.84 14.42  74.90   74.81 18.42 50.00
## Participation_Score           9 5000 49.96 28.99  49.60   49.93 37.36  0.00
## Projects_Score               10 5000 74.78 14.54  74.54   74.73 19.04 50.00
## Total_Score                  11 5000 71.65  7.23  71.70   71.65  7.52 50.60
## Grade                        12 5000  3.33  0.78   3.00    3.35  1.48  1.00
## Study_Hours_per_Week         13 5000 17.52  7.19  17.40   17.53  9.04  5.00
## Extracurricular_Activities   14 5000  1.50  0.50   2.00    1.50  0.00  1.00
## Internet_Access_at_Home      15 5000  1.50  0.50   2.00    1.50  0.00  1.00
## Parent_Education_Level       16 5000  3.01  1.42   3.00    3.02  1.48  1.00
## Family_Income_Level          17 5000  2.01  0.81   2.00    2.01  1.48  1.00
## Stress_Level..1.10.          18 5000  5.51  2.89   6.00    5.51  4.45  1.00
## Sleep_Hours_per_Night        19 5000  6.51  1.45   6.50    6.52  1.93  4.00
##                               max  range  skew kurtosis   se
## Gender                       2.00   1.00 -0.04    -2.00 0.01
## Age                         24.00   6.00 -0.04    -1.24 0.03
## Department                   4.00   3.00  0.00    -1.36 0.02
## Attendance....             100.00  49.99 -0.04    -1.19 0.20
## Midterm_Score               99.99  59.99 -0.05    -1.20 0.25
## Final_Score                 99.98  59.97  0.03    -1.18 0.24
## Assignments_Avg             99.99  49.99  0.01    -1.20 0.20
## Quizzes_Avg                 99.99  49.99  0.01    -1.20 0.20
## Participation_Score        100.00 100.00  0.01    -1.21 0.41
## Projects_Score             100.00  50.00  0.03    -1.24 0.21
## Total_Score                 95.09  44.49  0.00    -0.36 0.10
## Grade                        5.00   4.00  0.02    -0.28 0.01
## Study_Hours_per_Week        30.00  25.00  0.01    -1.19 0.10
## Extracurricular_Activities   2.00   1.00 -0.01    -2.00 0.01
## Internet_Access_at_Home      2.00   1.00 -0.02    -2.00 0.01
## Parent_Education_Level       5.00   4.00 -0.03    -1.31 0.02
## Family_Income_Level          3.00   2.00 -0.01    -1.49 0.01
## Stress_Level..1.10.         10.00   9.00 -0.01    -1.23 0.04
## Sleep_Hours_per_Night        9.00   5.00 -0.01    -1.21 0.02

Output summary() dan describe() menunjukkan distribusi data cukup stabil setelah preprocessing. Variabel akademik seperti Midterm_Score dan Final_Score memiliki rata-rata sekitar 70 dengan standar deviasi sekitar 17, sedangkan Assignments_Avg dan Projects_Score memiliki rata-rata sekitar 74 dengan standar deviasi sekitar 14. Selain itu, nilai mean dan trimmed mean yang hampir sama, seperti pada Midterm_Score (70.70 dan 70.83), menunjukkan data relatif simetris dan minim outlier.

Visualisasi Histogram

options(repr.plot.width = 16, repr.plot.height = 12)

par(mfrow = c(4,5), mar = c(3,3,2,1))

for(col in colnames(data_numeric)){
  
  hist(
    data_numeric[[col]],
    main = col,
    col = "lightblue",
    border = "black",
    xlab = ""
  )
}

par(mfrow = c(1,1))

Hasil histogram menunjukkan sebagian besar variabel numerik memiliki distribusi yang cukup merata, sedangkan Total_Score membentuk pola mendekati distribusi normal dengan pusat data pada rentang nilai sekitar 70–72. Variabel seperti Midterm_Score, Final_Score, Assignments_Avg, dan Study_Hours_per_Week menunjukkan sebaran data yang relatif stabil tanpa penumpukan ekstrem pada nilai tertentu.

Sementara itu, variabel kategorik hasil label encoding seperti Gender, Internet_Access_at_Home, dan Extracurricular_Activities membentuk pola batang diskrit sesuai jumlah kategorinya. Distribusi pada variabel tersebut terlihat cukup seimbang antar kategori sehingga tidak menunjukkan dominasi kelompok tertentu dalam dataset.

Visualisasi Korelasi

num_data <- data_numeric |> 
  select(where(is.numeric)) |> 
  na.omit()

cor_mat <- cor(num_data, use = "complete.obs")

corrplot(
  cor_mat,
  method = "color",
  type = "upper",
  col = colorRampPalette(c("#D73027", "white", "#1A6FBF"))(200),
  
  addCoef.col = "black",
  number.cex = 0.42,
  number.digits = 1,
  
  tl.cex = 0.6,
  tl.srt = 45,
  tl.col = "black",
  
  outline = TRUE,
  
  title = "Matriks Korelasi Variabel Numerik",
  mar = c(0,0,2,0)
)

Hasil matriks korelasi menunjukkan hubungan paling kuat terjadi pada variabel akademik, terutama antara Total_Score dengan Projects_Score dan Final_Score yang memiliki korelasi sekitar r = 0.6. Korelasi moderat juga terlihat pada Midterm_Score dan Assignments_Avg terhadap Total_Score dengan nilai sekitar r = 0.3.

Selain itu, Grade memiliki korelasi negatif sangat kuat terhadap Total_Score sebesar r = -0.9 karena hasil label encoding membuat nilai grade semakin kecil ketika prestasi semakin tinggi. Sementara itu, sebagian besar variabel non-akademik seperti Gender, Age, Study_Hours_per_Week, dan Stress_Level menunjukkan korelasi mendekati 0, sehingga hubungan linear antar variabel tersebut sangat lemah.

Normalisasi Data Z-Score

data_z <- as.data.frame(scale(data_numeric))

head(data_z)
##       Gender         Age Department Attendance.... Midterm_Score Final_Score
## 1 -1.0205103  0.47824233  1.3522343       1.528824    -1.7258181  -0.5807794
## 2  0.9797059 -1.53202386 -1.3364607       1.553141    -0.7703415   0.2602986
## 3  0.9797059  1.48337542  0.4560027       1.678900    -1.6552757  -0.3329565
## 4 -1.0205103  1.48337542  0.4560027       1.043856    -1.4367663  -1.4674475
## 5 -1.0205103  0.98080887 -0.4402290      -1.107927    -1.0077768  -0.4545300
## 6  0.9797059 -0.02432422  1.3522343      -1.025246    -0.0282126  -0.2961338
##   Assignments_Avg Quizzes_Avg Participation_Score Projects_Score Total_Score
## 1     -0.08791271  -1.5021106           0.8084324     -0.8212555 -1.62730823
## 2     -0.05042388   1.6218825           1.3120580      1.6123131  1.41974616
## 3      0.75628039  -1.7218855          -1.5613679      1.1302754 -0.54426611
## 4     -0.47599161  -0.5938924          -1.5786154     -1.3273607 -2.76602042
## 5     -0.50653808   0.6339353           0.4945287      0.8696587 -0.03445279
## 6      0.89512793  -1.5652005           0.1668270     -0.4904992 -0.49267621
##        Grade Study_Hours_per_Week Extracurricular_Activities
## 1  2.1438561           -1.0039073                  0.9951119
## 2 -1.7064602            1.3316855                 -1.0047111
## 3  0.8604174           -0.7119582                  0.9951119
## 4  2.1438561            1.1092481                 -1.0047111
## 5 -0.4230214           -0.5868372                  0.9951119
## 6  0.8604174            1.0814434                  0.9951119
##   Internet_Access_at_Home Parent_Education_Level Family_Income_Level
## 1              -1.0079314           -0.009288799         1.219821146
## 2              -1.0079314           -0.712985696        -0.008598941
## 3              -1.0079314           -0.712985696        -0.008598941
## 4               0.9919325           -0.712985696        -0.008598941
## 5              -1.0079314           -0.009288799         1.219821146
## 6              -1.0079314            0.694408098         1.219821146
##   Stress_Level..1.10. Sleep_Hours_per_Night
## 1          -1.5613885            -0.4248645
## 2          -0.5221256            -1.5312466
## 3           1.2099791            -0.2865668
## 4           0.8635581            -1.1163534
## 5           0.1707162            -1.3929489
## 6           0.1707162            -0.6323112

Output normalisasi Z-Score menunjukkan seluruh variabel berhasil distandardisasi sehingga memiliki mean = 0 dan sd = 1. Nilai positif menunjukkan data di atas rata-rata, sedangkan nilai negatif berada di bawah rata-rata. Standardisasi ini membuat seluruh variabel memiliki skala yang sama sehingga analisis CFA dan SEM menjadi lebih stabil.

Uji Asumsi

Uji Normalitas Multivariat

data_mardia <- data_z[, c(
  "Attendance....",
  "Study_Hours_per_Week",
  "Participation_Score",
  "Parent_Education_Level",
  "Family_Income_Level",
  "Internet_Access_at_Home",
  "Stress_Level..1.10.",
  "Sleep_Hours_per_Night",
  "Midterm_Score",
  "Final_Score"
)]

mardia(data_mardia)

## Call: mardia(x = data_mardia)
## 
## Mardia tests of multivariate skew and kurtosis
## Use describe(x) the to get univariate tests
## n.obs = 5000   num.vars =  10 
## b1p =  0.19   skew =  159.71  with probability  <=  1
##  small sample skew =  159.83  with probability <=  1
## b2p =  106.57   kurtosis =  -30.65  with probability <=  0

Hasil mardia() dan Q-Q Plot menunjukkan data cenderung mendekati distribusi normal karena sebagian besar titik mengikuti garis diagonal. Uji skewness memenuhi asumsi normalitas (p-value > 0.05), sedangkan kurtosis menunjukkan sedikit penyimpangan normalitas (p-value < 0.05). Namun, dengan jumlah sampel sebesar 5000, data masih layak digunakan untuk analisis CFA dan SEM.

Uji Multikolinearitas

model_vif <- lm(
  Total_Score ~
    Attendance.... +
    Study_Hours_per_Week +
    Participation_Score +
    Parent_Education_Level +
    Family_Income_Level +
    Internet_Access_at_Home +
    Stress_Level..1.10. +
    Sleep_Hours_per_Night,
  
  data = data_numeric
)

vif(model_vif)
##          Attendance....    Study_Hours_per_Week     Participation_Score 
##                1.000799                1.000806                1.001076 
##  Parent_Education_Level     Family_Income_Level Internet_Access_at_Home 
##                1.000735                1.002174                1.002225 
##     Stress_Level..1.10.   Sleep_Hours_per_Night 
##                1.001266                1.000584

Hasil uji multikolinearitas menunjukkan seluruh variabel memiliki nilai VIF di sekitar 1.000–1.002. Nilai tersebut jauh di bawah batas kritis 5, sehingga tidak terdapat masalah multikolinearitas antar variabel prediktor. Dengan demikian, seluruh variabel layak digunakan dalam analisis CFA dan SEM.

Uji Kecukupan Sampel (KMO)

data_kmo <- data_z[, c(
  "Parent_Education_Level",
  "Family_Income_Level",
  "Internet_Access_at_Home",
  "Attendance....",
  "Study_Hours_per_Week",
  "Participation_Score",
  "Assignments_Avg",
  "Midterm_Score",
  "Final_Score",
  "Projects_Score"
)]

cor_matrix <- cor(data_kmo)

KMO(cor_matrix)
## Kaiser-Meyer-Olkin factor adequacy
## Call: KMO(r = cor_matrix)
## Overall MSA =  0.51
## MSA for each item = 
##  Parent_Education_Level     Family_Income_Level Internet_Access_at_Home 
##                    0.50                    0.50                    0.51 
##          Attendance....    Study_Hours_per_Week     Participation_Score 
##                    0.51                    0.52                    0.51 
##         Assignments_Avg           Midterm_Score             Final_Score 
##                    0.51                    0.52                    0.50 
##          Projects_Score 
##                    0.51

Hasil uji KMO menunjukkan nilai MSA = 0.51, sehingga data masih memenuhi batas minimal untuk dilakukan analisis faktor dan CFA. Nilai MSA tiap variabel juga berada pada rentang 0.50–0.52, yang menunjukkan tingkat kecukupan sampel tergolong rendah namun masih dapat diterima.

Nilai KMO yang rendah disebabkan korelasi antar variabel cenderung lemah, sesuai hasil corrplot dan VIF sebelumnya. Meskipun demikian, data tetap dapat digunakan untuk analisis CFA dan SEM karena nilai KMO masih berada di atas batas minimum 0.50.

Rancangan Konstruk Penelitian

Konstruk X1 — Faktor Sosial Ekonomi

Diukur oleh: - Parent_Education_Level - Family_Income_Level - Internet_Access_at_Home

Konstruk X2 — Aktivitas dan Kebiasaan Belajar

Diukur oleh: - Attendance…. - Study_Hours_per_Week - Participation_Score - Assignments_Avg

Konstruk Y — Prestasi Akademik

Diukur oleh: - Midterm_Score - Final_Score - Projects_Score - Total_Score

Confirmatory Factor Analysis (CFA)

CFA Konstruk X1

model_cfa_x1 <- '
AktivitasBelajar =~
Attendance.... +
Study_Hours_per_Week +
Participation_Score +
Assignments_Avg
'

fit_x1 <- cfa(
  model_cfa_x1,
  data = data_z,
  std.lv = TRUE
)

summary(
  fit_x1,
  fit.measures = TRUE,
  standardized = TRUE
)
## lavaan 0.6-21 ended normally after 36 iterations
## 
##   Estimator                                         ML
##   Optimization method                           NLMINB
##   Number of model parameters                         8
## 
##   Number of observations                          5000
## 
## Model Test User Model:
##                                                       
##   Test statistic                                 1.113
##   Degrees of freedom                                 2
##   P-value (Chi-square)                           0.573
## 
## Model Test Baseline Model:
## 
##   Test statistic                                 4.441
##   Degrees of freedom                                 6
##   P-value                                        0.617
## 
## User Model versus Baseline Model:
## 
##   Comparative Fit Index (CFI)                    1.000
##   Tucker-Lewis Index (TLI)                      -0.707
## 
## Loglikelihood and Information Criteria:
## 
##   Loglikelihood user model (H0)             -28375.107
##   Loglikelihood unrestricted model (H1)     -28374.550
##                                                       
##   Akaike (AIC)                               56766.213
##   Bayesian (BIC)                             56818.351
##   Sample-size adjusted Bayesian (SABIC)      56792.929
## 
## Root Mean Square Error of Approximation:
## 
##   RMSEA                                          0.000
##   90 Percent confidence interval - lower         0.000
##   90 Percent confidence interval - upper         0.024
##   P-value H_0: RMSEA <= 0.050                    1.000
##   P-value H_0: RMSEA >= 0.080                    0.000
## 
## Standardized Root Mean Square Residual:
## 
##   SRMR                                           0.005
## 
## Parameter Estimates:
## 
##   Standard errors                             Standard
##   Information                                 Expected
##   Information saturated (h1) model          Structured
## 
## Latent Variables:
##                       Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##   AktivitasBelajar =~                                                      
##     Attendance....      -0.005    0.067   -0.073    0.942   -0.005   -0.005
##     Stdy_Hrs_pr_Wk      -0.090    0.080   -1.128    0.259   -0.090   -0.090
##     Participtn_Scr       0.140    0.123    1.140    0.254    0.140    0.140
##     Assignmnts_Avg       0.136    0.119    1.139    0.255    0.136    0.136
## 
## Variances:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##    .Attendance....    1.000    0.020   49.975    0.000    1.000    1.000
##    .Stdy_Hrs_pr_Wk    0.992    0.024   40.603    0.000    0.992    0.992
##    .Participtn_Scr    0.980    0.039   24.963    0.000    0.980    0.980
##    .Assignmnts_Avg    0.981    0.038   26.060    0.000    0.981    0.982
##     AktivitasBeljr    1.000                               1.000    1.000

Hasil CFA menunjukkan model memiliki nilai fit yang sangat baik dengan Chi-square p-value = 0.573, RMSEA = 0.000, SRMR = 0.005, dan CFI = 1.000. Namun, nilai TLI = -0.707 menunjukkan adanya anomali akibat korelasi antar indikator yang sangat lemah.

Seluruh indikator pada konstruk AktivitasBelajar juga tidak signifikan karena memiliki p-value > 0.05 dengan standardized loading sangat rendah, yaitu Attendance = -0.005, Study_Hours_per_Week = -0.090, Participation_Score = 0.140, dan Assignments_Avg = 0.136. Hal ini menunjukkan indikator belum mampu membentuk konstruk laten AktivitasBelajar secara valid.

Visualisasi CFA Konstruk X1

semPaths(
  object = fit_x1,
  what = "path",
  whatLabels = "std",
  style = "ram",
  layout = "tree",
  rotation = 2,
  sizeLat = 8,
  sizeMan = 7,
  edge.label.cex = 1,
  color = list(
    lat = "lightblue",
    man = "lightgreen"
  )
)

Visualisasi semPaths menunjukkan hubungan antara konstruk laten AktivitasBelajar dengan indikatornya memiliki loading factor yang sangat rendah, yaitu Assignments_Avg = 0.14, Participation_Score = 0.14, Study_Hours_per_Week = -0.09, dan Attendance = -0.00. Nilai tersebut berada jauh di bawah batas ideal CFA (≥ 0.50).

Selain itu, nilai error variance pada seluruh indikator sangat tinggi, yaitu sekitar 0.98–1.00. Hal ini menunjukkan sebagian besar varians indikator tidak dapat dijelaskan oleh konstruk laten AktivitasBelajar, sehingga model pengukuran belum valid secara konstruk.

CFA Konstruk X2

model_cfa_x2 <- '
KondisiPersonal =~
Stress_Level..1.10. +
Sleep_Hours_per_Night +
Extracurricular_Activities
'

fit_x2 <- cfa(
  model_cfa_x2,
  data = data_z,
  std.lv = TRUE
)

summary(
  fit_x2,
  fit.measures = TRUE,
  standardized = TRUE
)
## lavaan 0.6-21 ended normally after 38 iterations
## 
##   Estimator                                         ML
##   Optimization method                           NLMINB
##   Number of model parameters                         6
## 
##   Number of observations                          5000
## 
## Model Test User Model:
##                                                       
##   Test statistic                                 0.000
##   Degrees of freedom                                 0
## 
## Model Test Baseline Model:
## 
##   Test statistic                                 2.427
##   Degrees of freedom                                 3
##   P-value                                        0.489
## 
## User Model versus Baseline Model:
## 
##   Comparative Fit Index (CFI)                    1.000
##   Tucker-Lewis Index (TLI)                       1.000
## 
## Loglikelihood and Information Criteria:
## 
##   Loglikelihood user model (H0)             -21281.364
##   Loglikelihood unrestricted model (H1)     -21281.364
##                                                       
##   Akaike (AIC)                               42574.728
##   Bayesian (BIC)                             42613.832
##   Sample-size adjusted Bayesian (SABIC)      42594.766
## 
## Root Mean Square Error of Approximation:
## 
##   RMSEA                                          0.000
##   90 Percent confidence interval - lower         0.000
##   90 Percent confidence interval - upper         0.000
##   P-value H_0: RMSEA <= 0.050                       NA
##   P-value H_0: RMSEA >= 0.080                       NA
## 
## Standardized Root Mean Square Residual:
## 
##   SRMR                                           0.000
## 
## Parameter Estimates:
## 
##   Standard errors                             Standard
##   Information                                 Expected
##   Information saturated (h1) model          Structured
## 
## Latent Variables:
##                      Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##   KondisiPersonal =~                                                      
##     Strss_L..1.10.      0.153    0.167    0.914    0.360    0.153    0.153
##     Slp_Hrs_pr_Ngh      0.108    0.118    0.911    0.362    0.108    0.108
##     Extrcrrclr_Act     -0.079    0.087   -0.906    0.365   -0.079   -0.079
## 
## Variances:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##    .Strss_L..1.10.    0.977    0.054   17.971    0.000    0.977    0.977
##    .Slp_Hrs_pr_Ngh    0.988    0.032   30.773    0.000    0.988    0.988
##    .Extrcrrclr_Act    0.994    0.024   41.227    0.000    0.994    0.994
##     KondisiPersonl    1.000                               1.000    1.000

Visualisasi CFA Konstruk X2

semPaths(
  object = fit_x2,
  what = "path",
  whatLabels = "std",
  style = "ram",
  layout = "tree",
  rotation = 2,
  sizeLat = 8,
  sizeMan = 7,
  edge.label.cex = 1,
  color = list(
    lat = "lightpink",
    man = "lightyellow"
  )
)

Hasil CFA pada konstruk KondisiPersonal menunjukkan model bersifat just-identified dengan df = 0, sehingga seluruh indeks fit seperti CFI = 1.000, TLI = 1.000, RMSEA = 0.000, dan SRMR = 0.000 menjadi sempurna secara matematis.

Namun, seluruh indikator tidak signifikan karena memiliki p-value > 0.05 dengan loading factor sangat rendah, yaitu Stress_Level = 0.153, Sleep_Hours_per_Night = 0.108, dan Extracurricular_Activities = -0.079. Selain itu, error variance sangat tinggi (0.977–0.994), sehingga indikator belum mampu membentuk konstruk laten KondisiPersonal secara valid.

CFA Konstruk Y

model_cfa_y <- '
PrestasiAkademik =~
Midterm_Score +
Final_Score +
Projects_Score +
Quizzes_Avg
'

fit_y <- cfa(
  model_cfa_y,
  data = data_z,
  std.lv = TRUE
)

summary(
  fit_y,
  fit.measures = TRUE,
  standardized = TRUE
)
## lavaan 0.6-21 ended normally after 42 iterations
## 
##   Estimator                                         ML
##   Optimization method                           NLMINB
##   Number of model parameters                         8
## 
##   Number of observations                          5000
## 
## Model Test User Model:
##                                                       
##   Test statistic                                 0.357
##   Degrees of freedom                                 2
##   P-value (Chi-square)                           0.836
## 
## Model Test Baseline Model:
## 
##   Test statistic                                 4.363
##   Degrees of freedom                                 6
##   P-value                                        0.628
## 
## User Model versus Baseline Model:
## 
##   Comparative Fit Index (CFI)                    1.000
##   Tucker-Lewis Index (TLI)                      -2.011
## 
## Loglikelihood and Information Criteria:
## 
##   Loglikelihood user model (H0)             -28374.768
##   Loglikelihood unrestricted model (H1)     -28374.589
##                                                       
##   Akaike (AIC)                               56765.535
##   Bayesian (BIC)                             56817.673
##   Sample-size adjusted Bayesian (SABIC)      56792.251
## 
## Root Mean Square Error of Approximation:
## 
##   RMSEA                                          0.000
##   90 Percent confidence interval - lower         0.000
##   90 Percent confidence interval - upper         0.016
##   P-value H_0: RMSEA <= 0.050                    1.000
##   P-value H_0: RMSEA >= 0.080                    0.000
## 
## Standardized Root Mean Square Residual:
## 
##   SRMR                                           0.003
## 
## Parameter Estimates:
## 
##   Standard errors                             Standard
##   Information                                 Expected
##   Information saturated (h1) model          Structured
## 
## Latent Variables:
##                       Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##   PrestasiAkademik =~                                                      
##     Midterm_Score        0.465    1.976    0.235    0.814    0.465    0.465
##     Final_Score         -0.009    0.048   -0.189    0.850   -0.009   -0.009
##     Projects_Score      -0.052    0.221   -0.235    0.814   -0.052   -0.052
##     Quizzes_Avg         -0.030    0.130   -0.233    0.815   -0.030   -0.030
## 
## Variances:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##    .Midterm_Score     0.784    1.837    0.427    0.670    0.784    0.784
##    .Final_Score       1.000    0.020   49.955    0.000    1.000    1.000
##    .Projects_Score    0.997    0.030   32.875    0.000    0.997    0.997
##    .Quizzes_Avg       0.999    0.021   46.495    0.000    0.999    0.999
##     PrestasiAkadmk    1.000                               1.000    1.000

Visualisasi CFA Konstruk Y

semPaths(
  object = fit_y,
  what = "path",
  whatLabels = "std",
  style = "ram",
  layout = "tree",
  rotation = 2,
  sizeLat = 8,
  sizeMan = 7,
  edge.label.cex = 1,
  color = list(
    lat = "lightcoral",
    man = "lightcyan"
  )
)

Hasil CFA pada konstruk PrestasiAkademik menunjukkan seluruh indikator tidak signifikan karena memiliki p-value > 0.05. Nilai loading factor juga sangat lemah, yaitu Midterm_Score = 0.465, Final_Score = -0.009, Projects_Score = -0.052, dan Quizzes_Avg = -0.030.

Meskipun indeks fit seperti CFI = 1.000, RMSEA = 0.000, dan SRMR = 0.003 terlihat sangat baik, nilai TLI = -2.011 menunjukkan adanya anomali akibat korelasi antar indikator yang sangat rendah. Selain itu, error variance pada indikator mendekati 1.00, sehingga konstruk PrestasiAkademik belum terbentuk secara valid.

Ringkasan Fit Indeks CFA

cfa_fit <- data.frame(
  
  Konstruk = c(
    "Faktor Sosial Ekonomi",
    "Aktivitas Belajar",
    "Prestasi Akademik"
  ),
  
  CFI = c(
    fitMeasures(fit_x1, "cfi"),
    fitMeasures(fit_x2, "cfi"),
    fitMeasures(fit_y, "cfi")
  ),
  
  RMSEA = c(
    fitMeasures(fit_x1, "rmsea"),
    fitMeasures(fit_x2, "rmsea"),
    fitMeasures(fit_y, "rmsea")
  ),
  
  SRMR = c(
    fitMeasures(fit_x1, "srmr"),
    fitMeasures(fit_x2, "srmr"),
    fitMeasures(fit_y, "srmr")
  ),
  
  TLI = c(
    fitMeasures(fit_x1, "tli"),
    fitMeasures(fit_x2, "tli"),
    fitMeasures(fit_y, "tli")
  )
)

cfa_fit
##                Konstruk CFI RMSEA         SRMR        TLI
## 1 Faktor Sosial Ekonomi   1     0 4.684779e-03 -0.7067298
## 2     Aktivitas Belajar   1     0 3.508876e-09  1.0000000
## 3     Prestasi Akademik   1     0 2.667298e-03 -2.0105760

Ringkasan fit indeks CFA menunjukkan seluruh konstruk memiliki nilai CFI = 1.000 dan RMSEA = 0.000, namun hasil tersebut tidak langsung menandakan model valid. Pada konstruk Aktivitas Belajar, model bersifat just-identified (df = 0) sehingga indeks fit menjadi sempurna secara matematis.

Selain itu, nilai TLI yang negatif pada beberapa konstruk, seperti -0.707 dan -2.011, menunjukkan korelasi antar indikator sangat lemah atau hampir tidak ada. Kondisi ini menandakan indikator-indikator dalam dataset belum mampu membentuk konstruk laten secara baik sehingga validitas model CFA masih rendah.

Composite Reliability (CR)

hitung_CR <- function(fit){
  
  std <- standardizedSolution(fit)
  
  lambda <- std$est[std$op == "=~"]
  
  theta <- 1 - lambda^2
  
  CR <- sum(lambda)^2 / (sum(lambda)^2 + sum(theta))
  
  return(CR)
}

CR_x1 <- hitung_CR(fit_x1)
CR_x2 <- hitung_CR(fit_x2)
CR_y <- hitung_CR(fit_y)

cr_result <- data.frame(
  
  Konstruk = c(
    "Faktor Sosial Ekonomi",
    "Aktivitas Belajar",
    "Prestasi Akademik"
  ),
  
  Composite_Reliability = c(
    CR_x1,
    CR_x2,
    CR_y
  )
)

cr_result
##                Konstruk Composite_Reliability
## 1 Faktor Sosial Ekonomi           0.008150031
## 2     Aktivitas Belajar           0.010977931
## 3     Prestasi Akademik           0.035571209

Hasil Composite Reliability (CR) menunjukkan seluruh konstruk tidak reliabel karena memiliki nilai jauh di bawah batas ideal 0.70. Konstruk Faktor Sosial Ekonomi memiliki CR sebesar 0.0081, Aktivitas Belajar sebesar 0.0109, dan Prestasi Akademik sebesar 0.0355. Nilai CR yang sangat rendah ini disebabkan loading factor indikator yang mendekati nol serta error variance yang sangat tinggi (≈0.98–1.00), sehingga indikator gagal secara konsisten mengukur konstruk laten yang sama.

Structural Equation Modeling (SEM)

model_sem <- '

AktivitasBelajar =~
Attendance.... +
Study_Hours_per_Week +
Participation_Score +
Assignments_Avg

KondisiPersonal =~
Stress_Level..1.10. +
Sleep_Hours_per_Night +
Extracurricular_Activities

PrestasiAkademik =~
Midterm_Score +
Final_Score +
Projects_Score +
Quizzes_Avg

PrestasiAkademik ~ AktivitasBelajar + KondisiPersonal
'

fit_sem <- sem(
  model_sem,
  data = data_z,
  std.lv = TRUE
)

summary(
  fit_sem,
  fit.measures = TRUE,
  standardized = TRUE
)
## lavaan 0.6-21 ended normally after 102 iterations
## 
##   Estimator                                         ML
##   Optimization method                           NLMINB
##   Number of model parameters                        25
## 
##   Number of observations                          5000
## 
## Model Test User Model:
##                                                       
##   Test statistic                                27.278
##   Degrees of freedom                                41
##   P-value (Chi-square)                           0.951
## 
## Model Test Baseline Model:
## 
##   Test statistic                                49.440
##   Degrees of freedom                                55
##   P-value                                        0.686
## 
## User Model versus Baseline Model:
## 
##   Comparative Fit Index (CFI)                    1.000
##   Tucker-Lewis Index (TLI)                      -2.311
## 
## Loglikelihood and Information Criteria:
## 
##   Loglikelihood user model (H0)             -78025.038
##   Loglikelihood unrestricted model (H1)     -78011.399
##                                                       
##   Akaike (AIC)                              156100.075
##   Bayesian (BIC)                            156263.005
##   Sample-size adjusted Bayesian (SABIC)     156183.564
## 
## Root Mean Square Error of Approximation:
## 
##   RMSEA                                          0.000
##   90 Percent confidence interval - lower         0.000
##   90 Percent confidence interval - upper         0.000
##   P-value H_0: RMSEA <= 0.050                    1.000
##   P-value H_0: RMSEA >= 0.080                    0.000
## 
## Standardized Root Mean Square Residual:
## 
##   SRMR                                           0.009
## 
## Parameter Estimates:
## 
##   Standard errors                             Standard
##   Information                                 Expected
##   Information saturated (h1) model          Structured
## 
## Latent Variables:
##                       Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##   AktivitasBelajar =~                                                      
##     Attendance....      -0.032    0.053   -0.607    0.544   -0.032   -0.032
##     Stdy_Hrs_pr_Wk      -0.074    0.055   -1.347    0.178   -0.074   -0.074
##     Participtn_Scr       0.107    0.060    1.793    0.073    0.107    0.107
##     Assignmnts_Avg       0.174    0.085    2.062    0.039    0.174    0.175
##   KondisiPersonal =~                                                       
##     Strss_L..1.10.       0.225    0.145    1.555    0.120    0.225    0.225
##     Slp_Hrs_pr_Ngh       0.084    0.059    1.423    0.155    0.084    0.084
##     Extrcrrclr_Act      -0.038    0.052   -0.734    0.463   -0.038   -0.038
##   PrestasiAkademik =~                                                      
##     Midterm_Score        0.245    0.290    0.844    0.399    0.336    0.336
##     Final_Score         -0.010    0.028   -0.352    0.725   -0.014   -0.014
##     Projects_Score      -0.053    0.036   -1.462    0.144   -0.072   -0.072
##     Quizzes_Avg         -0.029    0.031   -0.940    0.347   -0.040   -0.040
## 
## Regressions:
##                      Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##   PrestasiAkademik ~                                                      
##     AktivitasBeljr     -0.749    1.047   -0.715    0.475   -0.547   -0.547
##     KondisiPersonl      0.665    1.006    0.662    0.508    0.485    0.485
## 
## Covariances:
##                       Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##   AktivitasBelajar ~~                                                      
##     KondisiPersonl       0.125    0.280    0.448    0.654    0.125    0.125
## 
## Variances:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##    .Attendance....    0.999    0.020   49.356    0.000    0.999    0.999
##    .Stdy_Hrs_pr_Wk    0.994    0.021   46.420    0.000    0.994    0.994
##    .Participtn_Scr    0.988    0.023   42.397    0.000    0.988    0.989
##    .Assignmnts_Avg    0.969    0.035   27.702    0.000    0.969    0.970
##    .Strss_L..1.10.    0.949    0.067   14.083    0.000    0.949    0.949
##    .Slp_Hrs_pr_Ngh    0.993    0.022   45.005    0.000    0.993    0.993
##    .Extrcrrclr_Act    0.998    0.020   49.089    0.000    0.998    0.999
##    .Midterm_Score     0.887    0.141    6.307    0.000    0.887    0.887
##    .Final_Score       1.000    0.020   49.938    0.000    1.000    1.000
##    .Projects_Score    0.995    0.021   47.169    0.000    0.995    0.995
##    .Quizzes_Avg       0.998    0.020   49.394    0.000    0.998    0.998
##     AktivitasBeljr    1.000                               1.000    1.000
##     KondisiPersonl    1.000                               1.000    1.000
##    .PrestasiAkadmk    1.000                               0.532    0.532

Hasil Full SEM menunjukkan bahwa seluruh hubungan antar konstruk tidak signifikan. Aktivitas Belajar tidak berpengaruh terhadap Prestasi Akademik (β = −0.547; p = 0.475), Kondisi Personal juga tidak berpengaruh signifikan (β = 0.485; p = 0.508), serta hubungan antar variabel eksogen tidak signifikan (r = 0.125; p = 0.654).

Meskipun indeks fit seperti CFI = 1.000 dan RMSEA = 0.000 terlihat baik, nilai TLI = −2.311 menunjukkan model sebenarnya tidak stabil. Secara keseluruhan, model SEM gagal membentuk hubungan kausal karena indikator dalam dataset cenderung tidak saling berkorelasi.

Goodness of Fit SEM

fitMeasures(
  fit_sem,
  c(
    "chisq",
    "df",
    "pvalue",
    "cfi",
    "tli",
    "rmsea",
    "srmr"
  )
)
##  chisq     df pvalue    cfi    tli  rmsea   srmr 
## 27.278 41.000  0.951  1.000 -2.311  0.000  0.009

Visualisasi SEM

semPaths(
  object = fit_sem,
  what = "path",
  whatLabels = "std",
  style = "ram",
  layout = "tree",
  rotation = 2,
  sizeLat = 8,
  sizeMan = 7,
  edge.label.cex = 1,
  label.cex = 1,
  color = list(
    lat = "lightblue",
    man = "lightgreen"
  )
)

Diagram jalur SEM menunjukkan hubungan antar konstruk laten cenderung lemah dan tidak signifikan. Kondisi Personal terhadap Prestasi Akademik memiliki koefisien 0.49 dengan p-value 0.508, sedangkan Aktivitas Belajar terhadap Prestasi Akademik memiliki koefisien −0.55 dengan p-value 0.475. Hubungan antara Kondisi Personal dan Aktivitas Belajar juga lemah dengan korelasi 0.13 dan p-value 0.654.

Loading factor indikator pada masing-masing konstruk juga rendah, seperti Midterm_Score sebesar 0.34, Assignments_Avg sebesar 0.17, dan Stress_Level sebesar 0.22. Selain itu, sebagian besar error variance berada pada kisaran 0.99–1.00, sehingga variansi indikator sebagian besar tidak dapat dijelaskan oleh konstruk laten.

Interpretasi Hasil

Interpretasi CFA

Confirmatory Factor Analysis (CFA) digunakan untuk menguji validitas dan reliabilitas indikator dalam merefleksikan konstruk laten. Hasil pengujian menunjukkan seluruh konstruk mengalami masalah validitas dan reliabilitas.

Konstruk Faktor Sosial Ekonomi (X1):

  • Konstruk Faktor Sosial Ekonomi menghasilkan nilai CFI = 1.000, RMSEA = 0.000, SRMR = 0.005, dan TLI = −0.707 yang menunjukkan model tidak stabil.

  • Seluruh indikator memiliki loading factor tidak signifikan (p > 0.05) dengan error variance sangat tinggi, yaitu 0.98–1.00.

  • Nilai Composite Reliability (CR) sebesar 0.00815 menunjukkan konstruk tidak reliabel.

Konstruk Aktivitas Belajar (X2):

  • Konstruk Aktivitas Belajar memiliki status Just-Identified (df = 0), sehingga indeks fit menjadi sempurna secara otomatis.

  • Seluruh indikator memiliki loading factor sangat rendah dan tidak signifikan (p > 0.05).

  • Nilai Composite Reliability (CR) sebesar 0.01098 menunjukkan indikator tidak konsisten dalam membentuk konstruk laten.

Konstruk Prestasi Akademik (Y):

  • Konstruk Prestasi Akademik menghasilkan nilai TLI = −2.011 yang menunjukkan model tidak stabil.

  • Seluruh indikator seperti Midterm Score, Final Score, Projects Score, dan Quizzes Avg tidak signifikan (p > 0.05) dengan error variance ≥ 0.97.

  • Nilai Composite Reliability (CR) sebesar 0.03557 menunjukkan konstruk tidak reliabel dan indikator bergerak secara independen.

Interpretasi SEM

1. Evaluasi Model Struktural:

Model SEM menghasilkan nilai CFI = 1.000, RMSEA = 0.000, dan SRMR = 0.009, namun nilai TLI = −2.311 menunjukkan model tidak stabil. Kondisi ini terjadi karena korelasi antar variabel pada dataset sangat rendah dan cenderung mendekati nol.

2. Pengujian Hubungan Kausal:

Aktivitas Belajar tidak berpengaruh signifikan terhadap Prestasi Akademik (β = −0.547; p = 0.475), sedangkan Kondisi Personal juga tidak berpengaruh signifikan terhadap Prestasi Akademik (β = 0.485; p = 0.508). Seluruh hipotesis penelitian ditolak karena p-value > 0.05.

3. Analisis Varians dan Diskusi Metodologis:

Nilai R² sebesar 0.468 menunjukkan Aktivitas Belajar dan Kondisi Personal secara statistik mampu menjelaskan 46.8% varians Prestasi Akademik. Namun, hasil ini tidak bermakna secara substantif karena konstruk laten sebelumnya terbukti tidak valid dan tidak reliabel. Rendahnya korelasi antar indikator menyebabkan model SEM berbasis kovarians tidak cocok digunakan pada dataset ini.

Kesimpulan

parameterEstimates(
  fit_sem,
  standardized = TRUE
)
##                           lhs op                        rhs    est    se      z
## 1            AktivitasBelajar =~             Attendance.... -0.032 0.053 -0.607
## 2            AktivitasBelajar =~       Study_Hours_per_Week -0.074 0.055 -1.347
## 3            AktivitasBelajar =~        Participation_Score  0.107 0.060  1.793
## 4            AktivitasBelajar =~            Assignments_Avg  0.174 0.085  2.062
## 5             KondisiPersonal =~        Stress_Level..1.10.  0.225 0.145  1.555
## 6             KondisiPersonal =~      Sleep_Hours_per_Night  0.084 0.059  1.423
## 7             KondisiPersonal =~ Extracurricular_Activities -0.038 0.052 -0.734
## 8            PrestasiAkademik =~              Midterm_Score  0.245 0.290  0.844
## 9            PrestasiAkademik =~                Final_Score -0.010 0.028 -0.352
## 10           PrestasiAkademik =~             Projects_Score -0.053 0.036 -1.462
## 11           PrestasiAkademik =~                Quizzes_Avg -0.029 0.031 -0.940
## 12           PrestasiAkademik  ~           AktivitasBelajar -0.749 1.047 -0.715
## 13           PrestasiAkademik  ~            KondisiPersonal  0.665 1.006  0.662
## 14             Attendance.... ~~             Attendance....  0.999 0.020 49.356
## 15       Study_Hours_per_Week ~~       Study_Hours_per_Week  0.994 0.021 46.420
## 16        Participation_Score ~~        Participation_Score  0.988 0.023 42.397
## 17            Assignments_Avg ~~            Assignments_Avg  0.969 0.035 27.702
## 18        Stress_Level..1.10. ~~        Stress_Level..1.10.  0.949 0.067 14.083
## 19      Sleep_Hours_per_Night ~~      Sleep_Hours_per_Night  0.993 0.022 45.005
## 20 Extracurricular_Activities ~~ Extracurricular_Activities  0.998 0.020 49.089
## 21              Midterm_Score ~~              Midterm_Score  0.887 0.141  6.307
## 22                Final_Score ~~                Final_Score  1.000 0.020 49.938
## 23             Projects_Score ~~             Projects_Score  0.995 0.021 47.169
## 24                Quizzes_Avg ~~                Quizzes_Avg  0.998 0.020 49.394
## 25           AktivitasBelajar ~~           AktivitasBelajar  1.000 0.000     NA
## 26            KondisiPersonal ~~            KondisiPersonal  1.000 0.000     NA
## 27           PrestasiAkademik ~~           PrestasiAkademik  1.000 0.000     NA
## 28           AktivitasBelajar ~~            KondisiPersonal  0.125 0.280  0.448
##    pvalue ci.lower ci.upper std.lv std.all
## 1   0.544   -0.135    0.071 -0.032  -0.032
## 2   0.178   -0.183    0.034 -0.074  -0.074
## 3   0.073   -0.010    0.224  0.107   0.107
## 4   0.039    0.009    0.340  0.174   0.175
## 5   0.120   -0.059    0.508  0.225   0.225
## 6   0.155   -0.032    0.200  0.084   0.084
## 7   0.463   -0.141    0.064 -0.038  -0.038
## 8   0.399   -0.324    0.813  0.336   0.336
## 9   0.725   -0.066    0.046 -0.014  -0.014
## 10  0.144   -0.124    0.018 -0.072  -0.072
## 11  0.347   -0.089    0.031 -0.040  -0.040
## 12  0.475   -2.802    1.304 -0.547  -0.547
## 13  0.508   -1.306    2.636  0.485   0.485
## 14  0.000    0.959    1.038  0.999   0.999
## 15  0.000    0.952    1.036  0.994   0.994
## 16  0.000    0.943    1.034  0.988   0.989
## 17  0.000    0.901    1.038  0.969   0.970
## 18  0.000    0.817    1.081  0.949   0.949
## 19  0.000    0.950    1.036  0.993   0.993
## 20  0.000    0.958    1.038  0.998   0.999
## 21  0.000    0.612    1.163  0.887   0.887
## 22  0.000    0.960    1.039  1.000   1.000
## 23  0.000    0.953    1.036  0.995   0.995
## 24  0.000    0.959    1.038  0.998   0.998
## 25     NA    1.000    1.000  1.000   1.000
## 26     NA    1.000    1.000  1.000   1.000
## 27     NA    1.000    1.000  0.532   0.532
## 28  0.654   -0.423    0.674  0.125   0.125

Hasil parameterEstimates(fit_sem, standardized = TRUE) menunjukkan bahwa model SEM secara keseluruhan tidak mampu membentuk konstruk laten yang valid maupun signifikan. Pada model pengukuran, seluruh indikator memiliki nilai loading factor yang sangat rendah, bahkan beberapa bernilai negatif, serta tidak memenuhi batas minimum validitas (≥ 0.50). Hal ini menunjukkan bahwa indikator tidak mampu merepresentasikan konstruk laten yang dibentuk secara konsisten.

Pada model struktural, hubungan antara Aktivitas Belajar dan Kondisi Personal terhadap Prestasi Akademik tidak signifikan (p > 0.05), dengan nilai standard error yang besar yang mengindikasikan estimasi yang tidak stabil. Selain itu, varians error pada hampir seluruh indikator mendekati 1.000 dan kovarians antar konstruk eksogen sangat rendah, sehingga secara keseluruhan model tidak berhasil menemukan struktur hubungan yang bermakna dalam data.