1. Load Dataset dan Library

Pada tahap pertama, kita memuat library seminr yang didesain secara spesifik untuk mengeksekusi kerangka Partial Least Squares berbasis varians, serta fungsi komputasi statistik pelengkap psych.

library(seminr)
library(psych)

dataset_survey <- read.csv("Raw_Data.csv", header = TRUE, sep = ",")

2. Preprocessing Data

Langkah ini bertujuan untuk mengecek struktur dan tipe data, mengidentifikasi missing value, dan mengevaluasi distribusi univariat kuesioner sebelum analisis lebih lanjut.

str(dataset_survey)
## 'data.frame':    528 obs. of  23 variables:
##  $ EC1 : int  4 4 4 5 4 5 5 4 5 4 ...
##  $ EC2 : int  4 3 5 5 4 5 5 4 5 4 ...
##  $ EC3 : int  5 5 5 5 4 5 5 4 5 4 ...
##  $ EK1 : int  5 5 4 4 4 5 4 4 5 5 ...
##  $ EK2 : int  4 5 4 4 4 5 5 4 5 5 ...
##  $ EK3 : int  5 5 4 4 4 5 4 4 4 4 ...
##  $ SC1 : int  4 5 5 5 5 5 5 5 5 4 ...
##  $ SC2 : int  4 5 4 5 4 5 5 4 5 5 ...
##  $ SC3 : int  5 5 4 3 4 5 5 4 5 5 ...
##  $ SC4 : int  4 5 4 5 4 5 5 4 5 5 ...
##  $ PK1 : int  5 4 4 4 3 5 5 4 5 5 ...
##  $ PK2 : int  4 4 4 5 3 5 5 4 5 5 ...
##  $ PK3 : int  4 5 4 3 3 5 5 4 5 5 ...
##  $ ATT1: int  4 5 4 5 4 5 5 4 5 5 ...
##  $ ATT2: int  4 5 4 5 4 5 5 4 5 5 ...
##  $ ATT3: int  4 4 4 5 4 5 5 4 5 5 ...
##  $ ATT4: int  4 4 4 5 4 5 5 4 5 5 ...
##  $ MO1 : int  4 3 4 5 5 5 5 4 5 5 ...
##  $ MO2 : int  3 3 4 4 4 4 4 5 4 5 ...
##  $ MO3 : int  3 4 5 4 4 4 5 5 4 4 ...
##  $ INT1: int  5 5 4 5 5 5 5 4 5 5 ...
##  $ INT2: int  5 5 4 5 5 5 5 2 5 5 ...
##  $ INT3: int  4 5 4 4 4 5 4 3 5 5 ...
jumlah_na <- sum(is.na(dataset_survey))
cat("Jumlah Missing Value pada Dataset:", jumlah_na, "\n")
## Jumlah Missing Value pada Dataset: 0

3. Statistik Deskriptif dan Asumsi Data

Kita mengekstraksi tendensi rata-rata (mean) dan skewness untuk memeriksa distribusi data. Hal ini penting untuk membuktikan asumsi distribusi data yang tidak normal, yang mana akan memvalidasi perlunya teknik non-parametrik seperti PLS.

# Tinjauan Mean, Standar Deviasi, dan Skewness
deskriptif <- describe(dataset_survey)
print(deskriptif)
##      vars   n mean   sd median trimmed  mad min max range  skew kurtosis   se
## EC1     1 528 4.39 0.67      4    4.49 1.48   2   5     3 -0.70    -0.47 0.03
## EC2     2 528 4.44 0.71      5    4.55 0.00   2   5     3 -0.94    -0.07 0.03
## EC3     3 528 4.42 0.70      5    4.53 0.00   2   5     3 -0.92     0.10 0.03
## EK1     4 528 4.39 0.67      4    4.48 1.48   2   5     3 -0.79     0.14 0.03
## EK2     5 528 4.46 0.61      5    4.53 0.00   3   5     2 -0.67    -0.52 0.03
## EK3     6 528 4.37 0.69      4    4.47 1.48   1   5     4 -1.06     1.75 0.03
## SC1     7 528 4.57 0.68      5    4.71 0.00   1   5     4 -1.46     1.67 0.03
## SC2     8 528 4.52 0.65      5    4.63 0.00   3   5     2 -1.01    -0.11 0.03
## SC3     9 528 4.45 0.71      5    4.56 0.00   2   5     3 -0.95    -0.20 0.03
## SC4    10 528 4.54 0.66      5    4.66 0.00   2   5     3 -1.16     0.28 0.03
## PK1    11 528 4.32 0.76      4    4.41 1.48   2   5     3 -0.78    -0.30 0.03
## PK2    12 528 4.29 0.79      4    4.39 1.48   1   5     4 -1.08     1.33 0.03
## PK3    13 528 4.16 0.98      4    4.28 1.48   1   5     4 -1.06     0.71 0.04
## ATT1   14 528 4.53 0.68      5    4.66 0.00   3   5     2 -1.13    -0.02 0.03
## ATT2   15 528 4.53 0.68      5    4.66 0.00   2   5     3 -1.21     0.60 0.03
## ATT3   16 528 4.51 0.67      5    4.62 0.00   2   5     3 -1.12     0.49 0.03
## ATT4   17 528 4.43 0.67      5    4.53 0.00   2   5     3 -0.91     0.26 0.03
## MO1    18 528 4.27 0.64      4    4.34 0.00   2   5     3 -0.49     0.10 0.03
## MO2    19 528 4.16 0.78      4    4.25 0.00   1   5     4 -1.04     1.85 0.03
## MO3    20 528 4.35 0.68      4    4.45 1.48   1   5     4 -0.79     0.50 0.03
## INT1   21 528 4.34 0.77      5    4.43 0.00   2   5     3 -0.83    -0.25 0.03
## INT2   22 528 4.39 0.74      5    4.50 0.00   1   5     4 -1.04     0.73 0.03
## INT3   23 528 4.34 0.70      4    4.44 1.48   2   5     3 -0.75     0.01 0.03
# Plot Matriks Korelasi (Bivariate)
matriks_korelasi <- cor(dataset_survey)
print(round(matriks_korelasi, 2))
##       EC1  EC2  EC3  EK1  EK2  EK3  SC1  SC2  SC3  SC4  PK1  PK2  PK3 ATT1 ATT2
## EC1  1.00 0.60 0.67 0.59 0.48 0.50 0.39 0.51 0.44 0.51 0.48 0.37 0.36 0.58 0.56
## EC2  0.60 1.00 0.61 0.50 0.51 0.46 0.27 0.41 0.38 0.45 0.44 0.39 0.31 0.42 0.48
## EC3  0.67 0.61 1.00 0.54 0.53 0.56 0.34 0.47 0.46 0.44 0.50 0.41 0.36 0.56 0.50
## EK1  0.59 0.50 0.54 1.00 0.65 0.56 0.34 0.46 0.48 0.49 0.47 0.40 0.33 0.49 0.47
## EK2  0.48 0.51 0.53 0.65 1.00 0.58 0.31 0.46 0.43 0.46 0.44 0.42 0.31 0.53 0.47
## EK3  0.50 0.46 0.56 0.56 0.58 1.00 0.28 0.36 0.37 0.36 0.36 0.33 0.31 0.41 0.39
## SC1  0.39 0.27 0.34 0.34 0.31 0.28 1.00 0.54 0.47 0.47 0.36 0.24 0.27 0.52 0.42
## SC2  0.51 0.41 0.47 0.46 0.46 0.36 0.54 1.00 0.57 0.62 0.51 0.45 0.32 0.62 0.52
## SC3  0.44 0.38 0.46 0.48 0.43 0.37 0.47 0.57 1.00 0.60 0.49 0.31 0.31 0.52 0.50
## SC4  0.51 0.45 0.44 0.49 0.46 0.36 0.47 0.62 0.60 1.00 0.41 0.29 0.26 0.52 0.47
## PK1  0.48 0.44 0.50 0.47 0.44 0.36 0.36 0.51 0.49 0.41 1.00 0.71 0.53 0.59 0.55
## PK2  0.37 0.39 0.41 0.40 0.42 0.33 0.24 0.45 0.31 0.29 0.71 1.00 0.59 0.46 0.41
## PK3  0.36 0.31 0.36 0.33 0.31 0.31 0.27 0.32 0.31 0.26 0.53 0.59 1.00 0.35 0.42
## ATT1 0.58 0.42 0.56 0.49 0.53 0.41 0.52 0.62 0.52 0.52 0.59 0.46 0.35 1.00 0.69
## ATT2 0.56 0.48 0.50 0.47 0.47 0.39 0.42 0.52 0.50 0.47 0.55 0.41 0.42 0.69 1.00
## ATT3 0.56 0.48 0.55 0.47 0.50 0.42 0.46 0.52 0.49 0.52 0.57 0.49 0.41 0.71 0.69
## ATT4 0.53 0.48 0.47 0.45 0.44 0.36 0.41 0.47 0.45 0.45 0.52 0.49 0.38 0.58 0.61
## MO1  0.34 0.32 0.29 0.37 0.29 0.25 0.30 0.30 0.29 0.32 0.28 0.31 0.20 0.39 0.42
## MO2  0.38 0.32 0.33 0.41 0.33 0.30 0.29 0.34 0.33 0.34 0.36 0.38 0.27 0.45 0.43
## MO3  0.34 0.33 0.27 0.38 0.29 0.25 0.31 0.36 0.34 0.33 0.32 0.32 0.28 0.41 0.44
## INT1 0.50 0.53 0.51 0.58 0.48 0.37 0.27 0.46 0.48 0.41 0.52 0.48 0.42 0.47 0.55
## INT2 0.49 0.46 0.46 0.52 0.50 0.37 0.30 0.40 0.41 0.41 0.57 0.50 0.40 0.57 0.53
## INT3 0.42 0.42 0.40 0.44 0.47 0.33 0.28 0.42 0.39 0.36 0.50 0.44 0.37 0.47 0.50
##      ATT3 ATT4  MO1  MO2  MO3 INT1 INT2 INT3
## EC1  0.56 0.53 0.34 0.38 0.34 0.50 0.49 0.42
## EC2  0.48 0.48 0.32 0.32 0.33 0.53 0.46 0.42
## EC3  0.55 0.47 0.29 0.33 0.27 0.51 0.46 0.40
## EK1  0.47 0.45 0.37 0.41 0.38 0.58 0.52 0.44
## EK2  0.50 0.44 0.29 0.33 0.29 0.48 0.50 0.47
## EK3  0.42 0.36 0.25 0.30 0.25 0.37 0.37 0.33
## SC1  0.46 0.41 0.30 0.29 0.31 0.27 0.30 0.28
## SC2  0.52 0.47 0.30 0.34 0.36 0.46 0.40 0.42
## SC3  0.49 0.45 0.29 0.33 0.34 0.48 0.41 0.39
## SC4  0.52 0.45 0.32 0.34 0.33 0.41 0.41 0.36
## PK1  0.57 0.52 0.28 0.36 0.32 0.52 0.57 0.50
## PK2  0.49 0.49 0.31 0.38 0.32 0.48 0.50 0.44
## PK3  0.41 0.38 0.20 0.27 0.28 0.42 0.40 0.37
## ATT1 0.71 0.58 0.39 0.45 0.41 0.47 0.57 0.47
## ATT2 0.69 0.61 0.42 0.43 0.44 0.55 0.53 0.50
## ATT3 1.00 0.70 0.50 0.54 0.52 0.56 0.58 0.51
## ATT4 0.70 1.00 0.54 0.52 0.47 0.52 0.54 0.46
## MO1  0.50 0.54 1.00 0.63 0.53 0.40 0.43 0.39
## MO2  0.54 0.52 0.63 1.00 0.68 0.47 0.49 0.45
## MO3  0.52 0.47 0.53 0.68 1.00 0.50 0.47 0.43
## INT1 0.56 0.52 0.40 0.47 0.50 1.00 0.66 0.59
## INT2 0.58 0.54 0.43 0.49 0.47 0.66 1.00 0.69
## INT3 0.51 0.46 0.39 0.45 0.43 0.59 0.69 1.00

4. Pemilihan Variabel dan Spesifikasi Outer Model

Langkah ini merekonstruksi variabel observasi (indikator kuesioner) ke dalam komposit model reflektif PLS. Spesifikasi di bawah ini telah disesuaikan secara presisi dengan jumlah indikator asli yang ada pada file Raw_Data.csv.

model_pengukuran <- constructs(
  composite("Kepedulian_Lingkungan", multi_items("EC", 1:3)),
  composite("Pengetahuan_Lingkungan", multi_items("EK", 1:3)),
  composite("Kepedulian_Sosial",      multi_items("SC", 1:4)),
  composite("Penget_Isu_Sosial",     multi_items("PK", 1:3)),
  composite("Kewajiban_Moral",       multi_items("MO", 1:3)),
  composite("Sikap",                 multi_items("ATT", 1:4)),
  composite("Intensi_Beralih",       multi_items("INT", 1:3))
)

5. Spesifikasi Arsitektur Kausal (Inner Model)

Di sini kita menentukan jalur deterministik (Path Coefficients) yang menghubungkan antar variabel laten, termasuk merepresentasikan uji hipotesis mediasi.

model_struktural <- relationships(
  paths(from = c("Kepedulian_Lingkungan", "Pengetahuan_Lingkungan", 
                 "Kepedulian_Sosial", "Penget_Isu_Sosial"), 
        to = c("Kewajiban_Moral", "Sikap")),
  
  paths(from = c("Kewajiban_Moral", "Sikap"), 
        to = c("Intensi_Beralih"))
)

6. Estimasi Algoritma PLS-SEM dan Uji Multikolinearitas (VIF)

Menjalankan komputasi algoritma utama dan memverifikasi batas toleransi Structural Multicollinearity untuk menjamin model bebas bias. VIF idealnya berada di bawah angka 3.3 (atau maksimal 5.0).

pls_model_estimasi <- estimate_pls(data = dataset_survey,
                                   measurement_model = model_pengukuran,
                                   structural_model = model_struktural,
                                   inner_weights = path_weighting)

ringkasan_model <- summary(pls_model_estimasi)

cat("\n--- INNER VIF (Multikolinearitas Struktural) ---\n")
## 
## --- INNER VIF (Multikolinearitas Struktural) ---
print(ringkasan_model$vif_antecedents)
## Kewajiban_Moral :
##  Kepedulian_Lingkungan Pengetahuan_Lingkungan      Kepedulian_Sosial 
##                  2.313                  2.179                  1.812 
##      Penget_Isu_Sosial 
##                  1.585 
## 
## Sikap :
##  Kepedulian_Lingkungan Pengetahuan_Lingkungan      Kepedulian_Sosial 
##                  2.313                  2.179                  1.812 
##      Penget_Isu_Sosial 
##                  1.585 
## 
## Intensi_Beralih :
## Kewajiban_Moral           Sikap 
##           1.659           1.659

7. Evaluasi Validitas & Reliabilitas (Outer Model)

Tahap ini mengekstraksi parameter ketahanan instrumen pengukur, meliputi Outer Loadings, Cronbach’s Alpha, Composite Reliability (CR), Average Variance Extracted (AVE), dan nilai HTMT untuk validitas diskriminan.

cat("\n--- OUTER LOADINGS ---\n")
## 
## --- OUTER LOADINGS ---
print(ringkasan_model$loadings)
##      Kepedulian_Lingkungan Pengetahuan_Lingkungan Kepedulian_Sosial
## EC1                  0.885                  0.000             0.000
## EC2                  0.838                  0.000             0.000
## EC3                  0.876                  0.000             0.000
## EK1                  0.000                  0.878             0.000
## EK2                  0.000                  0.876             0.000
## EK3                  0.000                  0.810             0.000
## SC1                  0.000                  0.000             0.753
## SC2                  0.000                  0.000             0.849
## SC3                  0.000                  0.000             0.812
## SC4                  0.000                  0.000             0.831
## PK1                  0.000                  0.000             0.000
## PK2                  0.000                  0.000             0.000
## PK3                  0.000                  0.000             0.000
## MO1                  0.000                  0.000             0.000
## MO2                  0.000                  0.000             0.000
## MO3                  0.000                  0.000             0.000
## ATT1                 0.000                  0.000             0.000
## ATT2                 0.000                  0.000             0.000
## ATT3                 0.000                  0.000             0.000
## ATT4                 0.000                  0.000             0.000
## INT1                 0.000                  0.000             0.000
## INT2                 0.000                  0.000             0.000
## INT3                 0.000                  0.000             0.000
##      Penget_Isu_Sosial Kewajiban_Moral Sikap Intensi_Beralih
## EC1              0.000           0.000 0.000           0.000
## EC2              0.000           0.000 0.000           0.000
## EC3              0.000           0.000 0.000           0.000
## EK1              0.000           0.000 0.000           0.000
## EK2              0.000           0.000 0.000           0.000
## EK3              0.000           0.000 0.000           0.000
## SC1              0.000           0.000 0.000           0.000
## SC2              0.000           0.000 0.000           0.000
## SC3              0.000           0.000 0.000           0.000
## SC4              0.000           0.000 0.000           0.000
## PK1              0.891           0.000 0.000           0.000
## PK2              0.896           0.000 0.000           0.000
## PK3              0.789           0.000 0.000           0.000
## MO1              0.000           0.819 0.000           0.000
## MO2              0.000           0.900 0.000           0.000
## MO3              0.000           0.861 0.000           0.000
## ATT1             0.000           0.000 0.865           0.000
## ATT2             0.000           0.000 0.865           0.000
## ATT3             0.000           0.000 0.897           0.000
## ATT4             0.000           0.000 0.833           0.000
## INT1             0.000           0.000 0.000           0.859
## INT2             0.000           0.000 0.000           0.901
## INT3             0.000           0.000 0.000           0.861
cat("\n--- RELIABILITAS & VALIDITAS KONVERGEN (CR, AVE) ---\n")
## 
## --- RELIABILITAS & VALIDITAS KONVERGEN (CR, AVE) ---
print(ringkasan_model$reliability)
##                        alpha  rhoA  rhoC   AVE
## Kepedulian_Lingkungan  0.835 0.840 0.901 0.751
## Pengetahuan_Lingkungan 0.817 0.829 0.891 0.732
## Kepedulian_Sosial      0.827 0.831 0.885 0.660
## Penget_Isu_Sosial      0.824 0.847 0.895 0.740
## Kewajiban_Moral        0.825 0.831 0.896 0.741
## Sikap                  0.888 0.889 0.923 0.749
## Intensi_Beralih        0.845 0.849 0.907 0.764
## 
## Alpha, rhoA, and rhoC should exceed 0.7 while AVE should exceed 0.5
cat("\n--- VALIDITAS DISKRIMINAN (Rasio HTMT) ---\n")
## 
## --- VALIDITAS DISKRIMINAN (Rasio HTMT) ---
print(ringkasan_model$validity$htmt)
##                        Kepedulian_Lingkungan Pengetahuan_Lingkungan
## Kepedulian_Lingkungan                      .                      .
## Pengetahuan_Lingkungan                 0.845                      .
## Kepedulian_Sosial                      0.723                  0.703
## Penget_Isu_Sosial                      0.650                  0.621
## Kewajiban_Moral                        0.525                  0.528
## Sikap                                  0.797                  0.712
## Intensi_Beralih                        0.733                  0.727
##                        Kepedulian_Sosial Penget_Isu_Sosial Kewajiban_Moral
## Kepedulian_Lingkungan                  .                 .               .
## Pengetahuan_Lingkungan                 .                 .               .
## Kepedulian_Sosial                      .                 .               .
## Penget_Isu_Sosial                  0.611                 .               .
## Kewajiban_Moral                    0.557             0.496               .
## Sikap                              0.819             0.737           0.738
## Intensi_Beralih                    0.643             0.744           0.711
##                        Sikap Intensi_Beralih
## Kepedulian_Lingkungan      .               .
## Pengetahuan_Lingkungan     .               .
## Kepedulian_Sosial          .               .
## Penget_Isu_Sosial          .               .
## Kewajiban_Moral            .               .
## Sikap                      .               .
## Intensi_Beralih        0.795               .

8. Evaluasi Prediktif Inner Model (R-Square)

Melihat kapasitas daya ramal (determinasi) dari model struktural terhadap sentimen atau perilaku konkrit dari intensi beralih konsumen.

cat("\n--- R-SQUARE & PATH COEFFICIENTS ---\n")
## 
## --- R-SQUARE & PATH COEFFICIENTS ---
print(ringkasan_model$paths)
##                        Kewajiban_Moral Sikap Intensi_Beralih
## R^2                              0.283 0.655           0.519
## AdjR^2                           0.277 0.653           0.517
## Kepedulian_Lingkungan            0.110 0.280               .
## Pengetahuan_Lingkungan           0.147 0.067               .
## Kepedulian_Sosial                0.224 0.355               .
## Penget_Isu_Sosial                0.163 0.268               .
## Kewajiban_Moral                      .     .           0.267
## Sikap                                .     .           0.522

9. Prosedur Bootstrapping (Pengujian Signifikansi)

Mengekstraksi signifikansi dari Path Coefficients, T-Statistics, dan P-Value melalui teknik resampling (bootstrapping sebanyak 5000 sub-sampel) untuk menarik simpulan kausalitas final uji hipotesis.

# Menjalankan proses bootstrap (menggunakan prosesor paralel agar komputasi lebih cepat)
model_bootstrap <- bootstrap_model(seminr_model = pls_model_estimasi,
                                   nboot = 5000, 
                                   cores = parallel::detectCores())

ringkasan_boot <- summary(model_bootstrap)

cat("\n--- HIPOTESIS: PATH COEFFICIENTS, T-VALUE, P-VALUE ---\n")
## 
## --- HIPOTESIS: PATH COEFFICIENTS, T-VALUE, P-VALUE ---
print(ringkasan_boot$bootstrapped_paths)
##                                             Original Est. Bootstrap Mean
## Kepedulian_Lingkungan  ->  Kewajiban_Moral          0.110          0.110
## Kepedulian_Lingkungan  ->  Sikap                    0.280          0.280
## Pengetahuan_Lingkungan  ->  Kewajiban_Moral         0.147          0.147
## Pengetahuan_Lingkungan  ->  Sikap                   0.067          0.069
## Kepedulian_Sosial  ->  Kewajiban_Moral              0.224          0.225
## Kepedulian_Sosial  ->  Sikap                        0.355          0.357
## Penget_Isu_Sosial  ->  Kewajiban_Moral              0.163          0.162
## Penget_Isu_Sosial  ->  Sikap                        0.268          0.265
## Kewajiban_Moral  ->  Intensi_Beralih                0.267          0.267
## Sikap  ->  Intensi_Beralih                          0.522          0.523
##                                             Bootstrap SD T Stat. 2.5% CI
## Kepedulian_Lingkungan  ->  Kewajiban_Moral         0.054   2.038   0.007
## Kepedulian_Lingkungan  ->  Sikap                   0.039   7.107   0.203
## Pengetahuan_Lingkungan  ->  Kewajiban_Moral        0.053   2.785   0.045
## Pengetahuan_Lingkungan  ->  Sikap                  0.044   1.540  -0.019
## Kepedulian_Sosial  ->  Kewajiban_Moral             0.065   3.431   0.095
## Kepedulian_Sosial  ->  Sikap                       0.052   6.790   0.253
## Penget_Isu_Sosial  ->  Kewajiban_Moral             0.065   2.490   0.036
## Penget_Isu_Sosial  ->  Sikap                       0.059   4.581   0.155
## Kewajiban_Moral  ->  Intensi_Beralih               0.043   6.187   0.184
## Sikap  ->  Intensi_Beralih                         0.041  12.596   0.440
##                                             97.5% CI Bootstrap P Val
## Kepedulian_Lingkungan  ->  Kewajiban_Moral     0.218           0.034
## Kepedulian_Lingkungan  ->  Sikap               0.357           0.000
## Pengetahuan_Lingkungan  ->  Kewajiban_Moral    0.252           0.005
## Pengetahuan_Lingkungan  ->  Sikap              0.154           0.122
## Kepedulian_Sosial  ->  Kewajiban_Moral         0.351           0.001
## Kepedulian_Sosial  ->  Sikap                   0.459           0.000
## Penget_Isu_Sosial  ->  Kewajiban_Moral         0.294           0.008
## Penget_Isu_Sosial  ->  Sikap                   0.381           0.000
## Kewajiban_Moral  ->  Intensi_Beralih           0.350           0.000
## Sikap  ->  Intensi_Beralih                     0.603           0.000

10. Visualisasi Model PLS-SEM

Mencetak representasi grafis rancang bangun PLS-SEM yang memproyeksikan seluruh muatan pengukuran (outer) serta koefisien struktural prediktif (inner). Plot ini sangat interaktif dan representatif untuk dimasukkan ke dalam laporan akhir.

# Plot visual model PLS-SEM hasil bootstrapping
plot(model_bootstrap)