SOAL 1: Uji Normalitas Data Tunggal

Sebuah data berikut menunjukkan jumlah penjualan harian (unit) pada sebuah toko selama 20 hari:

penjualan <- c(45, 52, 47, 50, 49, 53, 54, 48, 51, 50,
               55, 46, 49, 47, 52, 50, 48, 53, 54, 49)
  1. Visualisasikan data menggunakan histogram dan QQ-plot.
  2. Lakukan Uji Shapiro-Wilk dan Uji Kolmogorov–Smirnov.
  3. Interpretasikan hasil uji dan tuliskan nilai p-value. shapiro.test(penjualan) ks.test(scale(penjualan), “pnorm”)

Histogram

hist(penjualan,
     main = "Histogram Penjualan Harian",
     xlab = "Jumlah Penjualan (unit)",
     ylab = "Frekuensi",
     col = "lightblue",
     border = "black")

QQ Plot

qqnorm(penjualan,
       main = "QQ Plot Penjualan Harian")

qqline(penjualan,
       col = "red",
       lwd = 2)

Uji Shapiro-Wilk

shapiro.test(penjualan)
## 
##  Shapiro-Wilk normality test
## 
## data:  penjualan
## W = 0.96996, p-value = 0.754

Uji Kolmogorov-Smirnov

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
## 
##  Asymptotic one-sample Kolmogorov-Smirnov test
## 
## data:  scale(penjualan)
## D = 0.11402, p-value = 0.9573
## alternative hypothesis: two-sided

SOAL 2: Uji Normalitas pada Dua Variabel

Gunakan data hipotetik berikut mengenai berat badan (kg) dan tinggi badan (cm) dari 30 responden:

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)
  1. Gunakan mapply() atau lapply() untuk menguji normalitas kedua variabel secara bersamaan.
  2. Buat QQ plot untuk masing-masing variabel.
  3. Bandingkan hasil uji Shapiro-Wilk dan simpulkan variabel mana yang lebih mendekati distribusi normal.

Uji Normalitas Bersamaan

data_responden <- data.frame(berat, tinggi)
lapply(data_responden, shapiro.test)
## $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

QQ Plot

qqnorm(berat, main = "QQ Plot Berat Badan")
qqline(berat, col = "red")

qqnorm(tinggi, main = "QQ Plot Tinggi Badan")
qqline(tinggi, col = "red")


SOAL 3 (Tantangan): Uji Normalitas pada Dataset R

Gunakan dataset bawaan R berikut:

data <- mtcars
  1. Ujilah apakah variabel mpg, hp, dan wt berdistribusi normal.
  2. Gunakan pendekatan: Shapiro-Wilk testVisualisasi density plot dengan garis normal overlay.
  3. Buat tabel ringkas berisi hasil uji.

Visualisasi Density Plot dengan Garis Normal Overlay

par(mfrow = c(1, 3))
vars <- c("mpg", "hp", "wt")
for (v in vars) {
  x <- data[[v]]
  plot(density(x), main = paste("Density Plot:", v), xlab = v, col = "blue", lwd = 2)
  curve(dnorm(x, mean = mean(x), sd = sd(x)), add = TRUE, col = "red", lty = 2, lwd = 2)
}

par(mfrow = c(1, 1))

Uji Shapiro-Wilk

library(dplyr)
## 
## 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
library(purrr)
## Warning: package 'purrr' was built under R version 4.5.2
data %>%
  select(mpg, hp, wt) %>%
  map_df(~ data.frame(
    Statistik_W = shapiro.test(.x)$statistic,
    p_value     = shapiro.test(.x)$p.value
  ), .id = "Variabel")
##       Variabel Statistik_W    p_value
## W...1      mpg   0.9475647 0.12288136
## W...2       hp   0.9334193 0.04880824
## W...3       wt   0.9432577 0.09265499