1. Uji Normalitas Data Tunggal

Langkah 1 Masukkan data

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

penjualan
##  [1] 45 52 47 50 49 53 54 48 51 50 55 46 49 47 52 50 48 53 54 49

Penjelasan: Vector penjualan berisi jumlah penjualan harian selama 20 hari yang akan diuji normalitasnya.

Langkah 2 Histogram

hist(
  penjualan,
  main = "Histogram Data Penjualan",
  xlab = "Jumlah Penjualan",
  ylab = "Frekuensi",
  breaks = 7
)

Interpretasi: Histogram digunakan sebagai pemeriksaan awal terhadap bentuk distribusi data penjualan. Distribusi yang relatif simetris dan terpusat dapat menjadi indikasi awal bahwa data mendekati distribusi normal.

Langkah 3 Q-Q Plot

qqnorm(
  penjualan,
  main = "Q-Q Plot Data Penjualan"
)

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

Interpretasi: Pada Q-Q plot, normalitas dapat dilihat dari kedekatan titik-titik data terhadap garis referensi. Semakin dekat titik terhadap garis, semakin kuat indikasi bahwa data mengikuti distribusi normal.

Langkah 4 Uji Shapiro-Wilk

hasil_shapiro <- shapiro.test(penjualan)

hasil_shapiro
## 
##  Shapiro-Wilk normality test
## 
## data:  penjualan
## W = 0.96996, p-value = 0.754

Interpretasi: Hasil uji Shapiro-Wilk menunjukkan p-value lebih besar dari 0,05. Oleh karena itu, H0 tidak ditolak sehingga data penjualan dapat dianggap berdistribusi normal.

Langkah 5 Uji Kolmogorov–Smirnov

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

Interpretasi: Berdasarkan uji Kolmogorov–Smirnov, p-value lebih besar dari 0,05 sehingga H0 tidak ditolak. Dengan demikian, data penjualan juga memenuhi asumsi distribusi normal berdasarkan uji ini.

Langkah 6 Buat tabel ringkasan Soal 1

hasil_soal1 <- data.frame(
  Uji = c(
    "Shapiro-Wilk",
    "Kolmogorov-Smirnov"
  ),
  Statistik = c(
    unname(hasil_shapiro$statistic),
    unname(hasil_ks$statistic)
  ),
  P_Value = c(
    hasil_shapiro$p.value,
    hasil_ks$p.value
  )
)

hasil_soal1$Kesimpulan <- ifelse(
  hasil_soal1$P_Value > 0.05,
  "Normal",
  "Tidak Normal"
)

hasil_soal1$Statistik <- round(
  hasil_soal1$Statistik, 4
)

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

hasil_soal1
##                  Uji Statistik P_Value Kesimpulan
## 1       Shapiro-Wilk     0.970  0.7540     Normal
## 2 Kolmogorov-Smirnov     0.114  0.9573     Normal

Kesimpulan: Berdasarkan visualisasi histogram dan Q-Q plot serta hasil uji Shapiro-Wilk dan Kolmogorov–Smirnov, data penjualan harian tidak menunjukkan penyimpangan yang signifikan dari distribusi normal. Oleh karena itu, data penjualan dapat dianggap memenuhi asumsi normalitas.

2. Uji Normalitas Dua Variabel

Langkah 1 masukkan 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
)

data_normalitas <- list(
  Berat = berat,
  Tinggi = tinggi
)

Langkah 2 Shapiro-Wilk sekaligus dengan lapply()

hasil_shapiro2 <- lapply(
  data_normalitas,
  shapiro.test
)

hasil_shapiro2
## $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

Langkah 3 Buat tabel hasil

tabel_soal2 <- data.frame(
  Variabel = names(data_normalitas),
  W = sapply(
    hasil_shapiro2,
    function(x) unname(x$statistic)
  ),
  P_Value = sapply(
    hasil_shapiro2,
    function(x) x$p.value
  )
)

tabel_soal2$Kesimpulan <- ifelse(
  tabel_soal2$P_Value > 0.05,
  "Normal",
  "Tidak Normal"
)

tabel_soal2$W <- round(
  tabel_soal2$W, 4
)

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

tabel_soal2
##        Variabel      W P_Value Kesimpulan
## Berat     Berat 0.9826  0.8889     Normal
## Tinggi   Tinggi 0.9648  0.4071     Normal

Langkah 4 Q-Q plot berat dan tinggi

par(mfrow = c(1, 2))

qqnorm(
  berat,
  main = "Q-Q Plot Berat Badan"
)
qqline(
  berat,
  col = "red",
  lwd = 2
)

qqnorm(
  tinggi,
  main = "Q-Q Plot Tinggi Badan"
)
qqline(
  tinggi,
  col = "red",
  lwd = 2
)

par(mfrow = c(1, 1))

Interpretasi: Hasil uji Shapiro-Wilk menunjukkan bahwa variabel berat badan dan tinggi badan sama-sama mempunyai p-value lebih besar dari 0,05. Oleh karena itu, kedua variabel dapat dianggap memenuhi asumsi normalitas. Untuk tugas dosen yang meminta variabel mana yang lebih mendekati normal, berdasarkan hasil Shapiro-Wilk, berat mempunyai p-value lebih tinggi daripada tinggi. Q-Q plot juga digunakan untuk mendukung penilaian tersebut dengan melihat kedekatan titik terhadap garis referensi.

Kesimpulan Kesimpulan: Berat badan dan tinggi badan keduanya memenuhi asumsi distribusi normal. Berdasarkan hasil Shapiro-Wilk, berat badan menunjukkan indikasi normalitas yang lebih kuat dibandingkan tinggi badan.

3. Uji Normalitas Dataset mtcars

Langkah 1 Memanggil dataset

data_mtcars <- mtcars

head(
  data_mtcars[c("mpg", "hp", "wt")]
)
##                    mpg  hp    wt
## Mazda RX4         21.0 110 2.620
## Mazda RX4 Wag     21.0 110 2.875
## Datsun 710        22.8  93 2.320
## Hornet 4 Drive    21.4 110 3.215
## Hornet Sportabout 18.7 175 3.440
## Valiant           18.1 105 3.460

Langkah 2 Pilih variabel

variabel_mtcars <- data_mtcars[
  c("mpg", "hp", "wt")
]

Langkah 3 Uji Shapiro-Wilk

hasil_mtcars <- lapply(
  variabel_mtcars,
  shapiro.test
)

hasil_mtcars
## $mpg
## 
##  Shapiro-Wilk normality test
## 
## data:  X[[i]]
## W = 0.94756, p-value = 0.1229
## 
## 
## $hp
## 
##  Shapiro-Wilk normality test
## 
## data:  X[[i]]
## W = 0.93342, p-value = 0.04881
## 
## 
## $wt
## 
##  Shapiro-Wilk normality test
## 
## data:  X[[i]]
## W = 0.94326, p-value = 0.09265

Langkah 4 Buat tabel ringkas

tabel_mtcars <- data.frame(
  Variabel = names(variabel_mtcars),
  Statistik_W = sapply(
    hasil_mtcars,
    function(x) unname(x$statistic)
  ),
  P_Value = sapply(
    hasil_mtcars,
    function(x) x$p.value
  )
)

tabel_mtcars$Kesimpulan <- ifelse(
  tabel_mtcars$P_Value > 0.05,
  "Normal",
  "Tidak Normal"
)

tabel_mtcars$Statistik_W <- round(
  tabel_mtcars$Statistik_W, 4
)

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

tabel_mtcars
##     Variabel Statistik_W P_Value   Kesimpulan
## mpg      mpg      0.9476  0.1229       Normal
## hp        hp      0.9334  0.0488 Tidak Normal
## wt        wt      0.9433  0.0927       Normal

Langkah 5 Density Plot + Normal Overlay

par(mfrow = c(1, 3))

for (nama_var in c("mpg", "hp", "wt")) {
  
  x <- data_mtcars[[nama_var]]
  
  mu <- mean(x)
  sigma <- sd(x)
  
  plot(
    density(x),
    main = paste("Density", nama_var),
    xlab = nama_var,
    lwd = 2
  )
  
  curve(
    dnorm(
      x,
      mean = mu,
      sd = sigma
    ),
    add = TRUE,
    col = "red",
    lwd = 2
  )
}

par(mfrow = c(1, 1))

Interpretasi: Pada taraf signifikansi 5%, variabel mpg memiliki p-value sekitar 0,1229 dan wt sekitar 0,0927. Karena kedua p-value lebih besar dari 0,05, kedua variabel dapat dianggap memenuhi asumsi normalitas. Variabel hp memiliki p-value sekitar 0,0488 yang lebih kecil dari 0,05, sehingga H0 ditolak dan hp tidak memenuhi asumsi normalitas.

Kesimpulan Kesimpulan: Dari tiga variabel mtcars yang diuji, mpg dan wt memenuhi asumsi normalitas, sedangkan hp menunjukkan penyimpangan yang signifikan dari distribusi normal.

4. Pertanyaan Reflektif

4.1 Mengapa uji normalitas penting?

Uji normalitas penting karena beberapa metode statistik parametrik, seperti uji-t dan ANOVA, menggunakan asumsi normalitas dalam proses inferensinya. Pemeriksaan normalitas membantu memastikan bahwa metode statistik yang digunakan sesuai sehingga hasil pengujian dan kesimpulan yang diperoleh dapat dipercaya. Selain uji statistik, pemeriksaan grafik seperti histogram dan Q-Q plot juga penting untuk membantu menilai bentuk distribusi data.

4.2 Jika data tidak normal, apa alternatifnya?

Jika data tidak memenuhi asumsi normalitas, dapat digunakan metode nonparametrik yang tidak mensyaratkan distribusi normal. Contohnya adalah Mann–Whitney U/Wilcoxon rank-sum sebagai alternatif uji-t dua sampel independen, Wilcoxon signed-rank untuk data berpasangan, dan Kruskal–Wallis sebagai alternatif ANOVA satu arah. Transformasi data juga dapat dipertimbangkan apabila sesuai dengan karakteristik data.