1. IMPORT LIBRARY & LOAD DATASET

1.1 Import Library

library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.2.1     ✔ readr     2.2.0
## ✔ forcats   1.0.1     ✔ stringr   1.6.0
## ✔ ggplot2   4.0.3     ✔ tibble    3.3.1
## ✔ lubridate 1.9.5     ✔ tidyr     1.3.2
## ✔ purrr     1.2.2     
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
# install.packages("mnormt")
library(psych)
## 
## Attaching package: 'psych'
## 
## The following objects are masked from 'package:ggplot2':
## 
##     %+%, alpha
library(knitr)
# install.packages("kableExtra")
library(kableExtra)
## 
## Attaching package: 'kableExtra'
## 
## The following object is masked from 'package:dplyr':
## 
##     group_rows
library(MVN)
## Registered S3 method overwritten by 'lme4':
##   method           from
##   na.action.merMod car 
## 
## Attaching package: 'MVN'
## 
## The following object is masked from 'package:psych':
## 
##     mardia
library(car)
## 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
# install.packages("semPlot")
library(semPlot)

1.2 Load Dataset

data <- read.csv("train.csv")
head(data)
##   X     id Gender     Customer.Type Age  Type.of.Travel    Class
## 1 0  70172   Male    Loyal Customer  13 Personal Travel Eco Plus
## 2 1   5047   Male disloyal Customer  25 Business travel Business
## 3 2 110028 Female    Loyal Customer  26 Business travel Business
## 4 3  24026 Female    Loyal Customer  25 Business travel Business
## 5 4 119299   Male    Loyal Customer  61 Business travel Business
## 6 5 111157 Female    Loyal Customer  26 Personal Travel      Eco
##   Flight.Distance Inflight.wifi.service Departure.Arrival.time.convenient
## 1             460                     3                                 4
## 2             235                     3                                 2
## 3            1142                     2                                 2
## 4             562                     2                                 5
## 5             214                     3                                 3
## 6            1180                     3                                 4
##   Ease.of.Online.booking Gate.location Food.and.drink Online.boarding
## 1                      3             1              5               3
## 2                      3             3              1               3
## 3                      2             2              5               5
## 4                      5             5              2               2
## 5                      3             3              4               5
## 6                      2             1              1               2
##   Seat.comfort Inflight.entertainment On.board.service Leg.room.service
## 1            5                      5                4                3
## 2            1                      1                1                5
## 3            5                      5                4                3
## 4            2                      2                2                5
## 5            5                      3                3                4
## 6            1                      1                3                4
##   Baggage.handling Checkin.service Inflight.service Cleanliness
## 1                4               4                5           5
## 2                3               1                4           1
## 3                4               4                4           5
## 4                3               1                4           2
## 5                4               3                3           3
## 6                4               4                4           1
##   Departure.Delay.in.Minutes Arrival.Delay.in.Minutes            satisfaction
## 1                         25                       18 neutral or dissatisfied
## 2                          1                        6 neutral or dissatisfied
## 3                          0                        0               satisfied
## 4                         11                        9 neutral or dissatisfied
## 5                          0                        0               satisfied
## 6                          0                        0 neutral or dissatisfied

2. KARAKTERISTIK DATASET

2.1 Dimensi Dataset

dim(data)
## [1] 103904     25

Dataset terdiri dari 103904 baris dan 25 kolom

2.2 Deskripsi Data

No. <- c(1:23)

Variabel <- c("Gender", 
              "Customer Type",
              "Age",
              "Type of Travel",
              "Class",
              "Flight distance",
              "Inflight wifi service",
              "Departure/Arrival time convenient",
              "Ease of Online booking",
              "Gate location",
              "Food and drink",
              "Online boarding",
              "Seat comfort",
              "Inflight entertainment",
              "On-board service",
              "Leg room service",
              "Baggage handling",
              "Check-in service",
              "Inflight service",
              "Cleanliness",
              "Departure Delay in Minutes",
              "Arrival Delay in Minutes",
              "Satisfaction")

Deskripsi <- c("Jenis kelamin penumpang (Wanita, Pria)", 
                 "Jenis pelanggan (Pelanggan setia, pelanggan tidak setia)",
                 "Usia sebenarnya dari penumpang",
                 "Tujuan penerbangan penumpang (Perjalanan Pribadi, Perjalanan Bisnis)",
                 "Kelas perjalanan di pesawat penumpang (Business, Eco, Eco Plus)",
                 "Jarak penerbangan perjalanan",
                 "Tingkat kepuasan layanan wifi dalam pesawat (0:Tidak Berlaku; 1-5)",
                 "Tingkat kepuasan waktu Keberangkatan/Kedatangan",
                 "Tingkat kepuasan pemesanan online",
                 "Tingkat kepuasan lokasi Gate",
                 "Tingkat kepuasan Makanan dan minuman",
                 "Tingkat kepuasan boarding online",
                 "Tingkat kepuasan kenyamanan Kursi",
                 "Tingkat kepuasan hiburan dalam pesawat",
                 "Tingkat kepuasan layanan On-board",
                 "Tingkat kepuasan layanan kamar kaki",
                 "Tingkat kepuasan penanganan bagasi",
                 "Tingkat kepuasan layanan Check-in",
                 "Tingkat kepuasan layanan dalam pesawat",
                 "Tingkat kepuasan Kebersihan",
                 "Menit tertunda saat keberangkatan",
                 "Menit tertunda saat Kedatangan",
                 "Tingkat kepuasan maskapai penerbangan (Kepuasan, netral atau ketidakpuasan)"
)

data.frame(No., Variabel, Deskripsi) %>% 
  kbl() %>% 
  kable_styling(bootstrap_options = c("bordered", "stripped", "hover"), 
                full_width = T)
No.  Variabel Deskripsi
1 Gender Jenis kelamin penumpang (Wanita, Pria)
2 Customer Type Jenis pelanggan (Pelanggan setia, pelanggan tidak setia)
3 Age Usia sebenarnya dari penumpang
4 Type of Travel Tujuan penerbangan penumpang (Perjalanan Pribadi, Perjalanan Bisnis)
5 Class Kelas perjalanan di pesawat penumpang (Business, Eco, Eco Plus)
6 Flight distance Jarak penerbangan perjalanan
7 Inflight wifi service Tingkat kepuasan layanan wifi dalam pesawat (0:Tidak Berlaku; 1-5)
8 Departure/Arrival time convenient Tingkat kepuasan waktu Keberangkatan/Kedatangan
9 Ease of Online booking Tingkat kepuasan pemesanan online
10 Gate location Tingkat kepuasan lokasi Gate
11 Food and drink Tingkat kepuasan Makanan dan minuman
12 Online boarding Tingkat kepuasan boarding online
13 Seat comfort Tingkat kepuasan kenyamanan Kursi
14 Inflight entertainment Tingkat kepuasan hiburan dalam pesawat
15 On-board service Tingkat kepuasan layanan On-board
16 Leg room service Tingkat kepuasan layanan kamar kaki
17 Baggage handling Tingkat kepuasan penanganan bagasi
18 Check-in service Tingkat kepuasan layanan Check-in
19 Inflight service Tingkat kepuasan layanan dalam pesawat
20 Cleanliness Tingkat kepuasan Kebersihan
21 Departure Delay in Minutes Menit tertunda saat keberangkatan
22 Arrival Delay in Minutes Menit tertunda saat Kedatangan
23 Satisfaction Tingkat kepuasan maskapai penerbangan (Kepuasan, netral atau ketidakpuasan)

2.3 Struktur Dataset

str(data)
## 'data.frame':    103904 obs. of  25 variables:
##  $ X                                : int  0 1 2 3 4 5 6 7 8 9 ...
##  $ id                               : int  70172 5047 110028 24026 119299 111157 82113 96462 79485 65725 ...
##  $ Gender                           : chr  "Male" "Male" "Female" "Female" ...
##  $ Customer.Type                    : chr  "Loyal Customer" "disloyal Customer" "Loyal Customer" "Loyal Customer" ...
##  $ Age                              : int  13 25 26 25 61 26 47 52 41 20 ...
##  $ Type.of.Travel                   : chr  "Personal Travel" "Business travel" "Business travel" "Business travel" ...
##  $ Class                            : chr  "Eco Plus" "Business" "Business" "Business" ...
##  $ Flight.Distance                  : int  460 235 1142 562 214 1180 1276 2035 853 1061 ...
##  $ Inflight.wifi.service            : int  3 3 2 2 3 3 2 4 1 3 ...
##  $ Departure.Arrival.time.convenient: int  4 2 2 5 3 4 4 3 2 3 ...
##  $ Ease.of.Online.booking           : int  3 3 2 5 3 2 2 4 2 3 ...
##  $ Gate.location                    : int  1 3 2 5 3 1 3 4 2 4 ...
##  $ Food.and.drink                   : int  5 1 5 2 4 1 2 5 4 2 ...
##  $ Online.boarding                  : int  3 3 5 2 5 2 2 5 3 3 ...
##  $ Seat.comfort                     : int  5 1 5 2 5 1 2 5 3 3 ...
##  $ Inflight.entertainment           : int  5 1 5 2 3 1 2 5 1 2 ...
##  $ On.board.service                 : int  4 1 4 2 3 3 3 5 1 2 ...
##  $ Leg.room.service                 : int  3 5 3 5 4 4 3 5 2 3 ...
##  $ Baggage.handling                 : int  4 3 4 3 4 4 4 5 1 4 ...
##  $ Checkin.service                  : int  4 1 4 1 3 4 3 4 4 4 ...
##  $ Inflight.service                 : int  5 4 4 4 3 4 5 5 1 3 ...
##  $ Cleanliness                      : int  5 1 5 2 3 1 2 4 2 2 ...
##  $ Departure.Delay.in.Minutes       : int  25 1 0 11 0 0 9 4 0 0 ...
##  $ Arrival.Delay.in.Minutes         : num  18 6 0 9 0 0 23 0 0 0 ...
##  $ satisfaction                     : chr  "neutral or dissatisfied" "neutral or dissatisfied" "satisfied" "neutral or dissatisfied" ...

2.4 Statistika Deskriptif

describe(data)
##                                   vars      n     mean       sd  median
## X                                    1 103904 51951.50 29994.65 51951.5
## id                                   2 103904 64924.21 37463.81 64856.5
## Gender*                              3 103904     1.49     0.50     1.0
## Customer.Type*                       4 103904     1.82     0.39     2.0
## Age                                  5 103904    39.38    15.11    40.0
## Type.of.Travel*                      6 103904     1.31     0.46     1.0
## Class*                               7 103904     1.59     0.62     2.0
## Flight.Distance                      8 103904  1189.45   997.15   843.0
## Inflight.wifi.service                9 103904     2.73     1.33     3.0
## Departure.Arrival.time.convenient   10 103904     3.06     1.53     3.0
## Ease.of.Online.booking              11 103904     2.76     1.40     3.0
## Gate.location                       12 103904     2.98     1.28     3.0
## Food.and.drink                      13 103904     3.20     1.33     3.0
## Online.boarding                     14 103904     3.25     1.35     3.0
## Seat.comfort                        15 103904     3.44     1.32     4.0
## Inflight.entertainment              16 103904     3.36     1.33     4.0
## On.board.service                    17 103904     3.38     1.29     4.0
## Leg.room.service                    18 103904     3.35     1.32     4.0
## Baggage.handling                    19 103904     3.63     1.18     4.0
## Checkin.service                     20 103904     3.30     1.27     3.0
## Inflight.service                    21 103904     3.64     1.18     4.0
## Cleanliness                         22 103904     3.29     1.31     3.0
## Departure.Delay.in.Minutes          23 103904    14.82    38.23     0.0
## Arrival.Delay.in.Minutes            24 103594    15.18    38.70     0.0
## satisfaction*                       25 103904     1.43     0.50     1.0
##                                    trimmed      mad min    max  range  skew
## X                                 51951.50 38512.02   0 103903 103903  0.00
## id                                64910.76 48051.07   1 129880 129879  0.00
## Gender*                               1.49     0.00   1      2      1  0.03
## Customer.Type*                        1.90     0.00   1      2      1 -1.64
## Age                                  39.40    17.79   7     85     78  0.00
## Type.of.Travel*                       1.26     0.00   1      2      1  0.82
## Class*                                1.53     1.48   1      3      2  0.54
## Flight.Distance                    1042.84   766.50  31   4983   4952  1.11
## Inflight.wifi.service                 2.70     1.48   0      5      5  0.04
## Departure.Arrival.time.convenient     3.14     1.48   0      5      5 -0.33
## Ease.of.Online.booking                2.75     1.48   0      5      5 -0.02
## Gate.location                         2.97     1.48   0      5      5 -0.06
## Food.and.drink                        3.25     1.48   0      5      5 -0.15
## Online.boarding                       3.34     1.48   0      5      5 -0.45
## Seat.comfort                          3.55     1.48   0      5      5 -0.48
## Inflight.entertainment                3.45     1.48   0      5      5 -0.37
## On.board.service                      3.48     1.48   0      5      5 -0.42
## Leg.room.service                      3.44     1.48   0      5      5 -0.35
## Baggage.handling                      3.75     1.48   1      5      4 -0.68
## Checkin.service                       3.38     1.48   0      5      5 -0.36
## Inflight.service                      3.76     1.48   0      5      5 -0.69
## Cleanliness                           3.36     1.48   0      5      5 -0.30
## Departure.Delay.in.Minutes            5.83     0.00   0   1592   1592  6.73
## Arrival.Delay.in.Minutes              6.09     0.00   0   1584   1584  6.60
## satisfaction*                         1.42     0.00   1      2      1  0.27
##                                   kurtosis     se
## X                                    -1.20  93.05
## id                                   -1.20 116.22
## Gender*                              -2.00   0.00
## Customer.Type*                        0.70   0.00
## Age                                  -0.72   0.05
## Type.of.Travel*                      -1.33   0.00
## Class*                               -0.62   0.00
## Flight.Distance                       0.27   3.09
## Inflight.wifi.service                -0.85   0.00
## Departure.Arrival.time.convenient    -1.04   0.00
## Ease.of.Online.booking               -0.91   0.00
## Gate.location                        -1.03   0.00
## Food.and.drink                       -1.15   0.00
## Online.boarding                      -0.70   0.00
## Seat.comfort                         -0.93   0.00
## Inflight.entertainment               -1.06   0.00
## On.board.service                     -0.89   0.00
## Leg.room.service                     -0.98   0.00
## Baggage.handling                     -0.39   0.00
## Checkin.service                      -0.83   0.00
## Inflight.service                     -0.36   0.00
## Cleanliness                          -1.01   0.00
## Departure.Delay.in.Minutes          100.26   0.12
## Arrival.Delay.in.Minutes             94.53   0.12
## satisfaction*                        -1.93   0.00

2.5 Cek missing value dan data duplikat

# cek missing value
colSums(is.na(data))
##                                 X                                id 
##                                 0                                 0 
##                            Gender                     Customer.Type 
##                                 0                                 0 
##                               Age                    Type.of.Travel 
##                                 0                                 0 
##                             Class                   Flight.Distance 
##                                 0                                 0 
##             Inflight.wifi.service Departure.Arrival.time.convenient 
##                                 0                                 0 
##            Ease.of.Online.booking                     Gate.location 
##                                 0                                 0 
##                    Food.and.drink                   Online.boarding 
##                                 0                                 0 
##                      Seat.comfort            Inflight.entertainment 
##                                 0                                 0 
##                  On.board.service                  Leg.room.service 
##                                 0                                 0 
##                  Baggage.handling                   Checkin.service 
##                                 0                                 0 
##                  Inflight.service                       Cleanliness 
##                                 0                                 0 
##        Departure.Delay.in.Minutes          Arrival.Delay.in.Minutes 
##                                 0                               310 
##                      satisfaction 
##                                 0

terdapat missing value pada variabel Arrival.Delay.in.Minutes

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

Tidak ada data duplikat

2.6 Distribusi Variabel Satisfaction

# Membuat tabel frekuensi
freq <- table(data$satisfaction)

# Membuat barplot
bp <- barplot(
  freq,
  main = "Distribusi Satisfaction",
  xlab = "Kategori Satisfaction",
  ylab = "Frekuensi",
  col = c("skyblue", "pink"),
  ylim = c(0, max(freq) + 5000)
)

# Menambahkan angka di atas batang
text(
  x = bp,
  y = freq,
  label = freq,
  pos = 3,
  cex = 0.8,
  col = "black"
)

Berdasarkan grafik distribusi satisfaction, jumlah pelanggan dengan kategori neutral or dissatisfied lebih banyak dibandingkan pelanggan yang satisfied. Hal ini menunjukkan bahwa tingkat kepuasan pelanggan masih cenderung rendah karena masih banyak penumpang yang merasa netral atau kurang puas terhadap layanan maskapai.

2.7 Histogram Variabel Numerik

# Memilih hanya variabel numerik
data_num <- data[sapply(data, is.numeric)]

# Mengatur layout plot
par(mfrow = c(3, 3))

# Membuat histogram untuk semua variabel numerik
for(i in names(data_num)) {
  
  hist(
    data_num[[i]],
    main = paste("Histogram", i),
    xlab = i,
    col = "skyblue",
    border = "white"
  )
}

# Mengembalikan layout normal
par(mfrow = c(1,1))

Berdasarkan histogram, sebagian besar variabel layanan memiliki nilai 3–5, sehingga menunjukkan bahwa pelanggan cukup puas terhadap layanan maskapai. Variabel Age memiliki distribusi yang cukup normal dengan dominasi usia produktif. Sementara itu, Flight.Distance, Departure.Delay.in.Minutes, dan Arrival.Delay.in.Minutes cenderung miring ke kanan karena sebagian besar data berada pada nilai rendah, tetapi terdapat beberapa nilai ekstrem atau outlier. Secara keseluruhan, data menunjukkan tingkat kepuasan pelanggan yang cukup baik dengan beberapa variabel yang masih memiliki nilai ekstrem.

2.8 Boxplot Cek Outlier

# Ambil semua variabel numerik
data_num <- data[, sapply(data, is.numeric)]

# Hapus kolom yang bukan variabel analisis
data_num <- subset(data_num, select = -c(X, id))

# Transformasi log
data_log <- log1p(data_num)

# Atur margin
par(mar = c(10,4,4,2))

# Boxplot
boxplot(
  data_log,
  col = "lightblue",
  las = 2,
  cex.axis = 0.7,
  main = "Boxplot Deteksi Outlier"
)

Berdasarkan visualisasi boxplot, sebagian besar variabel layanan memiliki distribusi data yang relatif stabil dan tidak menunjukkan banyak outlier. Hal ini disebabkan karena variabel tersebut menggunakan skala penilaian terbatas antara 0–5 sehingga rentang datanya sempit. Sementara itu, variabel Flight Distance, Check-in Service, Departure Delay in Minutes, dan Arrival Delay in Minutes menunjukkan cukup banyak outlier, terutama pada nilai keterlambatan penerbangan. Outlier tersebut merepresentasikan adanya beberapa penerbangan dengan keterlambatan yang jauh lebih tinggi dibanding mayoritas data lainnya. Sebelum visualisasi dilakukan, data numerik ditransformasikan menggunakan log1p() untuk mengurangi skewness dan membuat persebaran data lebih proporsional sehingga boxplot lebih mudah dianalisis.

# Memilih hanya variabel numerik
data_num <- data[sapply(data, is.numeric)]

# Mengecek outlier dengan metode IQR
for(i in names(data_num)) {
  
  Q1 <- quantile(data_num[[i]], 0.25, na.rm = TRUE)
  Q3 <- quantile(data_num[[i]], 0.75, na.rm = TRUE)
  IQR_value <- IQR(data_num[[i]], na.rm = TRUE)
  
  lower_bound <- Q1 - 1.5 * IQR_value
  upper_bound <- Q3 + 1.5 * IQR_value
  
  outlier <- data_num[[i]][
    data_num[[i]] < lower_bound |
    data_num[[i]] > upper_bound
  ]
  
  cat("\n========================\n")
  cat("Variabel :", i, "\n")
  cat("Jumlah Outlier :", length(outlier), "\n")
}
## 
## ========================
## Variabel : X 
## Jumlah Outlier : 0 
## 
## ========================
## Variabel : id 
## Jumlah Outlier : 0 
## 
## ========================
## Variabel : Age 
## Jumlah Outlier : 0 
## 
## ========================
## Variabel : Flight.Distance 
## Jumlah Outlier : 2291 
## 
## ========================
## Variabel : Inflight.wifi.service 
## Jumlah Outlier : 0 
## 
## ========================
## Variabel : Departure.Arrival.time.convenient 
## Jumlah Outlier : 0 
## 
## ========================
## Variabel : Ease.of.Online.booking 
## Jumlah Outlier : 0 
## 
## ========================
## Variabel : Gate.location 
## Jumlah Outlier : 0 
## 
## ========================
## Variabel : Food.and.drink 
## Jumlah Outlier : 0 
## 
## ========================
## Variabel : Online.boarding 
## Jumlah Outlier : 0 
## 
## ========================
## Variabel : Seat.comfort 
## Jumlah Outlier : 0 
## 
## ========================
## Variabel : Inflight.entertainment 
## Jumlah Outlier : 0 
## 
## ========================
## Variabel : On.board.service 
## Jumlah Outlier : 0 
## 
## ========================
## Variabel : Leg.room.service 
## Jumlah Outlier : 0 
## 
## ========================
## Variabel : Baggage.handling 
## Jumlah Outlier : 0 
## 
## ========================
## Variabel : Checkin.service 
## Jumlah Outlier : 12891 
## 
## ========================
## Variabel : Inflight.service 
## Jumlah Outlier : 0 
## 
## ========================
## Variabel : Cleanliness 
## Jumlah Outlier : 0 
## 
## ========================
## Variabel : Departure.Delay.in.Minutes 
## Jumlah Outlier : 14529 
## 
## ========================
## Variabel : Arrival.Delay.in.Minutes 
## Jumlah Outlier : 14264

Outlier pada data penerbangan tidak selalu dianggap sebagai kesalahan data, melainkan dapat merepresentasikan kondisi nyata di lapangan, seperti keterlambatan ekstrem akibat cuaca, gangguan teknis, atau kondisi operasional tertentu. Oleh karena itu, outlier tidak langsung dihapus, tetapi dipertimbangkan berdasarkan konteks analisis.

3. Pre-Processing Data

3.1 Menghapus Variabel yang Tidak Digunakan

# Menghapus kolom index yang tidak digunakan 
data <- subset(data, select = -c(X, id)) 
# Melihat dimensi data terbaru 
dim(data)
## [1] 103904     23
head(data)
##   Gender     Customer.Type Age  Type.of.Travel    Class Flight.Distance
## 1   Male    Loyal Customer  13 Personal Travel Eco Plus             460
## 2   Male disloyal Customer  25 Business travel Business             235
## 3 Female    Loyal Customer  26 Business travel Business            1142
## 4 Female    Loyal Customer  25 Business travel Business             562
## 5   Male    Loyal Customer  61 Business travel Business             214
## 6 Female    Loyal Customer  26 Personal Travel      Eco            1180
##   Inflight.wifi.service Departure.Arrival.time.convenient
## 1                     3                                 4
## 2                     3                                 2
## 3                     2                                 2
## 4                     2                                 5
## 5                     3                                 3
## 6                     3                                 4
##   Ease.of.Online.booking Gate.location Food.and.drink Online.boarding
## 1                      3             1              5               3
## 2                      3             3              1               3
## 3                      2             2              5               5
## 4                      5             5              2               2
## 5                      3             3              4               5
## 6                      2             1              1               2
##   Seat.comfort Inflight.entertainment On.board.service Leg.room.service
## 1            5                      5                4                3
## 2            1                      1                1                5
## 3            5                      5                4                3
## 4            2                      2                2                5
## 5            5                      3                3                4
## 6            1                      1                3                4
##   Baggage.handling Checkin.service Inflight.service Cleanliness
## 1                4               4                5           5
## 2                3               1                4           1
## 3                4               4                4           5
## 4                3               1                4           2
## 5                4               3                3           3
## 6                4               4                4           1
##   Departure.Delay.in.Minutes Arrival.Delay.in.Minutes            satisfaction
## 1                         25                       18 neutral or dissatisfied
## 2                          1                        6 neutral or dissatisfied
## 3                          0                        0               satisfied
## 4                         11                        9 neutral or dissatisfied
## 5                          0                        0               satisfied
## 6                          0                        0 neutral or dissatisfied

Kolom X dan id dihapus karena hanya berfungsi sebagai identitas data dan tidak digunakan dalam analisis SEM maupun CFA.

3.2 Menangani Missing Value

data$Arrival.Delay.in.Minutes[ is.na(data$Arrival.Delay.in.Minutes) ] <- median( data$Arrival.Delay.in.Minutes, na.rm = TRUE )
# Mengecek kembali missing value 
colSums(is.na(data))
##                            Gender                     Customer.Type 
##                                 0                                 0 
##                               Age                    Type.of.Travel 
##                                 0                                 0 
##                             Class                   Flight.Distance 
##                                 0                                 0 
##             Inflight.wifi.service Departure.Arrival.time.convenient 
##                                 0                                 0 
##            Ease.of.Online.booking                     Gate.location 
##                                 0                                 0 
##                    Food.and.drink                   Online.boarding 
##                                 0                                 0 
##                      Seat.comfort            Inflight.entertainment 
##                                 0                                 0 
##                  On.board.service                  Leg.room.service 
##                                 0                                 0 
##                  Baggage.handling                   Checkin.service 
##                                 0                                 0 
##                  Inflight.service                       Cleanliness 
##                                 0                                 0 
##        Departure.Delay.in.Minutes          Arrival.Delay.in.Minutes 
##                                 0                                 0 
##                      satisfaction 
##                                 0

Missing value ditangani menggunakan metode imputasi median karena variabel keterlambatan memiliki distribusi yang cenderung skewed dan mengandung outlier, sehingga median lebih stabil dibanding mean.

3.3 Mengubah Variabel Kategorik Menjadi Factor

# Mengubah variabel kategorik menjadi factor
data$Gender <- as.factor(data$Gender)

data$Customer.Type <- as.factor(
  data$Customer.Type
)

data$Type.of.Travel <- as.factor(
  data$Type.of.Travel
)

data$Class <- as.factor(data$Class)

data$satisfaction <- as.factor(
  data$satisfaction
)

# Melihat struktur data terbaru
str(data)
## 'data.frame':    103904 obs. of  23 variables:
##  $ Gender                           : Factor w/ 2 levels "Female","Male": 2 2 1 1 2 1 2 1 1 2 ...
##  $ Customer.Type                    : Factor w/ 2 levels "disloyal Customer",..: 2 1 2 2 2 2 2 2 2 1 ...
##  $ Age                              : int  13 25 26 25 61 26 47 52 41 20 ...
##  $ Type.of.Travel                   : Factor w/ 2 levels "Business travel",..: 2 1 1 1 1 2 2 1 1 1 ...
##  $ Class                            : Factor w/ 3 levels "Business","Eco",..: 3 1 1 1 1 2 2 1 1 2 ...
##  $ Flight.Distance                  : int  460 235 1142 562 214 1180 1276 2035 853 1061 ...
##  $ Inflight.wifi.service            : int  3 3 2 2 3 3 2 4 1 3 ...
##  $ Departure.Arrival.time.convenient: int  4 2 2 5 3 4 4 3 2 3 ...
##  $ Ease.of.Online.booking           : int  3 3 2 5 3 2 2 4 2 3 ...
##  $ Gate.location                    : int  1 3 2 5 3 1 3 4 2 4 ...
##  $ Food.and.drink                   : int  5 1 5 2 4 1 2 5 4 2 ...
##  $ Online.boarding                  : int  3 3 5 2 5 2 2 5 3 3 ...
##  $ Seat.comfort                     : int  5 1 5 2 5 1 2 5 3 3 ...
##  $ Inflight.entertainment           : int  5 1 5 2 3 1 2 5 1 2 ...
##  $ On.board.service                 : int  4 1 4 2 3 3 3 5 1 2 ...
##  $ Leg.room.service                 : int  3 5 3 5 4 4 3 5 2 3 ...
##  $ Baggage.handling                 : int  4 3 4 3 4 4 4 5 1 4 ...
##  $ Checkin.service                  : int  4 1 4 1 3 4 3 4 4 4 ...
##  $ Inflight.service                 : int  5 4 4 4 3 4 5 5 1 3 ...
##  $ Cleanliness                      : int  5 1 5 2 3 1 2 4 2 2 ...
##  $ Departure.Delay.in.Minutes       : int  25 1 0 11 0 0 9 4 0 0 ...
##  $ Arrival.Delay.in.Minutes         : num  18 6 0 9 0 0 23 0 0 0 ...
##  $ satisfaction                     : Factor w/ 2 levels "neutral or dissatisfied",..: 1 1 2 1 2 1 1 2 1 1 ...

Transformasi dilakukan agar variabel kategorik dapat dikenali sebagai data kategorikal oleh R saat proses analisis statistik dan SEM.

3.4 Memisahkan Variabel Numerik

# Memilih hanya variabel numerik
numeric_data <- data[
  , sapply(data, is.numeric)
]

# Menampilkan nama variabel numerik
names(numeric_data)
##  [1] "Age"                               "Flight.Distance"                  
##  [3] "Inflight.wifi.service"             "Departure.Arrival.time.convenient"
##  [5] "Ease.of.Online.booking"            "Gate.location"                    
##  [7] "Food.and.drink"                    "Online.boarding"                  
##  [9] "Seat.comfort"                      "Inflight.entertainment"           
## [11] "On.board.service"                  "Leg.room.service"                 
## [13] "Baggage.handling"                  "Checkin.service"                  
## [15] "Inflight.service"                  "Cleanliness"                      
## [17] "Departure.Delay.in.Minutes"        "Arrival.Delay.in.Minutes"

Variabel numerik dipisahkan untuk mempermudah proses standardisasi dan analisis lanjutan.

3.5 Standardisasi Data Numerik

# Standardisasi variabel numerik 
numeric_scaled <- scale(numeric_data) 
# Mengubah hasil menjadi data frame 
numeric_scaled <- as.data.frame( numeric_scaled ) 
# Menampilkan hasil standardisasi 
head(numeric_scaled)
##          Age Flight.Distance Inflight.wifi.service
## 1 -1.7452709    -0.731535240             0.2035780
## 2 -0.9513557    -0.957178938             0.2035780
## 3 -0.8851961    -0.047584120            -0.5495308
## 4 -0.9513557    -0.629243430            -0.5495308
## 5  1.4303901    -0.978239017             0.2035780
## 6 -0.8851961    -0.009475406             0.2035780
##   Departure.Arrival.time.convenient Ease.of.Online.booking Gate.location
## 1                        0.61616893              0.1737753   -1.54731528
## 2                       -0.69524181              0.1737753    0.01809417
## 3                       -0.69524181             -0.5410570   -0.76461055
## 4                        1.27187431              1.6034399    1.58350362
## 5                       -0.03953644              0.1737753    0.01809417
## 6                        0.61616893             -0.5410570   -1.54731528
##   Food.and.drink Online.boarding Seat.comfort Inflight.entertainment
## 1      1.3522579      -0.1855307     1.183094              1.2316984
## 2     -1.6563179      -0.1855307    -1.849306             -1.7690727
## 3      1.3522579       1.2964898     1.183094              1.2316984
## 4     -0.9041740      -0.9265410    -1.091206             -1.0188800
## 5      0.6001139       1.2964898     1.183094             -0.2686872
## 6     -1.6563179      -0.9265410    -1.849306             -1.7690727
##   On.board.service Leg.room.service Baggage.handling Checkin.service
## 1        0.4794003       -0.2668392        0.3117670       0.5497960
## 2       -1.8491516        1.2533744       -0.5350423      -1.8210037
## 3        0.4794003       -0.2668392        0.3117670       0.5497960
## 4       -1.0729677        1.2533744       -0.5350423      -1.8210037
## 5       -0.2967837        0.4932676        0.3117670      -0.2404706
## 6       -0.2967837        0.4932676        0.3117670       0.5497960
##   Inflight.service Cleanliness Departure.Delay.in.Minutes
## 1        1.1564303   1.3058634                 0.26639136
## 2        0.3058464  -1.7422831                -0.36137308
## 3        0.3058464   1.3058634                -0.38752993
## 4        0.3058464  -0.9802465                -0.09980456
## 5       -0.5447375  -0.2182099                -0.38752993
## 6        0.3058464  -1.7422831                -0.38752993
##   Arrival.Delay.in.Minutes
## 1                0.0741688
## 2               -0.2363116
## 3               -0.3915519
## 4               -0.1586915
## 5               -0.3915519
## 6               -0.3915519

Standardisasi dilakukan agar seluruh variabel numerik memiliki skala yang sebanding dengan rata-rata 0 dan standar deviasi 1. Hal ini penting dalam SEM agar perbedaan skala antar variabel tidak memengaruhi hasil analisis.

3.6 Menyiapkan Dataset Final

# Menggunakan data numerik yang sudah distandardisasi 
data_final <- numeric_scaled 
# Melihat struktur dataset final 
str(data_final) 
## 'data.frame':    103904 obs. of  18 variables:
##  $ Age                              : num  -1.745 -0.951 -0.885 -0.951 1.43 ...
##  $ Flight.Distance                  : num  -0.7315 -0.9572 -0.0476 -0.6292 -0.9782 ...
##  $ Inflight.wifi.service            : num  0.204 0.204 -0.55 -0.55 0.204 ...
##  $ Departure.Arrival.time.convenient: num  0.6162 -0.6952 -0.6952 1.2719 -0.0395 ...
##  $ Ease.of.Online.booking           : num  0.174 0.174 -0.541 1.603 0.174 ...
##  $ Gate.location                    : num  -1.5473 0.0181 -0.7646 1.5835 0.0181 ...
##  $ Food.and.drink                   : num  1.352 -1.656 1.352 -0.904 0.6 ...
##  $ Online.boarding                  : num  -0.186 -0.186 1.296 -0.927 1.296 ...
##  $ Seat.comfort                     : num  1.18 -1.85 1.18 -1.09 1.18 ...
##  $ Inflight.entertainment           : num  1.232 -1.769 1.232 -1.019 -0.269 ...
##  $ On.board.service                 : num  0.479 -1.849 0.479 -1.073 -0.297 ...
##  $ Leg.room.service                 : num  -0.267 1.253 -0.267 1.253 0.493 ...
##  $ Baggage.handling                 : num  0.312 -0.535 0.312 -0.535 0.312 ...
##  $ Checkin.service                  : num  0.55 -1.82 0.55 -1.82 -0.24 ...
##  $ Inflight.service                 : num  1.156 0.306 0.306 0.306 -0.545 ...
##  $ Cleanliness                      : num  1.306 -1.742 1.306 -0.98 -0.218 ...
##  $ Departure.Delay.in.Minutes       : num  0.2664 -0.3614 -0.3875 -0.0998 -0.3875 ...
##  $ Arrival.Delay.in.Minutes         : num  0.0742 -0.2363 -0.3916 -0.1587 -0.3916 ...
# Menampilkan beberapa data awal 
head(data_final)
##          Age Flight.Distance Inflight.wifi.service
## 1 -1.7452709    -0.731535240             0.2035780
## 2 -0.9513557    -0.957178938             0.2035780
## 3 -0.8851961    -0.047584120            -0.5495308
## 4 -0.9513557    -0.629243430            -0.5495308
## 5  1.4303901    -0.978239017             0.2035780
## 6 -0.8851961    -0.009475406             0.2035780
##   Departure.Arrival.time.convenient Ease.of.Online.booking Gate.location
## 1                        0.61616893              0.1737753   -1.54731528
## 2                       -0.69524181              0.1737753    0.01809417
## 3                       -0.69524181             -0.5410570   -0.76461055
## 4                        1.27187431              1.6034399    1.58350362
## 5                       -0.03953644              0.1737753    0.01809417
## 6                        0.61616893             -0.5410570   -1.54731528
##   Food.and.drink Online.boarding Seat.comfort Inflight.entertainment
## 1      1.3522579      -0.1855307     1.183094              1.2316984
## 2     -1.6563179      -0.1855307    -1.849306             -1.7690727
## 3      1.3522579       1.2964898     1.183094              1.2316984
## 4     -0.9041740      -0.9265410    -1.091206             -1.0188800
## 5      0.6001139       1.2964898     1.183094             -0.2686872
## 6     -1.6563179      -0.9265410    -1.849306             -1.7690727
##   On.board.service Leg.room.service Baggage.handling Checkin.service
## 1        0.4794003       -0.2668392        0.3117670       0.5497960
## 2       -1.8491516        1.2533744       -0.5350423      -1.8210037
## 3        0.4794003       -0.2668392        0.3117670       0.5497960
## 4       -1.0729677        1.2533744       -0.5350423      -1.8210037
## 5       -0.2967837        0.4932676        0.3117670      -0.2404706
## 6       -0.2967837        0.4932676        0.3117670       0.5497960
##   Inflight.service Cleanliness Departure.Delay.in.Minutes
## 1        1.1564303   1.3058634                 0.26639136
## 2        0.3058464  -1.7422831                -0.36137308
## 3        0.3058464   1.3058634                -0.38752993
## 4        0.3058464  -0.9802465                -0.09980456
## 5       -0.5447375  -0.2182099                -0.38752993
## 6        0.3058464  -1.7422831                -0.38752993
##   Arrival.Delay.in.Minutes
## 1                0.0741688
## 2               -0.2363116
## 3               -0.3915519
## 4               -0.1586915
## 5               -0.3915519
## 6               -0.3915519

Dataset final menggunakan hasil standardisasi variabel numerik agar seluruh variabel memiliki skala yang setara. Hal ini penting dalam analisis SEM dan CFA karena perbedaan skala antar variabel dapat memengaruhi estimasi model.

4. UJI ASUMSI SEM

Sebelum melakukan Confirmatory Factor Analysis (CFA) dan Structural Equation Modeling (SEM), perlu dilakukan beberapa uji asumsi agar data memenuhi syarat analisis. Uji asumsi meliputi normalitas, multikolinearitas, kecukupan sampel, dan deteksi outlier multivariat.

4.1 Uji Normalitas Data

# Melihat skewness dan kurtosis 
normalitas <- describe(data_final)[ , c("mean", "sd", "skew", "kurtosis") ] 
normalitas
##                                   mean sd  skew kurtosis
## Age                                  0  1  0.00    -0.72
## Flight.Distance                      0  1  1.11     0.27
## Inflight.wifi.service                0  1  0.04    -0.85
## Departure.Arrival.time.convenient    0  1 -0.33    -1.04
## Ease.of.Online.booking               0  1 -0.02    -0.91
## Gate.location                        0  1 -0.06    -1.03
## Food.and.drink                       0  1 -0.15    -1.15
## Online.boarding                      0  1 -0.45    -0.70
## Seat.comfort                         0  1 -0.48    -0.93
## Inflight.entertainment               0  1 -0.37    -1.06
## On.board.service                     0  1 -0.42    -0.89
## Leg.room.service                     0  1 -0.35    -0.98
## Baggage.handling                     0  1 -0.68    -0.39
## Checkin.service                      0  1 -0.36    -0.83
## Inflight.service                     0  1 -0.69    -0.36
## Cleanliness                          0  1 -0.30    -1.01
## Departure.Delay.in.Minutes           0  1  6.73   100.26
## Arrival.Delay.in.Minutes             0  1  6.61    94.76

Berdasarkan hasil uji normalitas menggunakan nilai skewness dan kurtosis, sebagian besar variabel memiliki distribusi yang mendekati normal. Hal ini ditunjukkan oleh nilai skewness yang berada di sekitar rentang -2 hingga 2 dan nilai kurtosis yang masih berada dalam batas normal, sehingga data dinilai cukup baik untuk analisis SEM-CFA.

Variabel layanan seperti Inflight wifi service, Online boarding, Seat comfort, Food and drink, hingga Cleanliness memiliki nilai skewness negatif kecil yang menunjukkan distribusi data sedikit condong ke kiri. Artinya, sebagian besar responden memberikan penilaian yang cukup tinggi terhadap layanan maskapai. Selain itu, nilai kurtosis yang cenderung negatif menunjukkan distribusi data lebih datar dibanding distribusi normal.

Variabel Age memiliki distribusi yang cukup simetris dengan skewness sebesar 0,00 dan kurtosis sebesar -0,72 sehingga mendekati distribusi normal. Sementara itu, variabel Flight Distance memiliki skewness sebesar 1,11 yang menunjukkan distribusi miring ke kanan karena mayoritas penerbangan memiliki jarak yang relatif pendek, namun masih terdapat beberapa penerbangan dengan jarak sangat jauh.

Di sisi lain, variabel Departure Delay in Minutes dan Arrival Delay in Minutes memiliki nilai skewness yang sangat tinggi, masing-masing sebesar 6,73 dan 6,61. Hal ini menunjukkan distribusi data sangat miring ke kanan akibat adanya beberapa keterlambatan ekstrem pada penerbangan. Oleh karena itu, kedua variabel tersebut mengandung outlier yang cukup besar dibandingkan variabel lainnya.

4.2 Uji Normalitas Multivariat

Sys.setlocale("LC_ALL", "English")
## Warning in Sys.setlocale("LC_ALL", "English"): using locale code page other
## than 65001 ("UTF-8") may cause problems
## [1] "LC_COLLATE=English_United States.1252;LC_CTYPE=English_United States.1252;LC_MONETARY=English_United States.1252;LC_NUMERIC=C;LC_TIME=English_United States.1252"
set.seed(123)

sample_data <- data_final[sample(nrow(data_final), 3000), ]

mvn_result <- MVN::mvn(
  data = sample_data,
  mvn_test = "mardia"
)

mvn_result$multivariate_normality
##              Test Statistic p.value     Method                 MVN
## 1 Mardia Skewness  32954.76  <0.001 asymptotic <U+2717> Not normal
## 2 Mardia Kurtosis    144.80  <0.001 asymptotic <U+2717> Not normal

Berdasarkan hasil uji normalitas multivariat menggunakan Mardia Test, diperoleh nilai p-value pada Mardia Skewness dan Mardia Kurtosis masing-masing sebesar <0,001. Nilai tersebut lebih kecil dari taraf signifikansi 0,05 sehingga hipotesis nol ditolak. Hal ini menunjukkan bahwa data tidak memenuhi asumsi normalitas multivariat.

Nilai Mardia Skewness sebesar 32954,76 menunjukkan adanya penyimpangan distribusi data terhadap normalitas dari sisi kemencengan (skewness), sedangkan nilai Mardia Kurtosis sebesar 144,80 menunjukkan adanya penyimpangan dari sisi keruncingan distribusi data (kurtosis). Hasil ini sejalan dengan karakteristik beberapa variabel pada dataset, khususnya variabel Departure Delay in Minutes dan Arrival Delay in Minutes yang memiliki distribusi sangat miring ke kanan akibat adanya outlier atau nilai ekstrem keterlambatan penerbangan.

Meskipun data tidak berdistribusi normal secara multivariat, analisis SEM-CFA masih dapat dilakukan karena jumlah sampel pada penelitian ini sangat besar, yaitu lebih dari 100.000 observasi. Selain itu, metode estimasi pada package lavaan masih cukup robust terhadap pelanggaran normalitas pada ukuran sampel besar.

4.3 Uji Multikolinearitas

# Membuat model regresi sementara
model_vif <- lm(
  Flight.Distance ~ Age +
    Inflight.wifi.service +
    Departure.Arrival.time.convenient +
    Ease.of.Online.booking +
    Gate.location +
    Food.and.drink +
    Online.boarding +
    Seat.comfort +
    Inflight.entertainment +
    On.board.service +
    Leg.room.service +
    Baggage.handling +
    Checkin.service +
    Inflight.service +
    Cleanliness +
    Departure.Delay.in.Minutes +
    Arrival.Delay.in.Minutes,
  
  data = data_final
)

# Menghitung nilai VIF
vif(model_vif)
##                               Age             Inflight.wifi.service 
##                          1.095177                          2.352759 
## Departure.Arrival.time.convenient            Ease.of.Online.booking 
##                          1.434601                          2.639290 
##                     Gate.location                    Food.and.drink 
##                          1.479128                          2.165509 
##                   Online.boarding                      Seat.comfort 
##                          1.828925                          2.362390 
##            Inflight.entertainment                  On.board.service 
##                          3.780579                          1.755326 
##                  Leg.room.service                  Baggage.handling 
##                          1.289543                          1.890176 
##                   Checkin.service                  Inflight.service 
##                          1.214760                          2.055373 
##                       Cleanliness        Departure.Delay.in.Minutes 
##                          2.848852                         12.836277 
##          Arrival.Delay.in.Minutes 
##                         12.844551

Berdasarkan hasil uji multikolinearitas menggunakan Variance Inflation Factor (VIF), sebagian besar variabel memiliki nilai VIF kurang dari 10 sehingga tidak menunjukkan adanya multikolinearitas yang serius. Namun, variabel Departure.Delay.in.Minutes dan Arrival.Delay.in.Minutes memiliki nilai VIF di atas 10, yaitu masing-masing sebesar 12.836277 dan 12.844551. Hal ini menunjukkan adanya hubungan yang sangat kuat antara kedua variabel tersebut. Kondisi ini dapat terjadi karena keterlambatan keberangkatan penerbangan umumnya berpengaruh langsung terhadap keterlambatan kedatangan. Oleh karena itu, salah satu variabel delay dapat dipertimbangkan untuk dihapus agar model SEM menjadi lebih stabil dan terhindar dari masalah multikolinearitas.

# Menghapus variabel dengan VIF tertinggi
data_final <- subset(
  data_final,
  select = -Arrival.Delay.in.Minutes
)

# Melihat struktur data terbaru
str(data_final)
## 'data.frame':    103904 obs. of  17 variables:
##  $ Age                              : num  -1.745 -0.951 -0.885 -0.951 1.43 ...
##  $ Flight.Distance                  : num  -0.7315 -0.9572 -0.0476 -0.6292 -0.9782 ...
##  $ Inflight.wifi.service            : num  0.204 0.204 -0.55 -0.55 0.204 ...
##  $ Departure.Arrival.time.convenient: num  0.6162 -0.6952 -0.6952 1.2719 -0.0395 ...
##  $ Ease.of.Online.booking           : num  0.174 0.174 -0.541 1.603 0.174 ...
##  $ Gate.location                    : num  -1.5473 0.0181 -0.7646 1.5835 0.0181 ...
##  $ Food.and.drink                   : num  1.352 -1.656 1.352 -0.904 0.6 ...
##  $ Online.boarding                  : num  -0.186 -0.186 1.296 -0.927 1.296 ...
##  $ Seat.comfort                     : num  1.18 -1.85 1.18 -1.09 1.18 ...
##  $ Inflight.entertainment           : num  1.232 -1.769 1.232 -1.019 -0.269 ...
##  $ On.board.service                 : num  0.479 -1.849 0.479 -1.073 -0.297 ...
##  $ Leg.room.service                 : num  -0.267 1.253 -0.267 1.253 0.493 ...
##  $ Baggage.handling                 : num  0.312 -0.535 0.312 -0.535 0.312 ...
##  $ Checkin.service                  : num  0.55 -1.82 0.55 -1.82 -0.24 ...
##  $ Inflight.service                 : num  1.156 0.306 0.306 0.306 -0.545 ...
##  $ Cleanliness                      : num  1.306 -1.742 1.306 -0.98 -0.218 ...
##  $ Departure.Delay.in.Minutes       : num  0.2664 -0.3614 -0.3875 -0.0998 -0.3875 ...
# Uji VIF ulang
model_vif2 <- lm(
  Flight.Distance ~ Age +
    Inflight.wifi.service +
    Departure.Arrival.time.convenient +
    Ease.of.Online.booking +
    Gate.location +
    Food.and.drink +
    Online.boarding +
    Seat.comfort +
    Inflight.entertainment +
    On.board.service +
    Leg.room.service +
    Baggage.handling +
    Checkin.service +
    Inflight.service +
    Cleanliness +
    Departure.Delay.in.Minutes,

  data = data_final
)

vif(model_vif2)
##                               Age             Inflight.wifi.service 
##                          1.095121                          2.352759 
## Departure.Arrival.time.convenient            Ease.of.Online.booking 
##                          1.434584                          2.639286 
##                     Gate.location                    Food.and.drink 
##                          1.479123                          2.165247 
##                   Online.boarding                      Seat.comfort 
##                          1.828878                          2.362387 
##            Inflight.entertainment                  On.board.service 
##                          3.780561                          1.755279 
##                  Leg.room.service                  Baggage.handling 
##                          1.289533                          1.890144 
##                   Checkin.service                  Inflight.service 
##                          1.214758                          2.054767 
##                       Cleanliness        Departure.Delay.in.Minutes 
##                          2.848812                          1.007523

Setelah variabel Arrival.Delay.in.Minutes dihapus, hasil uji multikolinearitas menunjukkan bahwa seluruh variabel memiliki nilai VIF kurang dari 10. Nilai VIF tertinggi terdapat pada variabel Inflight.entertainment sebesar 3.780561, sedangkan variabel lainnya berada di sekitar 1–3. Hal ini menunjukkan bahwa tidak terdapat multikolinearitas yang serius antar variabel independen. Dengan demikian, data telah memenuhi asumsi multikolinearitas dan layak digunakan untuk analisis Confirmatory Factor Analysis (CFA) dan Structural Equation Modeling (SEM).

4.4 Uji KMO (Kaiser Meyer Olkin)

# Uji KMO 
KMO(cor(data_final))
## Kaiser-Meyer-Olkin factor adequacy
## Call: KMO(r = cor(data_final))
## Overall MSA =  0.78
## MSA for each item = 
##                               Age                   Flight.Distance 
##                              0.56                              0.70 
##             Inflight.wifi.service Departure.Arrival.time.convenient 
##                              0.73                              0.74 
##            Ease.of.Online.booking                     Gate.location 
##                              0.68                              0.71 
##                    Food.and.drink                   Online.boarding 
##                              0.84                              0.73 
##                      Seat.comfort            Inflight.entertainment 
##                              0.84                              0.77 
##                  On.board.service                  Leg.room.service 
##                              0.83                              0.88 
##                  Baggage.handling                   Checkin.service 
##                              0.81                              0.71 
##                  Inflight.service                       Cleanliness 
##                              0.78                              0.81 
##        Departure.Delay.in.Minutes 
##                              0.50

Berdasarkan hasil uji Kaiser-Meyer-Olkin (KMO), diperoleh nilai Overall MSA sebesar 0.78. Nilai tersebut menunjukkan bahwa data memiliki tingkat kecukupan sampel yang baik dan layak digunakan untuk analisis faktor. Sebagian besar variabel memiliki nilai MSA di atas 0.70 yang menunjukkan kualitas korelasi antar variabel cukup baik. Variabel Departure.Delay.in.Minutes memiliki nilai MSA sebesar 0.50 yang masih berada pada batas minimum penerimaan. Dengan demikian, data memenuhi asumsi kecukupan sampel untuk dilakukan analisis Confirmatory Factor Analysis (CFA) dan Structural Equation Modeling (SEM).

4.5 Uji Bartlett’s Test

# Bartlett Test 
cortest.bartlett( cor(data_final), n = nrow(data_final) )
## $chisq
## [1] 621298.5
## 
## $p.value
## [1] 0
## 
## $df
## [1] 136

Berdasarkan hasil Bartlett’s Test diperoleh nilai chi-square sebesar 621298.5 dengan derajat kebebasan (df) sebesar 136 dan p-value < 0.05. Hasil tersebut menunjukkan bahwa terdapat korelasi yang signifikan antar variabel sehingga matriks korelasi bukan merupakan identity matrix. Dengan demikian, data dinyatakan layak untuk dilakukan analisis faktor, Confirmatory Factor Analysis (CFA), dan Structural Equation Modeling (SEM).

4.6 Deteksi Outlier Multivariat

# Menghitung Mahalanobis Distance 
mahalanobis_distance <- mahalanobis( 
  data_final, 
  colMeans(data_final), 
  cov(data_final) 
) 
# Menentukan cutoff 
cutoff <- qchisq( 
  0.999, 
  df = ncol(data_final) 
) 
# Jumlah outlier multivariat 
sum(mahalanobis_distance > cutoff)
## [1] 1945

Berdasarkan perhitungan Mahalanobis Distance, diperoleh sebanyak 1945 observasi yang terdeteksi sebagai outlier multivariat. Jumlah tersebut relatif kecil dibandingkan total data yang mencapai lebih dari 100 ribu observasi. Outlier pada dataset penerbangan tidak selalu menunjukkan kesalahan data, melainkan dapat merepresentasikan kondisi nyata seperti keterlambatan ekstrem, gangguan operasional, maupun variasi tingkat kepuasan pelanggan. Oleh karena itu, outlier multivariat tidak langsung dihapus dan tetap dipertahankan dalam analisis agar informasi penting pada data tidak hilang.

4.7 Visualisasi Outlier Multivariat

# Visualisasi Mahalanobis Distance 
plot( 
  mahalanobis_distance, 
  pch = 20, 
  main = "Deteksi Outlier Multivariat", 
  ylab = "Mahalanobis Distance" 
) 

# Menambahkan garis cutoff 
abline( 
  h = cutoff, 
  col = "red", 
  lwd = 2 
)

Visualisasi tersebut menunjukkan hasil deteksi outlier multivariat menggunakan Mahalanobis Distance. Titik-titik hitam merepresentasikan setiap observasi dalam dataset, sedangkan garis merah menunjukkan batas cutoff berdasarkan distribusi chi-square. Observasi yang berada di atas garis merah dikategorikan sebagai outlier multivariat.

Berdasarkan grafik, sebagian besar data berada di bawah batas cutoff sehingga menunjukkan bahwa mayoritas observasi masih berada dalam pola distribusi yang normal. Namun, terdapat beberapa titik yang berada jauh di atas garis cutoff dengan nilai Mahalanobis Distance yang sangat tinggi. Titik-titik tersebut menunjukkan adanya observasi ekstrem atau outlier multivariat pada dataset.

Meskipun demikian, jumlah outlier relatif kecil dibandingkan total data yang mencapai lebih dari 100 ribu observasi. Selain itu, outlier pada data penerbangan dapat merepresentasikan kondisi nyata seperti keterlambatan ekstrem, gangguan operasional, maupun variasi tingkat kepuasan pelanggan. Oleh karena itu, outlier tidak langsung dihapus agar informasi penting dalam data tetap dipertahankan untuk analisis SEM dan CFA.

5. CONFIRMATORY FACTOR ANALYSIS (CFA)

Confirmatory Factor Analysis (CFA) dilakukan untuk menguji hubungan antara variabel indikator dengan konstruk laten yang telah ditentukan berdasarkan teori dan karakteristik layanan maskapai penerbangan.

Import Library CFA

#install.packages("lavaan") 
library(lavaan)
## 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

5.1 Membentuk Model CFA

model_cfa2 <- '

# Online Service
Online_Service =~
Inflight.wifi.service +
Ease.of.Online.booking

# Comfort
Comfort =~
Seat.comfort +
Cleanliness

# Service Quality
Service_Quality =~
On.board.service +
Inflight.service +
Baggage.handling

# Entertainment
Entertainment =~
Inflight.entertainment +
Food.and.drink

# Accessibility
Accessibility =~
Gate.location +
Departure.Arrival.time.convenient

'

5.2 Menjalankan CFA

fit_cfa2 <- cfa(
  model_cfa2,
  data = data_final,
  estimator = "MLR"
)

5.3 Ringkasan Hasil CFA

summary(
  fit_cfa2,
  fit.measures = TRUE,
  standardized = TRUE
)
## lavaan 0.6-21 ended normally after 40 iterations
## 
##   Estimator                                         ML
##   Optimization method                           NLMINB
##   Number of model parameters                        32
## 
##   Number of observations                        103904
## 
## Model Test User Model:
##                                                Standard      Scaled
##   Test Statistic                              34116.114   35137.583
##   Degrees of freedom                                 34          34
##   P-value (Chi-square)                            0.000       0.000
##   Scaling correction factor                                   0.971
##     Yuan-Bentler correction (Mplus variant)                        
## 
## Model Test Baseline Model:
## 
##   Test statistic                            498306.870  390785.775
##   Degrees of freedom                                55          55
##   P-value                                        0.000       0.000
##   Scaling correction factor                                  1.275
## 
## User Model versus Baseline Model:
## 
##   Comparative Fit Index (CFI)                    0.932       0.910
##   Tucker-Lewis Index (TLI)                       0.889       0.855
##                                                                   
##   Robust Comparative Fit Index (CFI)                         0.932
##   Robust Tucker-Lewis Index (TLI)                            0.889
## 
## Loglikelihood and Information Criteria:
## 
##   Loglikelihood user model (H0)           -1389666.405 -1389666.405
##   Scaling correction factor                                   1.354
##       for the MLR correction                                       
##   Loglikelihood unrestricted model (H1)   -1372608.348 -1372608.348
##   Scaling correction factor                                   1.157
##       for the MLR correction                                       
##                                                                    
##   Akaike (AIC)                             2779396.810  2779396.810
##   Bayesian (BIC)                           2779702.449  2779702.449
##   Sample-size adjusted Bayesian (SABIC)    2779600.752  2779600.752
## 
## Root Mean Square Error of Approximation:
## 
##   RMSEA                                          0.098       0.100
##   90 Percent confidence interval - lower         0.097       0.099
##   90 Percent confidence interval - upper         0.099       0.101
##   P-value H_0: RMSEA <= 0.050                    0.000       0.000
##   P-value H_0: RMSEA >= 0.080                    1.000       1.000
##                                                                   
##   Robust RMSEA                                               0.098
##   90 Percent confidence interval - lower                     0.097
##   90 Percent confidence interval - upper                     0.099
##   P-value H_0: Robust RMSEA <= 0.050                         0.000
##   P-value H_0: Robust RMSEA >= 0.080                         1.000
## 
## Standardized Root Mean Square Residual:
## 
##   SRMR                                           0.063       0.063
## 
## Parameter Estimates:
## 
##   Standard errors                             Sandwich
##   Information bread                           Observed
##   Observed information based on                Hessian
## 
## Latent Variables:
##                      Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##   Online_Service =~                                                       
##     Inflght.wf.srv      1.000                               0.761    0.761
##     Es.f.Onln.bkng      1.238    0.010  121.718    0.000    0.941    0.941
##   Comfort =~                                                              
##     Seat.comfort        1.000                               0.773    0.773
##     Cleanliness         1.135    0.004  308.741    0.000    0.878    0.878
##   Service_Quality =~                                                      
##     On.board.servc      1.000                               0.691    0.691
##     Inflight.servc      1.174    0.006  212.967    0.000    0.811    0.811
##     Baggage.hndlng      1.102    0.006  195.824    0.000    0.761    0.761
##   Entertainment =~                                                        
##     Inflght.ntrtnm      1.000                               0.909    0.909
##     Food.and.drink      0.754    0.004  182.707    0.000    0.685    0.685
##   Accessibility =~                                                        
##     Gate.location       1.000                               0.671    0.671
##     Dprtr.Arrvl.t.      0.987    0.009  115.077    0.000    0.662    0.662
## 
## Covariances:
##                      Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##   Online_Service ~~                                                       
##     Comfort             0.031    0.003   11.400    0.000    0.053    0.053
##     Service_Qualty      0.039    0.002   16.292    0.000    0.074    0.074
##     Entertainment       0.062    0.004   16.611    0.000    0.090    0.090
##     Accessibility       0.361    0.003  108.290    0.000    0.707    0.707
##   Comfort ~~                                                              
##     Service_Qualty      0.079    0.002   39.833    0.000    0.147    0.147
##     Entertainment       0.635    0.003  193.902    0.000    0.903    0.903
##     Accessibility       0.005    0.002    2.483    0.013    0.010    0.010
##   Service_Quality ~~                                                      
##     Entertainment       0.311    0.004   85.612    0.000    0.496    0.496
##     Accessibility       0.030    0.002   13.738    0.000    0.064    0.064
##   Entertainment ~~                                                        
##     Accessibility      -0.000    0.003   -0.050    0.960   -0.000   -0.000
## 
## Variances:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##    .Inflght.wf.srv    0.422    0.005   78.578    0.000    0.422    0.422
##    .Es.f.Onln.bkng    0.114    0.007   16.572    0.000    0.114    0.114
##    .Seat.comfort      0.402    0.004  111.847    0.000    0.402    0.402
##    .Cleanliness       0.230    0.003   91.698    0.000    0.230    0.230
##    .On.board.servc    0.523    0.004  146.001    0.000    0.523    0.523
##    .Inflight.servc    0.342    0.004   90.396    0.000    0.342    0.342
##    .Baggage.hndlng    0.420    0.004  105.167    0.000    0.420    0.420
##    .Inflght.ntrtnm    0.174    0.004   48.411    0.000    0.174    0.174
##    .Food.and.drink    0.531    0.004  138.457    0.000    0.531    0.531
##    .Gate.location     0.549    0.005  107.098    0.000    0.549    0.549
##    .Dprtr.Arrvl.t.    0.561    0.005  113.243    0.000    0.561    0.561
##     Online_Service    0.578    0.006   94.838    0.000    1.000    1.000
##     Comfort           0.598    0.004  146.673    0.000    1.000    1.000
##     Service_Qualty    0.477    0.004  125.237    0.000    1.000    1.000
##     Entertainment     0.826    0.004  184.332    0.000    1.000    1.000
##     Accessibility     0.451    0.005   82.689    0.000    1.000    1.000

5.4 Goodness of Fit

fitMeasures(
  fit_cfa2,
  c(
    "chisq",
    "df",
    "pvalue",
    "cfi",
    "tli",
    "rmsea",
    "srmr"
  )
)
##     chisq        df    pvalue       cfi       tli     rmsea      srmr 
## 34116.114    34.000     0.000     0.932     0.889     0.098     0.063

5.5 Loading Factor

standardizedSolution(fit_cfa2)
##                                  lhs op                               rhs
## 1                     Online_Service =~             Inflight.wifi.service
## 2                     Online_Service =~            Ease.of.Online.booking
## 3                            Comfort =~                      Seat.comfort
## 4                            Comfort =~                       Cleanliness
## 5                    Service_Quality =~                  On.board.service
## 6                    Service_Quality =~                  Inflight.service
## 7                    Service_Quality =~                  Baggage.handling
## 8                      Entertainment =~            Inflight.entertainment
## 9                      Entertainment =~                    Food.and.drink
## 10                     Accessibility =~                     Gate.location
## 11                     Accessibility =~ Departure.Arrival.time.convenient
## 12             Inflight.wifi.service ~~             Inflight.wifi.service
## 13            Ease.of.Online.booking ~~            Ease.of.Online.booking
## 14                      Seat.comfort ~~                      Seat.comfort
## 15                       Cleanliness ~~                       Cleanliness
## 16                  On.board.service ~~                  On.board.service
## 17                  Inflight.service ~~                  Inflight.service
## 18                  Baggage.handling ~~                  Baggage.handling
## 19            Inflight.entertainment ~~            Inflight.entertainment
## 20                    Food.and.drink ~~                    Food.and.drink
## 21                     Gate.location ~~                     Gate.location
## 22 Departure.Arrival.time.convenient ~~ Departure.Arrival.time.convenient
## 23                    Online_Service ~~                    Online_Service
## 24                           Comfort ~~                           Comfort
## 25                   Service_Quality ~~                   Service_Quality
## 26                     Entertainment ~~                     Entertainment
## 27                     Accessibility ~~                     Accessibility
## 28                    Online_Service ~~                           Comfort
## 29                    Online_Service ~~                   Service_Quality
## 30                    Online_Service ~~                     Entertainment
## 31                    Online_Service ~~                     Accessibility
## 32                           Comfort ~~                   Service_Quality
## 33                           Comfort ~~                     Entertainment
## 34                           Comfort ~~                     Accessibility
## 35                   Service_Quality ~~                     Entertainment
## 36                   Service_Quality ~~                     Accessibility
## 37                     Entertainment ~~                     Accessibility
##    est.std    se       z pvalue ci.lower ci.upper
## 1    0.761 0.004 212.552  0.000    0.754    0.768
## 2    0.941 0.004 257.557  0.000    0.934    0.948
## 3    0.773 0.002 346.284  0.000    0.769    0.778
## 4    0.878 0.001 624.946  0.000    0.875    0.880
## 5    0.691 0.002 287.098  0.000    0.686    0.695
## 6    0.811 0.002 370.965  0.000    0.807    0.816
## 7    0.761 0.002 311.906  0.000    0.757    0.766
## 8    0.909 0.002 459.523  0.000    0.905    0.912
## 9    0.685 0.003 241.621  0.000    0.680    0.691
## 10   0.671 0.004 177.279  0.000    0.664    0.679
## 11   0.662 0.003 191.070  0.000    0.656    0.669
## 12   0.422 0.005  77.455  0.000    0.411    0.432
## 13   0.114 0.007  16.581  0.000    0.101    0.128
## 14   0.402 0.003 116.451  0.000    0.395    0.409
## 15   0.230 0.002  93.301  0.000    0.225    0.235
## 16   0.523 0.003 157.286  0.000    0.516    0.529
## 17   0.342 0.004  96.364  0.000    0.335    0.349
## 18   0.420 0.004 113.001  0.000    0.413    0.427
## 19   0.174 0.004  48.536  0.000    0.167    0.181
## 20   0.531 0.004 136.571  0.000    0.523    0.538
## 21   0.549 0.005 107.978  0.000    0.539    0.559
## 22   0.561 0.005 122.197  0.000    0.552    0.570
## 23   1.000 0.000      NA     NA    1.000    1.000
## 24   1.000 0.000      NA     NA    1.000    1.000
## 25   1.000 0.000      NA     NA    1.000    1.000
## 26   1.000 0.000      NA     NA    1.000    1.000
## 27   1.000 0.000      NA     NA    1.000    1.000
## 28   0.053 0.004  11.824  0.000    0.044    0.061
## 29   0.074 0.004  17.177  0.000    0.066    0.082
## 30   0.090 0.005  17.711  0.000    0.080    0.100
## 31   0.707 0.004 194.300  0.000    0.700    0.714
## 32   0.147 0.004  40.892  0.000    0.140    0.154
## 33   0.903 0.003 295.680  0.000    0.897    0.909
## 34   0.010 0.004   2.482  0.013    0.002    0.019
## 35   0.496 0.004 121.920  0.000    0.488    0.504
## 36   0.064 0.005  13.486  0.000    0.055    0.073
## 37   0.000 0.004  -0.050  0.960   -0.008    0.008

Berdasarkan hasil Confirmatory Factor Analysis (CFA), model hasil modifikasi menunjukkan peningkatan goodness of fit dibanding model sebelumnya. Nilai Comparative Fit Index (CFI) sebesar 0.932 menunjukkan model telah memenuhi kriteria fit karena berada di atas 0.90. Nilai Standardized Root Mean Square Residual (SRMR) sebesar 0.063 juga menunjukkan model telah memenuhi kriteria fit karena berada di bawah 0.08. Nilai Tucker-Lewis Index (TLI) sebesar 0.889 mendekati batas kriteria fit, sedangkan nilai RMSEA sebesar 0.098 masih tergolong marginal fit. Namun, mengingat jumlah sampel penelitian yang sangat besar, nilai RMSEA masih dapat ditoleransi.

Selain itu, seluruh indikator pada model CFA hasil modifikasi memiliki nilai loading factor di atas 0.50 sehingga seluruh indikator dinyatakan valid dalam merepresentasikan konstruk laten masing-masing. Dengan demikian, model CFA hasil modifikasi dinilai cukup baik dan layak untuk dilanjutkan ke tahap Structural Equation Modeling (SEM).

6. STRUCTURAL EQUATION MODELING (SEM)

Structural Equation Modeling (SEM) dilakukan untuk menguji hubungan antar konstruk laten yang telah dibentuk pada tahap Confirmatory Factor Analysis (CFA). Analisis ini digunakan untuk mengetahui pengaruh antar variabel laten dalam model penelitian.

6.1 Membentuk Model SEM

# Model SEM
model_sem <- '

# Online Service
Online_Service =~
Inflight.wifi.service +
Ease.of.Online.booking

# Comfort
Comfort =~
Seat.comfort +
Cleanliness

# Service Quality
Service_Quality =~
On.board.service +
Inflight.service +
Baggage.handling

# Entertainment
Entertainment =~
Inflight.entertainment +
Food.and.drink

# Accessibility
Accessibility =~
Gate.location +
Departure.Arrival.time.convenient

# =========================
# Structural Model
# =========================

Comfort ~ Online_Service + Accessibility

Service_Quality ~ Online_Service +
Accessibility +
Entertainment

Entertainment ~ Comfort

'

Model SEM dibentuk berdasarkan hubungan antar konstruk laten yang berkaitan dengan kualitas layanan penerbangan dan pengalaman penumpang.

6.2 Menjalankan Model SEM

fit_sem <- sem(
  model_sem,
  data = data_final,
  estimator = "MLR"
)

6.3 Ringkasan Hasil SEM

summary( 
  fit_sem, 
  fit.measures = TRUE, 
  standardized = TRUE, 
  rsquare = TRUE 
)
## lavaan 0.6-21 ended normally after 39 iterations
## 
##   Estimator                                         ML
##   Optimization method                           NLMINB
##   Number of model parameters                        29
## 
##   Number of observations                        103904
## 
## Model Test User Model:
##                                                Standard      Scaled
##   Test Statistic                              50867.369   55063.511
##   Degrees of freedom                                 37          37
##   P-value (Chi-square)                            0.000       0.000
##   Scaling correction factor                                   0.924
##     Yuan-Bentler correction (Mplus variant)                        
## 
## Model Test Baseline Model:
## 
##   Test statistic                            498306.870  390785.775
##   Degrees of freedom                                55          55
##   P-value                                        0.000       0.000
##   Scaling correction factor                                  1.275
## 
## User Model versus Baseline Model:
## 
##   Comparative Fit Index (CFI)                    0.898       0.859
##   Tucker-Lewis Index (TLI)                       0.848       0.791
##                                                                   
##   Robust Comparative Fit Index (CFI)                         0.898
##   Robust Tucker-Lewis Index (TLI)                            0.848
## 
## Loglikelihood and Information Criteria:
## 
##   Loglikelihood user model (H0)           -1398042.033 -1398042.033
##   Scaling correction factor                                   1.453
##       for the MLR correction                                       
##   Loglikelihood unrestricted model (H1)   -1372608.348 -1372608.348
##   Scaling correction factor                                   1.157
##       for the MLR correction                                       
##                                                                    
##   Akaike (AIC)                             2796142.065  2796142.065
##   Bayesian (BIC)                           2796419.051  2796419.051
##   Sample-size adjusted Bayesian (SABIC)    2796326.888  2796326.888
## 
## Root Mean Square Error of Approximation:
## 
##   RMSEA                                          0.115       0.120
##   90 Percent confidence interval - lower         0.114       0.119
##   90 Percent confidence interval - upper         0.116       0.121
##   P-value H_0: RMSEA <= 0.050                    0.000       0.000
##   P-value H_0: RMSEA >= 0.080                    1.000       1.000
##                                                                   
##   Robust RMSEA                                               0.115
##   90 Percent confidence interval - lower                     0.114
##   90 Percent confidence interval - upper                     0.116
##   P-value H_0: Robust RMSEA <= 0.050                         0.000
##   P-value H_0: Robust RMSEA >= 0.080                         1.000
## 
## Standardized Root Mean Square Residual:
## 
##   SRMR                                           0.070       0.070
## 
## Parameter Estimates:
## 
##   Standard errors                             Sandwich
##   Information bread                           Observed
##   Observed information based on                Hessian
## 
## Latent Variables:
##                      Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##   Online_Service =~                                                       
##     Inflght.wf.srv      1.000                               0.752    0.752
##     Es.f.Onln.bkng      1.267    0.010  124.181    0.000    0.952    0.952
##   Comfort =~                                                              
##     Seat.comfort        1.000                               0.773    0.773
##     Cleanliness         1.136    0.004  279.285    0.000    0.877    0.877
##   Service_Quality =~                                                      
##     On.board.servc      1.000                               0.683    0.683
##     Inflight.servc      1.187    0.006  186.937    0.000    0.811    0.811
##     Baggage.hndlng      1.126    0.006  179.194    0.000    0.769    0.769
##   Entertainment =~                                                        
##     Inflght.ntrtnm      1.000                               0.859    0.859
##     Food.and.drink      0.875    0.006  138.039    0.000    0.751    0.751
##   Accessibility =~                                                        
##     Gate.location       1.000                               0.677    0.677
##     Dprtr.Arrvl.t.      0.969    0.008  117.757    0.000    0.656    0.656
## 
## Regressions:
##                     Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##   Comfort ~                                                              
##     Online_Service     0.116    0.009   12.969    0.000    0.113    0.113
##     Accessibility     -0.085    0.010   -8.839    0.000   -0.075   -0.075
##   Service_Quality ~                                                      
##     Online_Service     0.004    0.006    0.558    0.577    0.004    0.004
##     Accessibility      0.061    0.008    7.537    0.000    0.061    0.061
##     Entertainment      0.261    0.005   49.023    0.000    0.329    0.329
##   Entertainment ~                                                        
##     Comfort            1.036    0.004  245.128    0.000    0.932    0.932
## 
## Covariances:
##                     Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##   Online_Service ~~                                                      
##     Accessibility      0.358    0.003  107.176    0.000    0.702    0.702
## 
## Variances:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##    .Inflght.wf.srv    0.435    0.005   83.072    0.000    0.435    0.435
##    .Es.f.Onln.bkng    0.093    0.007   13.734    0.000    0.093    0.093
##    .Seat.comfort      0.403    0.004  109.874    0.000    0.403    0.403
##    .Cleanliness       0.230    0.003   84.405    0.000    0.230    0.230
##    .On.board.servc    0.534    0.004  142.027    0.000    0.534    0.534
##    .Inflight.servc    0.343    0.004   82.545    0.000    0.343    0.343
##    .Baggage.hndlng    0.409    0.004   97.049    0.000    0.409    0.409
##    .Inflght.ntrtnm    0.262    0.006   43.824    0.000    0.262    0.262
##    .Food.and.drink    0.436    0.004   98.182    0.000    0.436    0.436
##    .Gate.location     0.541    0.005  105.460    0.000    0.541    0.541
##    .Dprtr.Arrvl.t.    0.569    0.005  117.726    0.000    0.569    0.569
##     Online_Service    0.565    0.006   95.284    0.000    1.000    1.000
##    .Comfort           0.593    0.004  142.746    0.000    0.994    0.994
##    .Service_Qualty    0.414    0.004  110.943    0.000    0.887    0.887
##    .Entertainment     0.097    0.005   18.282    0.000    0.132    0.132
##     Accessibility     0.459    0.005   84.134    0.000    1.000    1.000
## 
## R-Square:
##                    Estimate
##     Inflght.wf.srv    0.565
##     Es.f.Onln.bkng    0.907
##     Seat.comfort      0.597
##     Cleanliness       0.770
##     On.board.servc    0.466
##     Inflight.servc    0.657
##     Baggage.hndlng    0.591
##     Inflght.ntrtnm    0.738
##     Food.and.drink    0.564
##     Gate.location     0.459
##     Dprtr.Arrvl.t.    0.431
##     Comfort           0.006
##     Service_Qualty    0.113
##     Entertainment     0.868

6.4 Goodness of Fit SEM

fitMeasures( 
  fit_sem, 
  c( 
    "chisq", 
    "df", 
    "pvalue", 
    "cfi", 
    "tli", 
    "rmsea", 
    "srmr" 
  ) 
)
##     chisq        df    pvalue       cfi       tli     rmsea      srmr 
## 50867.369    37.000     0.000     0.898     0.848     0.115     0.070

6.5 Koefisien Jalur (Path Coefficient)

standardizedSolution(fit_sem)
##                                  lhs op                               rhs
## 1                     Online_Service =~             Inflight.wifi.service
## 2                     Online_Service =~            Ease.of.Online.booking
## 3                            Comfort =~                      Seat.comfort
## 4                            Comfort =~                       Cleanliness
## 5                    Service_Quality =~                  On.board.service
## 6                    Service_Quality =~                  Inflight.service
## 7                    Service_Quality =~                  Baggage.handling
## 8                      Entertainment =~            Inflight.entertainment
## 9                      Entertainment =~                    Food.and.drink
## 10                     Accessibility =~                     Gate.location
## 11                     Accessibility =~ Departure.Arrival.time.convenient
## 12                           Comfort  ~                    Online_Service
## 13                           Comfort  ~                     Accessibility
## 14                   Service_Quality  ~                    Online_Service
## 15                   Service_Quality  ~                     Accessibility
## 16                   Service_Quality  ~                     Entertainment
## 17                     Entertainment  ~                           Comfort
## 18             Inflight.wifi.service ~~             Inflight.wifi.service
## 19            Ease.of.Online.booking ~~            Ease.of.Online.booking
## 20                      Seat.comfort ~~                      Seat.comfort
## 21                       Cleanliness ~~                       Cleanliness
## 22                  On.board.service ~~                  On.board.service
## 23                  Inflight.service ~~                  Inflight.service
## 24                  Baggage.handling ~~                  Baggage.handling
## 25            Inflight.entertainment ~~            Inflight.entertainment
## 26                    Food.and.drink ~~                    Food.and.drink
## 27                     Gate.location ~~                     Gate.location
## 28 Departure.Arrival.time.convenient ~~ Departure.Arrival.time.convenient
## 29                    Online_Service ~~                    Online_Service
## 30                           Comfort ~~                           Comfort
## 31                   Service_Quality ~~                   Service_Quality
## 32                     Entertainment ~~                     Entertainment
## 33                     Accessibility ~~                     Accessibility
## 34                    Online_Service ~~                     Accessibility
##    est.std    se        z pvalue ci.lower ci.upper
## 1    0.752 0.004  213.424  0.000    0.745    0.759
## 2    0.952 0.004  266.922  0.000    0.945    0.959
## 3    0.773 0.002  337.701  0.000    0.768    0.777
## 4    0.877 0.002  567.061  0.000    0.874    0.880
## 5    0.683 0.003  263.095  0.000    0.678    0.688
## 6    0.811 0.002  330.059  0.000    0.806    0.815
## 7    0.769 0.003  296.222  0.000    0.764    0.774
## 8    0.859 0.003  250.733  0.000    0.852    0.866
## 9    0.751 0.003  250.289  0.000    0.745    0.757
## 10   0.677 0.004  180.494  0.000    0.670    0.685
## 11   0.656 0.003  192.804  0.000    0.650    0.663
## 12   0.113 0.009   12.610  0.000    0.095    0.130
## 13  -0.075 0.008   -8.892  0.000   -0.091   -0.058
## 14   0.004 0.007    0.557  0.577   -0.010    0.018
## 15   0.061 0.008    7.621  0.000    0.045    0.077
## 16   0.329 0.007   45.340  0.000    0.315    0.343
## 17   0.932 0.003  271.232  0.000    0.925    0.939
## 18   0.435 0.005   82.091  0.000    0.424    0.445
## 19   0.093 0.007   13.738  0.000    0.080    0.107
## 20   0.403 0.004  114.040  0.000    0.396    0.410
## 21   0.230 0.003   84.759  0.000    0.225    0.235
## 22   0.534 0.004  150.483  0.000    0.527    0.541
## 23   0.343 0.004   86.122  0.000    0.335    0.351
## 24   0.409 0.004  102.393  0.000    0.401    0.417
## 25   0.262 0.006   44.543  0.000    0.251    0.274
## 26   0.436 0.005   96.593  0.000    0.427    0.444
## 27   0.541 0.005  106.390  0.000    0.531    0.551
## 28   0.569 0.004  127.446  0.000    0.561    0.578
## 29   1.000 0.000       NA     NA    1.000    1.000
## 30   0.994 0.001 1002.531  0.000    0.992    0.995
## 31   0.887 0.005  186.621  0.000    0.878    0.897
## 32   0.132 0.006   20.577  0.000    0.119    0.144
## 33   1.000 0.000       NA     NA    1.000    1.000
## 34   0.702 0.004  188.158  0.000    0.695    0.710

6.6 Nilai R-Square

inspect( 
  fit_sem, 
  "r2" 
)
##             Inflight.wifi.service            Ease.of.Online.booking 
##                             0.565                             0.907 
##                      Seat.comfort                       Cleanliness 
##                             0.597                             0.770 
##                  On.board.service                  Inflight.service 
##                             0.466                             0.657 
##                  Baggage.handling            Inflight.entertainment 
##                             0.591                             0.738 
##                    Food.and.drink                     Gate.location 
##                             0.564                             0.459 
## Departure.Arrival.time.convenient                           Comfort 
##                             0.431                             0.006 
##                   Service_Quality                     Entertainment 
##                             0.113                             0.868

Berdasarkan hasil Structural Equation Modeling (SEM), model menunjukkan tingkat kecocokan yang cukup baik terhadap data penelitian. Nilai SRMR telah memenuhi kriteria fit, sedangkan nilai CFI mendekati batas penerimaan sehingga model dapat dikategorikan sebagai marginal fit. Hasil analisis menunjukkan bahwa konstruk Entertainment memiliki pengaruh positif signifikan terhadap Service Quality. Selain itu, konstruk Comfort juga berpengaruh sangat kuat terhadap Entertainment. Sementara itu, pengaruh Online Service terhadap Service Quality tidak signifikan. Dengan demikian, faktor hiburan dan kenyamanan menjadi aspek yang paling berpengaruh dalam meningkatkan kualitas layanan maskapai penerbangan menurut persepsi pelanggan.

7. Visualisasi Model SEM

Berdasarkan hasil visualisasi SEM-CFA, sebagian besar indikator memiliki nilai factor loading di atas 0,5 sehingga mampu merepresentasikan konstruk laten dengan baik. Konstruk Online Service memiliki indikator terkuat yaitu Ease of Online booking sebesar 0,95, sedangkan konstruk Comfort paling dipengaruhi oleh Cleanliness sebesar 0,88. Pada konstruk Entertainment, indikator Inflight entertainment memiliki loading sebesar 0,86, dan pada konstruk Service Quality indikator Inflight service memiliki loading tertinggi sebesar 0,81.

Hubungan antar konstruk menunjukkan bahwa Entertainment berpengaruh positif terhadap Service Quality dengan koefisien sebesar 0,33. Sementara itu, Accessibility memiliki pengaruh negatif yang sangat lemah terhadap Comfort dengan koefisien sebesar -0,07.