CONFIDENCE INTERVAL
Tugas Week 13
Adam Richie Wijaya
Detail Profil Mahasiswa
Program Studi
Sains DataUniversitas
Institut Teknologi Sains Bandung (ITSB)Mata Kuliah
Statistik DasarDosen Pengampu
BAKTI SIREGAR, M.Sc., CDS.Keahlian Utama
1 ). Tugas 1
Confidence Interval for Mean, \(\sigma\) Known: An e-commerce platform wants to estimate the average number of daily transactions per user after launching a new feature. Based on large-scale historical data, the population standard deviation is known.
\[\begin{eqnarray*} \sigma &=& 3.2 \quad \text{(population standard deviation)} \\ n &=& 100 \quad \text{(sample size)} \\ \bar{x} &=& 12.6 \quad \text{(sample mean)} \end{eqnarray*}\]
tasks:
- Identify the appropriate statistical test and justify your choice.
- Compute the Confidence Intervals for:
- \(90\%\)
- \(95\%\)
- \(99\%\)
- Create a comparison visualization of the three confidence intervals.
- Interpret the results in a business analytics context.
1.1 Identifikasi Uji Statistik yang Tepat
Confidence Interval untuk mean berbasis distribusi Z (Z-interval)
Alasan pemilihan:
– Simpangan baku populasi σ diketahui (σ = 3,2).
– Ukuran sampel besar (n = 100 ≥ 30) sehingga distribusi rata-rata sampel mendekati normal (Central Limit Theorem).
– Tujuan analisis adalah mengestimasi rata-rata populasi, bukan menguji perbedaan atau hipotesis.
✅ Oleh karena itu, Z Confidence Interval untuk mean adalah metode yang paling tepat.
1.2 Perhitungan Confidence Interval
Diketahui:
Perhitungan Confidence Interval (CI)Rumus umum untuk Confidence Interval adalah:\(\bar{x} \pm Z \left( \frac{\sigma}{\sqrt{n}} \right)\)
Di mana Standard Error (\(SE\)) adalah\(SE = \frac{3.2}{\sqrt{100}} = \frac{3.2}{10} = 0.32\)
| Confidence_Level | Z_Score | Margin_of_Error | Lower_Bound | Upper_Bound |
|---|---|---|---|---|
| 90% | 1.645 | 0.526 | 12.074 | 13.126 |
| 95% | 1.960 | 0.627 | 11.973 | 13.227 |
| 99% | 2.576 | 0.824 | 11.776 | 13.424 |
1.3 Visualisasi Perbandingan Confidence Interval
library(ggplot2)
library(plotly)
# 1. Menyiapkan data untuk plotting
plot_data <- data.frame(
Level = factor(c("90%", "95%", "99%"), levels = c("90%", "95%", "99%")),
Mean = c(12.6, 12.6, 12.6),
Lower = c(12.074, 11.973, 11.776),
Upper = c(13.126, 13.227, 13.424)
)
# Tambahkan teks
plot_data$hover_text <- paste0(
"Level: ", plot_data$Level,
"\nMean: ", plot_data$Mean,
"\nRange: [", plot_data$Lower, " - ", plot_data$Upper, "]"
)
# 2. Membuat Visualisasi Dasar dengan ggplot
p <- ggplot(plot_data, aes(x = Level, y = Mean, text = hover_text)) +
# Rentang CI
geom_errorbar(aes(ymin = Lower, ymax = Upper, color = Level),
width = 0.2, size = 0.8, show.legend = FALSE) +
# Titik rata-rata (dibuat simpel untuk interaktivitas)
geom_point(size = 2.5, color = "black", fill = "white", shape = 21, stroke = 1) +
# Estetika Tema dan Label
scale_color_manual(values = c("#E41A1C", "#377EB8", "#4DAF4A")) + # Skema Set1
labs(
title = "Confidence Interval: Rata-rata Transaksi",
x = "Tingkat Kepercayaan",
y = "Rata-rata Transaksi"
) +
theme_minimal(base_size = 10) +
theme(
legend.position = "none",
plot.title = element_text(face = "bold", hjust = 0.5),
panel.grid.minor = element_blank()
)
# 3. Konversi ke Plotly
ggplotly(p, tooltip = "text", width = 520, height = 350) %>%
layout(
showlegend = FALSE,
margin = list(t = 60, b = 40, l = 40, r = 40) # Memberi ruang agar label tidak terpotong
) %>%
config(
displayModeBar = "hover",
modeBarButtonsToRemove = c(
"zoom2d", "pan2d", "select2d", "lasso2d",
"zoomIn2d", "zoomOut2d", "autoScale2d", "resetScale2d"
),
displaylogo = FALSE
)1.4 Interpretasi dalam Konteks Business Analytics
– Dengan 95% keyakinan, rata-rata transaksi harian per pengguna berada di antara 11.97 hingga 13.23
– Confidence level lebih tinggi → estimasi lebih aman, tetapi kurang presisi
– 99% CI cocok untuk keputusan strategis berisiko tinggi
– 90–95% CI cocok untuk evaluasi performa fitur baru secara operasional
Implikasi bisnis:
– Fitur baru kemungkinan besar meningkatkan engagement pengguna
– Rentang CI yang relatif sempit → hasil stabil dan dapat dipercaya
2 ). Tugas 2
Confidence Interval for Mean, \(\sigma\) Unknown: A UX Research team analyzes task completion time (in minutes) for a new mobile application. The data are collected from 12 users:
\[ 8.4,\; 7.9,\; 9.1,\; 8.7,\; 8.2,\; 9.0,\; 7.8,\; 8.5,\; 8.9,\; 8.1,\; 8.6,\; 8.3 \]
Tasks:
- Identify the appropriate statistical test and explain why.
- Compute the Confidence Intervals for:
- \(90\%\)
- \(95\%\)
- \(99\%\)
- Visualize the three intervals on a single plot.
- Explain how sample size and confidence level influence the interval width.
2.1 Identifikasi Uji Statistik
Uji statistik yang tepat adalah t-Interval (Distribusi t Student).
Alasan Pemilihan:
– \(\sigma\) (Simpangan Baku Populasi) Tidak Diketahui: Kita hanya bisa menghitung standar deviasi dari data sampel (\(s\)).
– Ukuran Sampel Kecil (\(n < 30\)): Karena jumlah pengguna hanya 12 orang (\(n=12\)), distribusi normal (Z) tidak akurat untuk digunakan; distribusi t memberikan kompensasi atas ketidakpastian ekstra dari sampel kecil ini.
2.2 Perhitungan Statistik
Deskriptif & CIPertama, kita hitung statistik dasar dari data:
– Mean (\(\bar{x}\)): \(8.458\) menit
– Standar Deviasi Sampel (\(s\)): \(0.412\)
– Degree of Freedom (\(df\)): \(n - 1 = 11\)
– Standard Error (\(SE\)): \(\frac{s}{\sqrt{n}} = \frac{0.412}{\sqrt{12}} \approx 0.119\)
2.3 Visualisasi
library(ggplot2)
library(plotly)
# 1. Menyiapkan data berdasarkan perhitungan t-distribution (df = 11)
# Data: 8.4, 7.9, 9.1, 8.7, 8.2, 9.0, 7.8, 8.5, 8.9, 8.1, 8.6, 8.3
# Mean = 8.458
plot_data <- data.frame(
Level = factor(c("90%", "95%", "99%"), levels = c("90%", "95%", "99%")),
Mean = c(8.458, 8.458, 8.458),
Lower = c(8.244, 8.196, 8.088),
Upper = c(8.672, 8.720, 8.828)
)
# Menyiapkan teks hover agar informatif (Informasi Mean & Rentang)
plot_data$hover_text <- paste0(
"<b>Level: ", plot_data$Level, "</b><br>",
"Mean: ", plot_data$Mean, " menit<br>",
"Rentang: [", plot_data$Lower, " - ", plot_data$Upper, "]"
)
# 2. Membuat Visualisasi Dasar dengan ggplot2
p <- ggplot(plot_data, aes(x = Level, y = Mean, text = hover_text)) +
# Rentang Confidence Interval (t-interval)
geom_errorbar(aes(ymin = Lower, ymax = Upper, color = Level),
width = 0.2, size = 0.8, show.legend = FALSE) +
# Titik Rata-rata sampel
geom_point(size = 2.5, color = "black", fill = "white", shape = 21, stroke = 1) +
# Estetika Warna (Skema Set1)
scale_color_manual(values = c("#E41A1C", "#377EB8", "#4DAF4A")) +
labs(
title = "Confidence Interval: Waktu Penyelesaian Tugas (UX)",
x = "Tingkat Kepercayaan",
y = "Waktu (Menit)"
) +
theme_minimal(base_size = 10) +
theme(
legend.position = "none",
plot.title = element_text(face = "bold", hjust = 0.5),
panel.grid.minor = element_blank()
)
# 3. Output Interaktif dengan Plotly (Ukuran Ringkas & Modebar Minimalis)
ggplotly(p, tooltip = "text", width = 520, height = 350) %>%
layout(
showlegend = FALSE,
margin = list(t = 60, b = 40, l = 40, r = 40),
hoverlabel = list(bgcolor = "white", font = list(size = 11), align = "left")
) %>%
config(
displayModeBar = "hover",
modeBarButtonsToRemove = c(
"zoom2d", "pan2d", "select2d", "lasso2d",
"zoomIn2d", "zoomOut2d", "autoScale2d", "resetScale2d",
"hoverClosestCartesian", "hoverCompareCartesian"
),
displaylogo = FALSE
)2.4 Analisis Hubungan Faktor
Bagaimana variabel-variabel ini memengaruhi lebar interval?
- Tingkat Kepercayaan (Confidence Level):
– Hubungan: Berbanding Lurus.
– Penjelasan: Semakin tinggi keyakinan yang Anda inginkan (misal 99%), semakin lebar rentang yang dibutuhkan. Bayangkan seperti melempar jaring untuk menangkap ikan; jika Anda ingin 99% yakin menangkap ikan “rata-rata”, Anda butuh jaring yang lebih lebar.
Ukuran Sampel (\(n\)):
– Hubungan: Berbanding Terbalik.
– Penjelasan: Semakin banyak pengguna yang Anda uji (sampel meningkat), semakin kecil Standard Error-nya. Hal ini membuat interval semakin sempit (presisi meningkat). Dalam kasus UX ini, hanya dengan 12 pengguna, interval kita relatif lebar karena ketidakpastiannya masih tinggi.
3 ). Tugas 3
Confidence Interval for a Proportion, A/B Testing: A data science team runs an A/B test on a new Call-To-Action (CTA) button design. The experiment yields:
\[ \begin{eqnarray*} n &=& 400 \quad \text{(total users)} \\ x &=& 156 \quad \text{(users who clicked the CTA)} \end{eqnarray*} \]
Tasks:
- Compute the sample proportion \(\hat{p}\).
- Compute Confidence Intervals for the proportion at:
- \(90\%\)
- \(95\%\)
- \(99\%\)
- Visualize and compare the three intervals.
- Explain how confidence level affects decision-making in product experiments.
3.1 Menghitung Proporsi Sampel
(\(\hat{p}\))Proporsi sampel adalah rasio antara jumlah pengguna yang mengklik dengan total pengguna dalam eksperimen. \(\hat{p} = \frac{x}{n} = \frac{156}{400} = 0.39 \text{ atau } 39\%\)
3.2 Perhitungan Confidence Interval untuk Proporsi
Rumus yang digunakan adalah Normal Approximation (Z-Interval for Proportions):\(\hat{p} \pm Z \times \sqrt{\frac{\hat{p}(1 - \hat{p})}{n}}\)
Standard Error (\(SE\)) dihitung sebagai berikut:\(SE = \sqrt{\frac{0.39 \times 0.61}{400}} = \sqrt{0.00059475} \approx 0.02439\)
| Confidence_Level | Z_score | Margin_of_Error | Lower_Bound | Upper_Bound |
|---|---|---|---|---|
| 90% | 1.645 | 4.01% | 34.99% | 43.01% |
| 95% | 1.960 | 4.78% | 34.22% | 43.78% |
| 99% | 2.576 | 6.28% | 32.72% | 45.28% |
3.3 Visualisasi
library(ggplot2)
library(plotly)
library(scales)
# 1. Siapkan data untuk plotting
# Berdasarkan p_hat = 0.39 dan MOE yang telah dihitung
plot_data <- data.frame(
Level = factor(c("90%", "95%", "99%"), levels = c("90%", "95%", "99%")),
Mean = c(0.39, 0.39, 0.39),
Lower = c(0.3499, 0.3422, 0.3272),
Upper = c(0.4301, 0.4378, 0.4528)
)
# Tambahkan teks
plot_data$hover_text <- paste0(
"Level: ", plot_data$Level,
"\nMean: ", percent(plot_data$Mean, 0.1),
"\nRange: [", percent(plot_data$Lower, 0.1), " - ", percent(plot_data$Upper, 0.1), "]"
)
# 2. Membuat Visualisasi Dasar dengan ggplot
p <- ggplot(plot_data, aes(x = Level, y = Mean, text = hover_text)) +
# Rentang CI
geom_errorbar(aes(ymin = Lower, ymax = Upper, color = Level),
width = 0.2, size = 0.8, show.legend = FALSE) +
# Titik rata-rata (dibuat simpel untuk interaktivitas)
geom_point(size = 2.5, color = "black", fill = "white", shape = 21, stroke = 1) +
# Estetika Tema dan Label
scale_color_manual(values = c("#E41A1C", "#377EB8", "#4DAF4A")) + # Skema Set1 sama persis
labs(
title = "Confidence Interval: Proporsi Klik (CTA)",
x = "Tingkat Kepercayaan",
y = "Click-Through Rate (%)"
) +
scale_y_continuous(labels = percent_format(), limits = c(0.3, 0.5)) +
theme_minimal(base_size = 10) +
theme(
legend.position = "none",
plot.title = element_text(face = "bold", hjust = 0.5),
panel.grid.minor = element_blank()
)
# 3. Konversi ke Plotly
ggplotly(p, tooltip = "text", width = 520, height = 350) %>%
layout(
showlegend = FALSE,
margin = list(t = 60, b = 40, l = 40, r = 40) # Memberi ruang agar label tidak terpotong
) %>%
config(
displayModeBar = "hover",
modeBarButtonsToRemove = c(
"zoom2d", "pan2d", "select2d", "lasso2d",
"zoomIn2d", "zoomOut2d", "autoScale2d", "resetScale2d"
),
displaylogo = FALSE
)3.4 Pengaruh Tingkat Kepercayaan dalam Pengambilan Keputusan
Dalam pengembangan produk, pemilihan tingkat kepercayaan (Confidence Level) adalah tentang menyeimbangkan risiko dan kecepatan:
Tingkat Kepercayaan Tinggi (99%):
Kapan digunakan: Digunakan saat perubahan desain melibatkan risiko besar, misalnya merombak alur pembayaran (checkout). Kita ingin sangat yakin bahwa estimasi kita tidak salah sebelum melakukan investasi besar.
Konsekuensi: Interval akan melebar. Jika batas bawah (32.7%) masih dianggap menguntungkan dibanding desain lama, maka keputusan “Luncurkan” sangat aman secara statistik.
Tingkat Kepercayaan Standar (95%): Kapan digunakan:* Standar industri untuk sebagian besar eksperimen produk. Memberikan keseimbangan yang adil antara akurasi dan kepastian.
Tingkat Kepercayaan Rendah (90%): Kapan digunakan: Digunakan saat iterasi cepat (rapid prototyping) di mana biaya kesalahan rendah.
Konsekuensi: Interval lebih sempit (presisi tinggi), tapi ada peluang 10% bahwa CTR asli populasi sebenarnya berada di luar rentang tersebut.
Kesimpulan untuk Tim Produk: Jika desain CTA lama memiliki CTR sebesar 30%, maka pada ketiga tingkat kepercayaan di atas, desain baru secara konsisten menunjukkan hasil yang lebih baik (karena batas bawah terendah 32.7% masih > 30%). Desain ini layak untuk diimplementasikan.
4 ). Tugas 4
4.1 Identifikasi Uji Statistik
Tim A (Z-Test/Z-Interval): Menggunakan distribusi Z karena \(\sigma\) (standar deviasi populasi) diketahui secara pasti.
Tim B (t-Test/t-Interval): Menggunakan distribusi t karena \(\sigma\) tidak diketahui, sehingga mereka menggunakan \(s\) (standar deviasi sampel) sebagai estimasi.
4.2 Perhitungan Confidence Intervals (CI)
Rumus umum: \(\bar{x} \pm (\text{critical value}) \times \frac{\text{std dev}}{\sqrt{n}}\) Di mana \(\frac{24}{\sqrt{36}} = \frac{24}{6} = 4\) (Standard Error untuk kedua tim).
Tim A (Z-Interval)Menggunakan nilai kritis \(Z\):
90% (Z=1.645): \(210 \pm (1.645 \times 4) = [203.42, 216.58]\)
95% (Z=1.96): \(210 \pm (1.96 \times 4) = [202.16, 217.84]\)
99% (Z=2.576): \(210 \pm (2.576 \times 4) = [199.70, 220.30]\)
Tim B (t-Interval)Menggunakan nilai kritis \(t\) dengan derajat kebebasan \(df = n - 1 = 35\):
90% (t=1.690): \(210 \pm (1.690 \times 4) = [203.24, 216.76]\)
95% (t=2.030): \(210 \pm (2.030 \times 4) = [201.88, 218.12]\)
99% (t=2.724): \(210 \pm (2.724 \times 4) = [199.10, 220.90]\)
4.3 Visualisasi Perbandingan (Representasi Data)
Berikut adalah perbandingan lebar rentang (Interval Width) antara kedua tim:
# Load library
library(ggplot2)
library(plotly)
# 1. Menyiapkan Data
data_ci <- data.frame(
Team = rep(c("Team A (Z-Test)", "Team B (t-Test)"), each = 3),
Level = rep(c("90% CI", "95% CI", "99% CI"), 2),
Mean = 210,
Lower = c(203.42, 202.16, 199.70, # Team A
203.24, 201.88, 199.10), # Team B
Upper = c(216.58, 217.84, 220.30, # Team A
216.76, 218.12, 220.90) # Team B
)
# 2. Membuat Visualisasi
ggplot(data_ci, aes(y = Level, x = Mean, color = Team)) +
# Membuat garis interval (dumbbell style)
geom_errorbarh(aes(xmin = Lower, xmax = Upper),
height = 0.4,
size = 1.2,
position = position_dodge(width = 0.5)) +
# Menambahkan titik rata-rata
geom_point(position = position_dodge(width = 0.5), size = 3) +
# Menambahkan garis vertikal sebagai baseline rata-rata
geom_vline(xintercept = 210, linetype = "dashed", color = "darkgreen", alpha = 0.5) +
# Menambahkan teks label angka di ujung interval
geom_text(aes(x = Lower, label = Lower),
hjust = 1.2, position = position_dodge(width = 0.5), size = 3.5, color = "black") +
geom_text(aes(x = Upper, label = Upper),
hjust = -0.2, position = position_dodge(width = 0.5), size = 3.5, color = "black") +
# Pengaturan Tema dan Label
labs(title = "Perbandingan Confidence Interval: Tim A vs Tim B",
subtitle = "Tim B (t-test) memiliki interval lebih lebar karena ketidakpastian standar deviasi",
x = "API Latency (ms)",
y = "Confidence Level",
color = "Metode") +
theme_minimal() +
scale_color_manual(values = c("#2E86C1", "#E67E22")) +
theme(legend.position = "top",
plot.title = element_text(face = "bold", size = 14))4.4 Interpretasi Hasil
Meskipun nilai rata-rata (\(\bar{x}\)) dan deviasi standarnya sama-sama 24, interval Tim B selalu lebih lebar daripada Tim A karena alasan berikut:
Ketidakpastian Tambahan: Tim A memiliki informasi “pasti” mengenai populasi (\(\sigma\)). Tim B hanya memiliki estimasi (\(s\)). Distribusi t memberikan “hukuman” berupa rentang yang lebih lebar untuk mengompensasi ketidakpastian estimasi standar deviasi tersebut.
Karakteristik Distribusi: Distribusi t memiliki ekor yang lebih tebal (heavier tails) dibandingkan distribusi Z. Ini berarti nilai kritis \(t\) akan selalu lebih besar daripada nilai kritis \(Z\) untuk ukuran sampel yang terbatas.
Ukuran Sampel: Seiring bertambahnya \(n\), nilai \(t\) akan semakin mendekati \(Z\). Namun, pada \(n=36\), perbedaan tersebut masih terlihat nyata dalam perhitungan presisi.
5 ). Tugas 5
5.1 Identifikasi Jenis Confidence Interval dan Uji Statistik
Jenis Interval: One-sided Lower Confidence Interval. Hal ini karena manajemen hanya tertarik pada batas bawah (lower bound) untuk memastikan bahwa proporsi pengguna setidaknya (minimal) 70%.
Uji Statistik: Z-test for Proportions. Kita menggunakan distribusi Z karena ukuran sampel cukup besar (\(n=250\)) untuk memenuhi asumsi normalitas (uji proporsi).
5.2 Perhitungan One-sided Lower Confidence Interval
\(n = 250\)
\(x = 185\)
\(\hat{p}\) (proporsi sampel) = \(185 / 250 = 0.74\) (atau 74%)
\(SE\) (Standard Error) = \(\sqrt{\frac{\hat{p}(1-\hat{p})}{n}} = \sqrt{\frac{0.74 \times 0.26}{250}} \approx 0.0277\)
5.3 Visualisasi
library(ggplot2)
library(plotly)
# Data Perhitungan
data_saas <- data.frame(
Level = c("90% CI", "95% CI", "99% CI"),
LowerBound = c(70.45, 69.44, 65.56),
Estimate = 74
)
# Visualisasi
ggplot(data_saas, aes(y = Level, x = Estimate)) +
# Garis interval dari Lower Bound sampai ke Estimate (dan seterusnya ke kanan)
geom_errorbarh(aes(xmin = LowerBound, xmax = 80),
height = 0.3, size = 1.5, color = "#2E86C1") +
# Titik Estimasi (74%)
geom_point(size = 4, color = "red") +
# Garis Target 70%
geom_vline(xintercept = 70, linetype = "dashed", color = "darkgreen", size = 1) +
annotate("text", x = 70.5, y = 3.5, label = "Target = 70%", color = "darkgreen", fontface = "bold") +
# Label angka
geom_text(aes(x = LowerBound, label = paste0(LowerBound, "%")),
vjust = -1.2, size = 4, fontface = "bold") +
labs(title = "One-Sided Lower Confidence Intervals (SaaS Feature)",
subtitle = "Estimasi Proporsi Pengguna Premium: 74%",
x = "Persentase Pengguna (%)", y = "") +
theme_minimal()5.4 Apakah Target 70% Terpenuhi secara Statistik?
Pada Tingkat Kepercayaan 90%: YA. Batas bawah adalah 70.45%, yang berada di atas target 70%. Kita yakin 90% bahwa proporsi sebenarnya setidaknya 70.45%.
Pada Tingkat Kepercayaan 95%: TIDAK (Tipis). Batas bawah adalah 69.44%. Meskipun estimasi sampel kita 74%, secara statistik pada tingkat kepercayaan ini, ada kemungkinan proporsi sebenarnya turun sedikit di bawah 70%.
Pada Tingkat Kepercayaan 99%: TIDAK. Batas bawah adalah 65.56%.
Kesimpulan untuk Manajemen: Target 70% tercapai pada tingkat kepercayaan 90%, namun jika manajemen menginginkan kepastian yang lebih tinggi (95% atau 99%), data saat ini belum cukup kuat untuk menjamin bahwa angka minimal 70% telah terpenuhi.