Pengantar Modul dan Karakteristik Data

Modul ini dirancang untuk melakukan analisis struktural pada data log aktivitas mahasiswa dalam platform online learning. Berbeda dengan data kuesioner psikologi yang bersifat reflektif, data operasional riil seperti ini dinilai menggunakan pendekatan SEM-PLS (Partial Least Squares) dengan spesifikasi Indikator Formatif (Composite).

Variabel yang Digunakan:

Fasilitas & Demografi (X1): Diukur melalui variabel age dan internet_speed_mbps.

#Perilaku Belajar (X2): Diukur melalui variabel study_hours_weekly, login_frequency_weekly, dan avg_session_duration_min. #Partisipasi (X3): Diukur melalui variabel assignments_submitted, forum_posts, dan quiz_attempts. #Hasil Belajar (Y): Diukur melalui variabel avg_quiz_score, engagement_score, dan final_grade.

Persiapan Environment dan Pembersihan Data (Data Preprocessing)

# 1. Mengaktifkan Library Utama
library(tidyverse)
library(seminr) 

# 2. Membaca Dataset 
data_mentah <- read.csv2("online_learning_engagement_dataset.csv", stringsAsFactors = FALSE)

# 3. Proses Transformasi Data secara Absolut
data_bersih <- data_mentah %>%
  mutate(
    age = as.numeric(age),
    internet_speed_mbps = as.numeric(internet_speed_mbps),
    study_hours_weekly = as.numeric(study_hours_weekly),
    login_frequency_weekly = as.numeric(login_frequency_weekly),
    
    # CARA ABSOLUT: Hilangkan titik, ubah ke numerik, lalu potong digit agar nilasinya logis
    avg_session_duration_min = as.numeric(gsub("\\.", "", avg_session_duration_min)),
    avg_session_duration_min = avg_session_duration_min / (10^ (nchar(as.character(avg_session_duration_min)) - 2)),
    
    video_watch_time_min = as.numeric(gsub("\\.", "", video_watch_time_min)),
    video_watch_time_min = video_watch_time_min / (10^ (nchar(as.character(video_watch_time_min)) - 2)),
    
    engagement_score = as.numeric(gsub("\\.", "", engagement_score)),
    engagement_score = engagement_score / (10^ (nchar(as.character(engagement_score)) - 2)),
    
    final_grade = as.numeric(gsub("\\.", "", final_grade)),
    final_grade = final_grade / (10^ (nchar(as.character(final_grade)) - 2)),
    
    assignments_submitted = as.numeric(assignments_submitted),
    forum_posts = as.numeric(forum_posts),
    quiz_attempts = as.numeric(quiz_attempts),
    avg_quiz_score = as.numeric(avg_quiz_score),
    attendance_rate = as.numeric(attendance_rate),
    
    dropout = as.factor(dropout)
  ) %>%
  drop_na()

# Cek hasil angka apakah sudah normal (tidak ratusan juta lagi)
head(data_bersih, 5)
##   student_id age gender   country device_type internet_speed_mbps
## 1          1  24 Female       USA      Laptop               44.70
## 2          2  37 Female   Germany      Tablet               61.10
## 3          3  46 Female Australia      Tablet               43.10
## 4          4  32   Male     India      Tablet               26.99
## 5          5  28   Male     India      Laptop               52.28
##   study_hours_weekly login_frequency_weekly avg_session_duration_min
## 1              15.92                     10                 40.05275
## 2               6.37                      8                 32.44267
## 3               6.64                      7                 43.61451
## 4              10.91                      5                 30.69726
## 5               7.41                      6                 47.40300
##   video_watch_time_min assignments_submitted forum_posts quiz_attempts
## 1             29.40998                     3           4             6
## 2             40.03977                     7          14             5
## 3             19.02397                     1          14             5
## 4             37.04516                     3           1             2
## 5             15.13413                     4           4             6
##   avg_quiz_score attendance_rate engagement_score final_grade dropout
## 1          46.69            0.93         80.46499    22.44764       0
## 2          62.65            0.59         63.12988    39.74990       1
## 3          58.42            0.43         41.43199    31.06169       1
## 4          61.21            0.65         61.25258    41.30063       0
## 5          74.92            0.55         49.79706    39.14900       1

Spesifikasi Model SEM-PLS

# 1. Spesifikasi Measurement Model (Outer Model)
model_pengukuran <- constructs(
  composite("Fasilitas_Demografi", c("age", "internet_speed_mbps")),
  composite("Perilaku_Belajar", c("study_hours_weekly", "login_frequency_weekly", "avg_session_duration_min")),
  composite("Partisipasi", c("assignments_submitted", "forum_posts", "quiz_attempts")),
  composite("Hasil_Belajar", c("avg_quiz_score", "engagement_score", "final_grade"))
)

# 2. Spesifikasi Structural Model (Inner Model)
model_struktural <- relationships(
  paths(from = "Fasilitas_Demografi", to = c("Perilaku_Belajar", "Partisipasi")),
  paths(from = c("Perilaku_Belajar", "Partisipasi"), to = "Hasil_Belajar")
)

Estimasi dan Pengujian Signifikansi (Bootstrapping)

pls_model <- estimate_pls(
  data = data_bersih,
  measurement_model = model_pengukuran,
  structural_model = model_struktural
)

# Menggunakan nboot = 5 untuk memancing bypass lock memori komputer Anda
boot_model <- bootstrap_model(
  seminr_model = pls_model,
  nboot = 5,
  cores = 1
)

summary_boot <- summary(boot_model)

# 3. Membuat Ringkasan Hasil
summary_boot <- summary(boot_model)

Evaluasi Hasil dan Interpretasi (Panduan Mahasiswa)

# 1. Uji Hubungan Struktural (Uji Jalur / Hipotesis)
# Hubungan dinyatakan Signifikan apabila nilai p-value < 0.05 (atau T Stat > 1.96).
# Menampilkan Koefisien Jalur, T-Stat, dan P-Value
summary_boot$bootstrapped_paths
##                                           Original Est. Bootstrap Mean
## Fasilitas_Demografi  ->  Perilaku_Belajar        -0.010         -0.007
## Fasilitas_Demografi  ->  Partisipasi             -0.000         -0.003
## Perilaku_Belajar  ->  Hasil_Belajar               0.690          0.689
## Partisipasi  ->  Hasil_Belajar                    0.409          0.406
##                                           Bootstrap SD T Stat. 2.5% CI 97.5% CI
## Fasilitas_Demografi  ->  Perilaku_Belajar        0.008  -1.235  -0.013    0.006
## Fasilitas_Demografi  ->  Partisipasi             0.007  -0.050  -0.010    0.005
## Perilaku_Belajar  ->  Hasil_Belajar              0.012  59.920   0.675    0.703
## Partisipasi  ->  Hasil_Belajar                   0.006  71.250   0.401    0.415
##                                           Bootstrap P Val
## Fasilitas_Demografi  ->  Perilaku_Belajar           0.400
## Fasilitas_Demografi  ->  Partisipasi                0.800
## Perilaku_Belajar  ->  Hasil_Belajar                 0.000
## Partisipasi  ->  Hasil_Belajar                      0.000
# 2. Nilai R-Square (R^2)
# Menunjukkan seberapa besar persentase varians dari variabel dependen yang mampu dijelaskan oleh variabel independennya di dalam model.
summary_boot$rSquared
## NULL

Visualisasi Model

# Plot Model Struktural SEM-PLS
plot(boot_model)