Nama Aggota Kelompok:

1. Christine Aprilia Putri (24031554046)

2. Fridania Nisa Calita (24031554208)

EDA

####1.Struktur Data

str(data)
## spc_tbl_ [1,029 × 15] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
##  $ Q1_Gender              : num [1:1029] 1 1 2 1 1 2 1 2 2 2 ...
##  $ Q2_Living_Area         : num [1:1029] 1 1 1 2 1 2 2 1 2 1 ...
##  $ Q3_Maritial_Status     : num [1:1029] 2 2 2 2 2 2 2 2 2 2 ...
##  $ SMAQ1                  : num [1:1029] 4 3 3 2 1 3 4 5 4 2 ...
##  $ SMAQ2                  : num [1:1029] 5 2 2 5 4 3 5 4 5 2 ...
##  $ SMAQ3                  : num [1:1029] 1 1 1 5 3 4 2 3 2 1 ...
##  $ SMAQ4                  : num [1:1029] 3 5 1 2 1 1 2 3 1 1 ...
##  $ SMAQ5                  : num [1:1029] 5 5 1 3 2 5 1 4 3 1 ...
##  $ SMAQ6                  : num [1:1029] 2 1 1 1 1 1 4 4 1 1 ...
##  $ SMAQ7                  : num [1:1029] 2 1 1 3 1 3 1 2 1 1 ...
##  $ SMAQ8                  : num [1:1029] 4 2 1 4 1 3 1 1 3 1 ...
##  $ SMAQ9                  : num [1:1029] 5 5 1 4 1 3 2 3 4 1 ...
##  $ SMAQ10                 : num [1:1029] 3 1 1 1 1 1 1 1 1 1 ...
##  $ SMA_Scale_value        : num [1:1029] 34 26 13 30 16 27 23 30 25 12 ...
##  $ SMA_Scale (Class_Lebel): num [1:1029] 2 2 1 2 1 2 2 2 2 1 ...
##  - attr(*, "spec")=
##   .. cols(
##   ..   Q1_Gender = col_double(),
##   ..   Q2_Living_Area = col_double(),
##   ..   Q3_Maritial_Status = col_double(),
##   ..   SMAQ1 = col_double(),
##   ..   SMAQ2 = col_double(),
##   ..   SMAQ3 = col_double(),
##   ..   SMAQ4 = col_double(),
##   ..   SMAQ5 = col_double(),
##   ..   SMAQ6 = col_double(),
##   ..   SMAQ7 = col_double(),
##   ..   SMAQ8 = col_double(),
##   ..   SMAQ9 = col_double(),
##   ..   SMAQ10 = col_double(),
##   ..   SMA_Scale_value = col_double(),
##   ..   `SMA_Scale (Class_Lebel)` = col_double()
##   .. )
##  - attr(*, "problems")=<externalptr>

####2.Ringkasan data

summary(data)
##    Q1_Gender     Q2_Living_Area  Q3_Maritial_Status     SMAQ1      
##  Min.   :1.000   Min.   :1.000   Min.   :1.00       Min.   :1.000  
##  1st Qu.:1.000   1st Qu.:1.000   1st Qu.:2.00       1st Qu.:3.000  
##  Median :1.000   Median :1.000   Median :2.00       Median :4.000  
##  Mean   :1.364   Mean   :1.291   Mean   :1.94       Mean   :3.926  
##  3rd Qu.:2.000   3rd Qu.:2.000   3rd Qu.:2.00       3rd Qu.:5.000  
##  Max.   :2.000   Max.   :2.000   Max.   :2.00       Max.   :5.000  
##      SMAQ2           SMAQ3           SMAQ4           SMAQ5           SMAQ6     
##  Min.   :1.000   Min.   :1.000   Min.   :1.000   Min.   :1.000   Min.   :1.00  
##  1st Qu.:3.000   1st Qu.:1.000   1st Qu.:1.000   1st Qu.:2.000   1st Qu.:1.00  
##  Median :3.000   Median :3.000   Median :2.000   Median :3.000   Median :2.00  
##  Mean   :3.335   Mean   :2.743   Mean   :2.183   Mean   :2.899   Mean   :2.39  
##  3rd Qu.:4.000   3rd Qu.:4.000   3rd Qu.:3.000   3rd Qu.:4.000   3rd Qu.:3.00  
##  Max.   :5.000   Max.   :5.000   Max.   :5.000   Max.   :5.000   Max.   :5.00  
##      SMAQ7           SMAQ8           SMAQ9           SMAQ10     
##  Min.   :1.000   Min.   :1.000   Min.   :1.000   Min.   :1.000  
##  1st Qu.:1.000   1st Qu.:1.000   1st Qu.:2.000   1st Qu.:1.000  
##  Median :2.000   Median :2.000   Median :3.000   Median :1.000  
##  Mean   :2.029   Mean   :2.492   Mean   :3.204   Mean   :1.397  
##  3rd Qu.:3.000   3rd Qu.:3.000   3rd Qu.:4.000   3rd Qu.:1.000  
##  Max.   :5.000   Max.   :5.000   Max.   :5.000   Max.   :5.000  
##  SMA_Scale_value SMA_Scale (Class_Lebel)
##  Min.   :10.0    Min.   :1.000          
##  1st Qu.:21.0    1st Qu.:2.000          
##  Median :26.0    Median :2.000          
##  Mean   :26.6    Mean   :1.821          
##  3rd Qu.:32.0    3rd Qu.:2.000          
##  Max.   :50.0    Max.   :3.000

####3.Missing value

cat("Jumlah Missing Value:",
    sum(is.na(data)), "\n")
## Jumlah Missing Value: 0

####4.Data duplikat

cat("Jumlah Data Duplikat:",
    sum(duplicated(data)), "\n")
## Jumlah Data Duplikat: 34

Hapus Duplikat

data_clean <- data %>%
  distinct()

###5. Visualisasi Demografi

# Distribusi Gender
ggplot(data_clean, aes(x = as.factor(Q1_Gender))) +
  geom_bar(fill = "skyblue", color = "black", alpha = 0.8) +
  labs(title = "Distribusi Gender", x = "Gender", y = "Frekuensi") +
  theme_minimal()

# Distribusi Living Area
ggplot(data_clean, aes(x = as.factor(Q2_Living_Area))) +
  geom_bar(fill = "orange", color = "black", alpha = 0.8) +
  labs(title = "Distribusi Living Area", x = "Living Area", y = "Frekuensi") +
  theme_minimal()

# Distribusi Maritial Status
ggplot(data_clean, aes(x = as.factor(Q3_Maritial_Status))) +
  geom_bar(fill = "red", color = "black", alpha = 0.8) +
  labs(title = "Distribusi Maritial Status", x = "Maritial Status", y = "Frekuensi") +
  theme_minimal()

Preprocessing Data

Variabel turunan tidak digunakan

data_pls <- data_clean %>%
  select(
    SMAQ2, SMAQ3, SMAQ4, SMAQ7, SMAQ8, SMAQ9,
    Class_Label = `SMA_Scale (Class_Lebel)`
  )

data_pls <- as.data.frame(data_pls)
data_pls[] <- lapply(data_pls, as.numeric)

###MODEL SPECIFICATION

sma_path <- matrix(c(
  0, 0,
  1, 0
), nrow = 2, byrow = TRUE)

colnames(sma_path) <- rownames(sma_path) <- c(
  "Social_Media_Addiction",
  "Addiction_Level"
)

sma_blocks <- list(
  Social_Media_Addiction = 1:6,
  Addiction_Level = 7
)

sma_modes <- c("A", "A")

ESTIMASI MODEL

model_plspm <- plspm(
  Data = data_pls,
  path_matrix = sma_path,
  blocks = sma_blocks,
  modes = sma_modes
)

OUTER MODEL (LOADING)

loadings_sma <- model_plspm$outer_model %>%
  filter(block == "Social_Media_Addiction") %>%
  select(name, loading)

print(data.frame(
  Indikator = loadings_sma$name,
  Loading = round(loadings_sma$loading, 4)
))
##   Indikator Loading
## 1     SMAQ2  0.7081
## 2     SMAQ3  0.6799
## 3     SMAQ4  0.7405
## 4     SMAQ7  0.6939
## 5     SMAQ8  0.8055
## 6     SMAQ9  0.7474

###UNIDIMENSIONALITY (ALPHA & CR)

print(model_plspm$unidim)
##                        Mode MVs   C.alpha    DG.rho eig.1st   eig.2nd
## Social_Media_Addiction    A   6 0.8241045 0.8724366 3.20117 0.8616297
## Addiction_Level           A   1 1.0000000 1.0000000 1.00000 0.0000000

EVALUASI MODEL (AVE, ALPHA, CR)

unidim <- model_plspm$unidim

alpha_final <- unidim$C.alpha[1]
cr_final    <- unidim$DG.rho[1]

# AVE dihitung manual
loadings <- model_plspm$outer_model$loading
loadings_sma <- loadings[model_plspm$outer_model$block == "Social_Media_Addiction"]
ave_final <- mean(loadings_sma^2)

VALIDITAS DISKRIMINAN (HTMT)

indikator_sma <- data_pls[, 1:6]  
indikator_y   <- data_pls[, 7, drop = FALSE]  

matriks_kor_internal <- cor(indikator_sma)
mean_kor_internal <- mean(matriks_kor_internal[lower.tri(matriks_kor_internal)])

matriks_kor_silang <- cor(indikator_sma, indikator_y)
mean_kor_silang <- mean(abs(matriks_kor_silang))

nilai_htmt <- mean_kor_silang / sqrt(mean_kor_internal * 1)

cat("Nilai HTMT Resmi Model Kamu:", round(nilai_htmt, 4), "\n")
## Nilai HTMT Resmi Model Kamu: 0.8487
cat("Ambang Batas Toleransi     : < 0.85 atau < 0.90\n")
## Ambang Batas Toleransi     : < 0.85 atau < 0.90
if (nilai_htmt < 0.85) {
  cat("Kesimpulan: VALIDITAS DISKRIMINAN TERPENUHI (Model Sangat Baik)\n")
} else {
  cat("Kesimpulan: Validitas Diskriminan Lemah\n")
}
## Kesimpulan: VALIDITAS DISKRIMINAN TERPENUHI (Model Sangat Baik)

KESIMPULAN MODEL

cat("1. AVE   :", round(ave_final, 4), " (Syarat > 0.50)\n")
## 1. AVE   : 0.5335  (Syarat > 0.50)
cat("2. Alpha :", round(alpha_final, 4), " (Syarat > 0.70)\n")
## 2. Alpha : 0.8241  (Syarat > 0.70)
cat("3. CR    :", round(cr_final, 4), " (Syarat > 0.70)\n")
## 3. CR    : 0.8724  (Syarat > 0.70)
cat("4. HTMT  :", round(nilai_htmt, 4), " (Syarat < 0.85)\n")
## 4. HTMT  : 0.8487  (Syarat < 0.85)
if (ave_final >= 0.5 & alpha_final >= 0.7 & cr_final >= 0.7 & nilai_htmt < 0.85) {
  cat("\nSTATUS FINAL: OUTER MODEL FIT, VALID, DAN RELIABEL\n")
} else {
  cat("\nSTATUS FINAL: MODEL BELUM MEMENUHI KRITERIA\n")
}
## 
## STATUS FINAL: OUTER MODEL FIT, VALID, DAN RELIABEL