# 1. PANGGIL PACKAGE

#install.packages("readxl")
#install.packages("psych")

library(readxl)
library(psych)
# 2. INPUT DATA EXCEL

data_awal <- read_excel(file.choose())

cat("\n==============================================\n")
## 
## ==============================================
cat("                 INPUT DATA\n")
##                  INPUT DATA
cat("==============================================\n")
## ==============================================
cat("Jumlah Responden :", nrow(data_awal), "\n")
## Jumlah Responden : 23
cat("Jumlah Kolom     :", ncol(data_awal), "\n")
## Jumlah Kolom     : 27
cat("==============================================\n")
## ==============================================
# 3. MEMILIH KOLOM PERNYATAAN
kolom <- grep("Pilih tingkat kesesuaian", names(data_awal))

data <- data_awal[, kolom]

# Mengubah data menjadi numerik
data[] <- lapply(data, function(x) as.numeric(as.character(x)))

# Menghapus baris yang memiliki data kosong
data <- na.omit(data)

# Mengubah nama kolom menjadi P1, P2, ..., P22
names(data) <- paste0("P", seq_len(ncol(data)))

cat("\n==============================================\n")
## 
## ==============================================
cat("             DATA KUESIONER\n")
##              DATA KUESIONER
cat("==============================================\n")
## ==============================================
cat("Jumlah Responden :", nrow(data), "\n")
## Jumlah Responden : 23
cat("Jumlah Pernyataan:", ncol(data), "\n")
## Jumlah Pernyataan: 22
cat("==============================================\n")
## ==============================================
# 4. UJI VALIDITAS
n <- nrow(data)

hasil_validitas <- data.frame()

for (i in seq_len(ncol(data))) {

  # Total skor tanpa item yang diuji
  total <- rowSums(data[, -i, drop = FALSE])

  # Korelasi Pearson
  uji <- cor.test(data[[i]], total, method = "pearson")

  hasil_validitas <- rbind(
    hasil_validitas,
    data.frame(
      Item = names(data)[i],
      Koefisien_Korelasi = unname(uji$estimate),
      P_Value = uji$p.value
    )
  )
}

# Menghitung r tabel
df <- n - 2
t_tabel <- qt(0.975, df)
r_tabel <- t_tabel / sqrt(t_tabel^2 + df)

# Menentukan keputusan
hasil_validitas$Keputusan <- ifelse(
  abs(hasil_validitas$Koefisien_Korelasi) > r_tabel &
    hasil_validitas$P_Value < 0.05,
  "Valid",
  "Tidak Valid"
)

# Menampilkan hasil
cat("\n==============================================\n")
## 
## ==============================================
cat("                 UJI VALIDITAS\n")
##                  UJI VALIDITAS
cat("==============================================\n")
## ==============================================
cat("Metode              : Korelasi Pearson\n")
## Metode              : Korelasi Pearson
cat("Jumlah Responden    :", n, "\n")
## Jumlah Responden    : 23
cat("Derajat Bebas (df)  :", df, "\n")
## Derajat Bebas (df)  : 21
cat("Nilai r Tabel       :", round(r_tabel, 4), "\n")
## Nilai r Tabel       : 0.4132
cat("Taraf Signifikansi  : 0.05\n")
## Taraf Signifikansi  : 0.05
cat("----------------------------------------------\n")
## ----------------------------------------------
hasil_tampil <- hasil_validitas

hasil_tampil$Koefisien_Korelasi <- round(
  hasil_tampil$Koefisien_Korelasi, 4
)

hasil_tampil$P_Value <- round(
  hasil_tampil$P_Value, 4
)

print(hasil_tampil, row.names = FALSE)
##  Item Koefisien_Korelasi P_Value   Keputusan
##    P1             0.9493  0.0000       Valid
##    P2             0.9493  0.0000       Valid
##    P3             0.9641  0.0000       Valid
##    P4             0.7225  0.0001       Valid
##    P5             0.8749  0.0000       Valid
##    P6             0.7068  0.0002       Valid
##    P7             0.7439  0.0000       Valid
##    P8             0.7250  0.0001       Valid
##    P9             0.9522  0.0000       Valid
##   P10             0.8652  0.0000       Valid
##   P11             0.8706  0.0000       Valid
##   P12             0.9148  0.0000       Valid
##   P13             0.9388  0.0000       Valid
##   P14             0.8265  0.0000       Valid
##   P15             0.8153  0.0000       Valid
##   P16             0.9641  0.0000       Valid
##   P17             0.8499  0.0000       Valid
##   P18             0.8015  0.0000       Valid
##   P19             0.7429  0.0000       Valid
##   P20             0.7429  0.0000       Valid
##   P21             0.3626  0.0890 Tidak Valid
##   P22             0.6661  0.0005       Valid
cat("----------------------------------------------\n")
## ----------------------------------------------
cat("Item Valid     :",
    sum(hasil_validitas$Keputusan == "Valid"), "\n")
## Item Valid     : 21
cat("Item Tidak Valid:",
    sum(hasil_validitas$Keputusan == "Tidak Valid"), "\n")
## Item Tidak Valid: 1
cat("==============================================\n")
## ==============================================
# 5. UJI RELIABILITAS

hasil_reliabilitas <- suppressWarnings(
  psych::alpha(data, check.keys = FALSE)
)

alpha <- hasil_reliabilitas$total$raw_alpha

cat("\n==============================================\n")
## 
## ==============================================
cat("                UJI RELIABILITAS\n")
##                 UJI RELIABILITAS
cat("==============================================\n")
## ==============================================
cat("Metode           : Cronbach's Alpha\n")
## Metode           : Cronbach's Alpha
cat("Jumlah Pernyataan:", ncol(data), "\n")
## Jumlah Pernyataan: 22
cat("Cronbach's Alpha :", round(alpha, 4), "\n")
## Cronbach's Alpha : 0.9775
cat("----------------------------------------------\n")
## ----------------------------------------------
if (alpha >= 0.90) {
  cat("Keterangan       : Sangat Reliabel\n")
} else if (alpha >= 0.80) {
  cat("Keterangan       : Reliabel (Baik)\n")
} else if (alpha >= 0.70) {
  cat("Keterangan       : Reliabel\n")
} else {
  cat("Keterangan       : Belum Memenuhi Kriteria\n")
}
## Keterangan       : Sangat Reliabel
cat("==============================================\n")
## ==============================================