Aplikasi jejak karbon EcoTrack mencatat menit penggunaan harian dari 15 pengguna aktif dalam satu minggu.
menit <- c(22, 25, 19, 30, 24, 21, 45, 23, 20, 26, 24, 22, 18, 27, 23)
n <- length(menit)
sort(menit)## [1] 18 19 20 21 22 22 23 23 24 24 25 26 27 30 45
## [1] 24.6
## [1] 23
## [1] 22
## menit
## 18 19 20 21 22 23 24 25 26 27 30 45
## 1 1 1 1 2 2 2 1 1 1 1 1
freq <- as.data.frame(table(menit))
freq$menit <- as.numeric(as.character(freq$menit))
freq$Keterangan <- ifelse(freq$Freq == max(freq$Freq), "Modus", "Lainnya")
ggplot(freq, aes(x = menit, y = Freq, fill = Keterangan)) +
geom_col(width = 0.8) +
geom_vline(xintercept = mean(menit), color = "#E63946", linetype = "dashed", linewidth = 1) +
geom_vline(xintercept = median(menit), color = "#2A9D8F", linetype = "dashed", linewidth = 1) +
annotate("text", x = mean(menit) + 0.4, y = 2.4, label = "Mean = 24,6",
color = "#E63946", hjust = 0, fontface = "bold") +
annotate("text", x = median(menit) - 0.4, y = 2.4, label = "Median = 23",
color = "#2A9D8F", hjust = 1, fontface = "bold") +
scale_fill_manual(values = c("Modus" = "#F4A261", "Lainnya" = "#A8DADC")) +
scale_y_continuous(breaks = 0:2, limits = c(0, 2.6)) +
labs(title = "Frekuensi Menit Penggunaan Harian EcoTrack",
subtitle = "Batang oranye adalah nilai yang paling sering muncul",
x = "Menit Penggunaan", y = "Frekuensi", fill = NULL) +
temaInterpretasi: Menurut saya, median (23 menit) lebih
mewakili pusat data dibanding mean (24,6 menit), karena mean tertarik ke
atas oleh satu pengguna yang mencapai 45 menit. Fungsi
modus() hanya menampilkan 22, padahal dari tabel frekuensi
terlihat 22, 23, dan 24 sama-sama muncul dua kali, jadi data ini
sebenarnya memiliki tiga modus.
## 25% 75%
## 21 26
## [1] 5
q <- quantile(menit, probs = c(0.25, 0.5, 0.75), type = 6)
batas_atas <- q[3] + 1.5 * IQR(menit, type = 6)
set.seed(1)
df2 <- data.frame(menit = menit, y = runif(n, -0.2, 0.2))
df2$Status <- ifelse(df2$menit > batas_atas, "Outlier", "Normal")
ggplot(df2, aes(x = menit, y = y)) +
annotate("rect", xmin = q[1], xmax = q[3], ymin = -0.45, ymax = 0.45,
fill = "#A8DADC", alpha = 0.5) +
geom_vline(xintercept = q, color = c("#457B9D", "#1D3557", "#457B9D"), linewidth = 1) +
geom_point(aes(color = Status), size = 4, alpha = 0.85) +
annotate("text", x = q[1], y = 0.55, label = "Q1 = 21", fontface = "bold", color = "#457B9D") +
annotate("text", x = q[3], y = 0.55, label = "Q3 = 26", fontface = "bold", color = "#457B9D") +
scale_color_manual(values = c("Normal" = "#1D3557", "Outlier" = "#E63946")) +
scale_y_continuous(limits = c(-0.6, 0.7)) +
labs(title = "Sebaran Pengguna dan Rentang Antar Kuartil (IQR)",
subtitle = "Area biru muda adalah 50% data di tengah",
x = "Menit Penggunaan", y = NULL, color = NULL) +
tema +
theme(axis.text.y = element_blank(), panel.grid.major.y = element_blank())Interpretasi: Menurut saya, IQR sebesar 5 menit menunjukkan bahwa separuh pengguna EcoTrack di tengah distribusi memakai aplikasi dalam rentang yang sempit, yaitu 21 sampai 26 menit. Artinya pola penggunaan mayoritas pengguna cukup seragam. Pengguna dengan 45 menit berada jauh di luar rentang itu dan terlihat sebagai titik merah di grafik.
## [1] 41.54286
## [1] 6.445375
df3 <- data.frame(
Pengguna = factor(1:n),
Kuadrat = (menit - mean(menit))^2
)
df3$Keterangan <- ifelse(df3$Kuadrat == max(df3$Kuadrat), "Kontribusi terbesar", "Lainnya")
ggplot(df3, aes(x = Pengguna, y = Kuadrat, fill = Keterangan)) +
geom_col(width = 0.75) +
geom_text(aes(label = round(Kuadrat, 1)), vjust = -0.5, size = 3.3) +
scale_fill_manual(values = c("Kontribusi terbesar" = "#E63946", "Lainnya" = "#A8DADC")) +
scale_y_continuous(expand = expansion(mult = c(0, 0.12))) +
labs(title = "Kontribusi Tiap Pengguna terhadap Varians",
subtitle = "Nilai (xi - mean)^2 untuk setiap pengguna",
x = "Pengguna ke-", y = "(xi - mean)^2", fill = NULL) +
temaInterpretasi: Menurut saya, data ini memiliki variasi yang cukup tinggi karena standar deviasinya sebesar 6,45 menit. Sebagian besar data berada di sekitar 18-30 menit, tetapi ada satu pengguna yang mencapai 45 menit sehingga penyebaran data menjadi lebih besar. Grafik di atas memperlihatkan pengguna ke-7 menyumbang sekitar 416 dari total sekitar 582 jumlah kuadrat selisih, jadi hampir semua variasi berasal dari satu orang itu.
## [1] 0.7447201
## [1] 2.212573
## [1] 7.879086
ggplot(data.frame(menit), aes(x = menit)) +
geom_histogram(aes(y = after_stat(density)), binwidth = 3,
fill = "#A8DADC", color = "white", boundary = 15) +
geom_density(color = "#1D3557", linewidth = 1.2) +
stat_function(fun = dnorm, args = list(mean = mean(menit), sd = sd(menit)),
color = "grey40", linetype = "dotted", linewidth = 1) +
geom_vline(xintercept = mean(menit), color = "#E63946", linetype = "dashed", linewidth = 1) +
geom_vline(xintercept = median(menit), color = "#2A9D8F", linetype = "dashed", linewidth = 1) +
annotate("text", x = mean(menit) + 0.5, y = 0.115, label = "Mean", color = "#E63946",
hjust = 0, fontface = "bold") +
annotate("text", x = median(menit) - 0.5, y = 0.115, label = "Median", color = "#2A9D8F",
hjust = 1, fontface = "bold") +
labs(title = "Bentuk Distribusi Menit Penggunaan EcoTrack",
subtitle = "Garis biru tua: kurva densitas data | Garis titik abu-abu: kurva normal pembanding",
x = "Menit Penggunaan", y = "Densitas") +
temaInterpretasi: Menurut saya, distribusi data ini
menceng ke kanan karena koefisien skewness Pearson bernilai positif,
yaitu sekitar 0,74. Hal ini terlihat di grafik, di mana ekor kurva
memanjang ke kanan akibat pengguna dengan 45 menit, dan garis mean
berada di sebelah kanan garis median. Nilai skewness dari
skewness() (sekitar 2,21) berbeda dari koefisien Pearson
karena rumusnya berbeda (berbasis momen ke-3), tetapi arahnya sama-sama
positif.
ringkasan <- data.frame(
Ukuran = c("Mean", "Median", "Modus", "Q1", "Q3", "IQR", "Varians", "Standar Deviasi", "Skewness Pearson"),
Nilai = c(mean(menit), median(menit), "22, 23, 24",
quantile(menit, 0.25, type = 6), quantile(menit, 0.75, type = 6),
IQR(menit, type = 6), var(menit), sd(menit), sk_pearson)
)
ringkasan$Nilai <- ifelse(suppressWarnings(!is.na(as.numeric(ringkasan$Nilai))),
round(suppressWarnings(as.numeric(ringkasan$Nilai)), 2),
ringkasan$Nilai)
kable(ringkasan, row.names = FALSE)| Ukuran | Nilai |
|---|---|
| Mean | 24.6 |
| Median | 23 |
| Modus | 22, 23, 24 |
| Q1 | 21 |
| Q3 | 26 |
| IQR | 5 |
| Varians | 41.54 |
| Standar Deviasi | 6.45 |
| Skewness Pearson | 0.74 |