Soal 1

Uji Normalitas Data Tunggal

Persiapan Data

penjualan <- c(45, 52, 47, 50, 49, 53, 54, 48, 51, 50, 
               55, 46, 49, 47, 52, 50, 48, 53, 54, 49)

Visualisasi Data (Histogram dan QQ-Plot)

par(mfrow = c(1, 2))

# 1. Histogram
hist(penjualan, 
     main = "Histogram Penjualan", 
     xlab = "Jumlah Penjualan (unit)", 
     col = "pink", 
     border = "lightblue")

# 2. QQ-Plot
qqnorm(penjualan, main = "Q-Q Plot Penjualan")
qqline(penjualan, col = "coral3", lwd = 2)

## Uji Shapiro-Wilk dan Uji Kolmogrov-Smirnov

# Uji Shapiro-Wilk
uji_sw <- shapiro.test(penjualan)
print(uji_sw)
## 
##  Shapiro-Wilk normality test
## 
## data:  penjualan
## W = 0.96996, p-value = 0.754
# Uji Kolmogorov-Smirnov 
uji_ks <- ks.test(scale(penjualan), "pnorm")
## Warning in ks.test.default(scale(penjualan), "pnorm"): ties should not be
## present for the one-sample Kolmogorov-Smirnov test
print(uji_ks)
## 
##  Asymptotic one-sample Kolmogorov-Smirnov test
## 
## data:  scale(penjualan)
## D = 0.11402, p-value = 0.9573
## alternative hypothesis: two-sided

Interpretasi Hasil Uji dan Nilai p-value

# Menampilkan nilai p-value secara langsung
cat("p-value Shapiro-Wilk       :", uji_sw$p.value, "\n")
## p-value Shapiro-Wilk       : 0.754028
cat("p-value Kolmogorov-Smirnov :", uji_ks$p.value, "\n")
## p-value Kolmogorov-Smirnov : 0.9572511

Interpretasi

1.Uji Shapiro-Wilk, diperoleh nilai W=0,970 dengan p-value 0,754 2. Uji Kolmogorov-Smirnov, diperoleh nilai D=0,114 dengan p-value 0.931 3. Karena kedua nilai p-value > 0.05 maka H0 gagal ditolak. Artinya data jumlah penjualan harian berdistribusi normal.

Soal 2

Uji Normalitas pada Dua Variabel

Persiapan Data

berat <- c(55, 60, 62, 58, 64, 70, 68, 72, 59, 61,
           63, 65, 66, 67, 71, 69, 60, 58, 62, 64,
           73, 75, 77, 68, 70, 72, 74, 69, 63, 65)

tinggi <- c(160, 162, 164, 158, 166, 172, 170, 175, 161, 163,
            165, 167, 169, 171, 173, 174, 160, 159, 164, 166,
            176, 178, 180, 172, 174, 176, 177, 171, 165, 167)

# Menggabungkan ke dalam sebuah list atau data frame
data_list <- list(Berat = berat, Tinggi = tinggi)

Menguji Normalitas Kedua Variabel

# Menggunakan lapply() untuk uji Shapiro-Wilk pada kedua variabel
hasil_uji <- lapply(data_list, shapiro.test)
hasil_uji
## $Berat
## 
##  Shapiro-Wilk normality test
## 
## data:  X[[i]]
## W = 0.98257, p-value = 0.8889
## 
## 
## $Tinggi
## 
##  Shapiro-Wilk normality test
## 
## data:  X[[i]]
## W = 0.96475, p-value = 0.4071
# Menampilkan ringkasan nilai p-value dan W
sapply(hasil_uji, function(x) c(W = x$statistic, p_value = x$p.value))
##             Berat    Tinggi
## W.W     0.9825681 0.9647532
## p_value 0.8889398 0.4071377

Membuat QQ-Plot untuk Tiap Variabel

par(mfrow = c(1, 2))

# QQ-Plot Variabel Berat
qqnorm(berat, main = "Q-Q Plot Berat Badan", pch = 19, col = "cadetblue4")
qqline(berat, col = "brown3", lwd = 2)

# QQ-Plot Variabel Tinggi
qqnorm(tinggi, main = "Q-Q Plot Tinggi Badan", pch = 19, col = "burlywood4")
qqline(tinggi, col = "aquamarine4", lwd = 2)

## Perbandingan dan Kesimpulan

# Menampilkan ringkasan nilai p-value dan W
sapply(hasil_uji, function(x) c(W = x$statistic, p_value = x$p.value))
##             Berat    Tinggi
## W.W     0.9825681 0.9647532
## p_value 0.8889398 0.4071377

Interpretasi

  1. Var berat: W=0.9826, p-value = 0.8889
  2. Var tinggi: W = 0.9648, p-value = 0.4071 Kedua variabel sama-sama berdistribusi normal karena keduanya memiliki p-value > 0.05. Namun, variabel berat badan memiliki nilai statistik W yang lebih mendekati 1 dan p-value yang lebih besar. Oleh karena itu, var berat badan lebih mendekati distribusi normal.

Soal 3

Uji Normalitas pada Dataset R

Persiapan data

data <- mtcars

Uji Shapiro-Wilk

shapiro.test(data$mpg)
## 
##  Shapiro-Wilk normality test
## 
## data:  data$mpg
## W = 0.94756, p-value = 0.1229
shapiro.test(data$hp)
## 
##  Shapiro-Wilk normality test
## 
## data:  data$hp
## W = 0.93342, p-value = 0.04881
shapiro.test(data$wt)
## 
##  Shapiro-Wilk normality test
## 
## data:  data$wt
## W = 0.94326, p-value = 0.09265

Visualisasi Density Plot dengan Normal Overlay

par(mfrow = c(1, 3))

# Daftar variabel yang akan diplot
vars <- c("mpg", "hp", "wt")
labels <- c("Miles per Gallon (mpg)", "Horsepower (hp)", "Weight (wt)")

for (i in 1:3) {
  x <- data[[vars[i]]]
  
# Plot kurva densitas empiris data
  plot(density(x), 
       main = paste("Density Plot:", vars[i]),
       xlab = labels[i], 
       col = "lightblue", 
       lwd = 2)
  
# Membuat kurva distribusi normal teoritis sebagai overlay
  x_seq <- seq(min(x), max(x), length.out = 100)
  y_norm <- dnorm(x_seq, mean = mean(x), sd = sd(x))
  lines(x_seq, y_norm, col = "pink", lty = 2, lwd = 2)
  
  # Menambahkan legenda
  legend("topright", legend = c("Empirical", "Normal"), 
         col = c("lightblue", "pink"), lty = c(1, 2), lwd = 2, cex = 0.8)
}

## Membuat tabel ringkas hasil uji

library(dplyr)
## Warning: package 'dplyr' was built under R version 4.5.2
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
# Daftar variabel yang diuji
variabel <- c("mpg", "hp", "wt")

# Membuat tabel ringkas secara langsung
tabel_ringkas <- data.frame(
  Variabel = variabel,
  `Statistik W` = sapply(data[variabel], function(x) round(shapiro.test(x)$statistic, 4)),
  `p-value`     = sapply(data[variabel], function(x) round(shapiro.test(x)$p.value, 4)),
  row.names = NULL,
  check.names = FALSE
)

# Menambahkan kolom kesimpulan
tabel_ringkas$Kesimpulan <- ifelse(tabel_ringkas$`p-value` > 0.05, 
                                   "Berdistribusi Normal", 
                                   "Tidak Berdistribusi Normal")

# Tampilkan tabel
print(tabel_ringkas)
##   Variabel Statistik W p-value                 Kesimpulan
## 1      mpg      0.9476  0.1229       Berdistribusi Normal
## 2       hp      0.9334  0.0488 Tidak Berdistribusi Normal
## 3       wt      0.9433  0.0927       Berdistribusi Normal

Pertanyaan Reflektif

  1. Mengapa penting melakukan uji normalitas sebelum analisis inferensial seperti uji-t atau ANOVA?
  1. Memenuhi Asumsi Parametrik: Uji-t dan ANOVA adalah metode statistik parametrik yang diturunkan berdasarkan asumsi dasar bahwa galat/sisaan (residual) atau data berasal dari populasi yang berdistribusi normal.
  2. Akurasi Nilai p-value dan Tingkat Kesalahan (Tipe I): Jika asumsi normalitas dilanggar secara parah (khususnya pada sampel kecil), statistik uji (t-hitung atau F-hitung) menjadi tidak akurat sehingga estimasi nilai p-value bias dan risiko membuat kesimpulan yang salah (misalnya menolak H0 padahal benar) meningkat.
  3. Validitas Estimasi Parameter: Distribusi normal memastikan bahwa rata-rata (mean) dan varians merupakan representasi parameter populasi terbaik (unbiased dan efisien).
  1. Jika data tidak berdistribusi normal, metode apa yang dapat digunakan sebagai alternatif (misal uji non-parametrik)?
  1. Menggunakan Uji Non-Parametrik (Metode Utama): Uji non-parametrik tidak bergantung pada bentuk distribusi populasi tertentu (berbasis peringkat/rank): Alternatif Uji-t Satu Sampel / Berpasangan: Uji Peringkat Bertanda Wilcoxon (Wilcoxon Signed-Rank Test). Alternatif Uji-t Dua Sampel Bebas: Uji Mann-Whitney U / Wilcoxon Rank-Sum (Mann-Whitney U Test). Alternatif One-Way ANOVA: Uji Kruskal-Wallis (Kruskal-Wallis Test). Alternatif Repeated Measures ANOVA: Uji Friedman (Friedman Test). Alternatif Korelasi Pearson: Korelasi Spearman Rank atau Kendall’s Tau.

  2. Transformasi Data: Mengubah skala data agar mendekati bentuk normal sebelum diuji kembali, contohnya: Transformasi Logaritmik (log(x)) ln(x) untuk data yang menceng ke kanan (right-skewed). Transformasi Akar Kuadrat (akar x) Transformasi Box-Cox.

  3. Metode Resampling (Bootstrapping / Permutasi): Menggunakan teknik komputasi modern seperti bootstrapping untuk mengestimasi selang kepercayaan (confidence intervals) dan signifikansi tanpa asumsi distribusi tertentu.