Bagian 1 sampai 3 menghasilkan segudang angka: mean, F, p-value, eta-squared. Bagian penutup melatih keterampilan yang paling sering dilewatkan: membaca hasil dengan disiplin — memisahkan apa yang benar-benar didukung data dari yang hanya enak didengar — lalu melaporkannya dalam format baku beserta keterbatasannya. Kita menjalankan analisis utuh, membaca setiap tabelnya, menulis laporan, dan menutup proyek dengan uji otomatis.
Yang kita kerjakan pada bagian ini:
- analisis utuh
jalankanAnalisis— hasil tabel dan uji lengkap dari satu eksekusi, - cara membaca tiap baris hasil sebelum menyimpulkan,
- format pelaporan baku — mean ± SE, F(df), p, dan effect size,
- kesimpulan yang didukung data serta keterbatasannya,
- isi laporan nyata, uji otomatis, checklist, dan ide pengembangan.
Menjalankan Analisis Utuh #
Satu panggilan menjalankan seluruh rencana Bagian 1 — data, deskriptif, normalitas, ANOVA, posthoc, box plot, kesimpulan, laporan:
% driver: analisis lengkap dari folder kerja yang bisa ditulisi
addpath('src');
hasil = jalankanAnalisis();Output yang Dihasilkan:
=== Analisis Data Eksperimen Waktu Produksi ===
Desain: 3 metode (A, B, C) x 10 replikat, alpha = 0.05
Data eksperimen tersimpan: data_eksperimen.csv
--- Statistik deskriptif per metode ---
Metode n mean std median SE CI95- CI95+ min max
A 10 50.00 1.90 49.65 0.60 48.82 51.18 47.30 52.90
B 10 45.00 1.95 44.90 0.62 43.79 46.21 42.60 47.60
C 10 52.00 2.83 51.80 0.89 50.25 53.75 48.50 56.10
--- Uji normalitas (g1 skewness, g2 kurtosis) ---
Metode g1 g2 |g1| < 0.5
A 0.151 -1.190 cukup normal
B 0.029 -1.627 cukup normal
C 0.082 -1.440 cukup normal
--- ANOVA satu arah ---
Sumber SS df MS F p
Antara 260.00 2 130.00 25.30 6.46e-07
Dalam 138.74 27 5.14
Total 398.74 29
F kritis (df 2, 27; alpha 0.05) = 3.35, eta^2 = 0.652
Keputusan: p < alpha -> H0 ditolak; minimal satu metode berbeda.
--- Posthoc: uji t berpasangan + Bonferroni ---
Jumlah perbandingan: 3, alpha Bonferroni = 0.05 / 3 = 0.0167
Pasangan selisih t p keputusan
A - B +5.00 +5.80 1.698e-05 signifikan
A - C -2.00 -1.86 0.07994 tidak signifikan
B - C -7.00 -6.45 4.565e-06 signifikan
--- Box plot per metode ---
A: Q1=48.5 med=49.65 Q3=51.6 whisker=47.3-52.9 outlier=0
B: Q1=43.1 med=44.9 Q3=46.8 whisker=42.6-47.6 outlier=0
C: Q1=49.1 med=51.8 Q3=54.7 whisker=48.5-56.1 outlier=0
Grafik tersimpan: box-plot-eksperimen.png
--- Kesimpulan ---
ANOVA signifikan (F(2,27) = 25.30, p = 6.46e-07): minimal satu metode berbeda.
Metode tercepat: B (mean 45.00 menit, SE 0.62).
A - C: tidak cukup bukti perbedaan (p = 0.07994).
Laporan tersimpan: laporan.txtUrutan membacanya mengikuti rencana: statistik deskriptif memberi gambaran, uji normalitas memberi izin melanjutkan, ANOVA menjadi gerbang keputusan, posthoc merinci pasangan, box plot menjadi pemeriksaan visual, dan kesimpulan merangkum. Kita sudah membedah tabelnya satu per satu di Bagian 2 dan 3 — sekarang kita membacanya sebagai satu kesatuan.
Membaca Hasil Sebelum Menyimpulkan #
Tabel dan transkrip di atas menyimpan beberapa jebakan klasik interpretasi. Lima aturan membacanya:
| Hasil di transkrip | Cara membaca yang benar | Jebakan yang harus dihindari |
|---|---|---|
Keputusan: p < alpha -> H0 ditolak | bukti kuat bahwa minimal satu metode berbeda | langsung menyimpulkan pasangan mana yang berbeda — itu tugas posthoc |
eta^2 = 0.652 | 65.2% variasi waktu produksi dijelaskan pilihan metode | puas hanya dengan p kecil tanpa effect size — p tidak menyebut besar efek |
A - C ... p = 0.07994 tidak signifikan | data tidak cukup membuktikan perbedaan A-C | menyimpulkan “A dan C sama” — ketiadaan bukti bukan bukti ketiadaan |
A - B +5.00 | A lima menit lebih lambat dari B — urutan pasangan menentukan tanda | menukar arah dan menyimpulkan B yang lebih lambat |
alpha Bonferroni = 0.05/3 = 0.0167 | ambang diketatkan agar family-wise error tetap 5% | membandingkan p posthoc dengan 0.05 mentah, melebih-lebihkan temuan |
Aturan ketiga paling sering terlanggar: p = 0.07994 bukan “bukti A sama dengan C”, melainkan “dengan 10 replikat, selisih sekecil ini belum terbukti”. Bayangkan eksperimen dengan 30 replikat: selisih yang sama bisa jadi signifikan — kesimpulan berubah bukan karena metodenya berubah, tapi karena daya detektnya.
Format Pelaporan yang Baku #
Angka yang sama bisa dilaporkan dalam format yang rapi atau yang membingungkan. Format baku membuat pembaca membandingkan hasil lintas studi:
| Besaran | Format baku | Contoh dari proyek ini |
|---|---|---|
| Estimasi pusat | mean ± SE | 45.00 ± 0.62 menit |
| Hasil ANOVA | F(dfB, dfW) = nilai, p = nilai | F(2,27) = 25.30, p = 6.46e-07 |
| Effect size | eta^2 = nilai | eta^2 = 0.652 |
| Uji pasangan | t(df) = nilai, p = nilai, keputusan | t(18) = +5.80, p = 1.698e-05 |
| Pasangan tanpa bukti | frasa “tidak cukup bukti” plus p | A - C: tidak cukup bukti (p = 0.07994) |
Tiga kebiasaan di baliknya: laporkan SE (bukan std) menempel di mean karena SE adalah ketidakpastian estimasi; laporkan p-value eksak alih-alih hanya p < 0.05 supaya pembaca bisa menilai sendiri; dan sebut arah selisih, bukan hanya “berbeda”. Seluruh angka itu tinggal dibaca dari struct hasil — tidak perlu diketik ulang:
% driver: baca angka kunci langsung dari struct hasil
addpath('src');
evalc('hasil = jalankanAnalisis();');
fprintf('F(%d,%d) = %.2f, p = %.2e, eta^2 = %.3f\n', ...
hasil.anova.dfBetween, hasil.anova.dfWithin, ...
hasil.anova.F, hasil.anova.p, hasil.anova.etaSquared);
fprintf('B: %.2f +/- %.2f menit (mean +/- SE)\n', ...
hasil.statistik(2).mean, hasil.statistik(2).se);
fprintf('A - C: p = %.4g (signifikan: %d)\n', ...
hasil.posthoc(2).p, hasil.posthoc(2).signifikan);Output yang Dihasilkan:
F(2,27) = 25.30, p = 6.46e-07, eta^2 = 0.652
B: 45.00 +/- 0.62 menit (mean +/- SE)
A - C: p = 0.07994 (signifikan: 0)Kesimpulan yang Didukung Data #
Dari transkrip di atas, empat kesimpulan berdiri di atas bukti:
- Minimal satu metode berbeda mean waktu produksi — F(2,27) = 25.30, p = 6.46e-07, jauh di bawah alpha sebelum koreksi apa pun.
- Metode B tercepat — 45.00 ± 0.62 menit, dan perbedaannya terhadap A (selisih A - B = +5.00, t(18) = 5.80, p = 1.698e-05) maupun C (selisih B - C = -7.00, t(18) = -6.45, p = 4.565e-06) tetap signifikan setelah Bonferroni.
- Efek pilihan metode besar — eta^2 = 0.652: 65.2% variasi antar-batch dijelaskan oleh metode, sisanya derau proses.
- A dan C belum terpisahkan oleh desain ini — p = 0.07994; selisih 2 menit berada di bawah daya deteksi 10 replikat (lihat keterbatasan).
Empat pernyataan berikut tidak didukung data, meskipun sering terdengar wajar:
- “A dan C sama persis” — uji gagal menolak H0, bukan membuktikan H0 benar.
- “C lebih lambat dari A” — selisih 2 menit tidak signifikan; CI95 keduanya bertumpang tindih (Bagian 2).
- “B selalu tercepat di semua kondisi” — inferensi berlaku untuk kondisi eksperimen ini (operator, mesin, dan bahan yang sama); generalisasi ke lini lain menuntut replikasi.
- “Checklist pra-produksi membuat B cepat” — desain menunjukkan perbedaan, bukan mekanisme; klaim kausal butuh eksperimen terarah.
Rekomendasi praktisnya tetap tegas: gunakan metode B. Dan bila pertimbangan non-waktu (biaya, pelatihan) mendorong C, data kita tidak melarangnya — A dan C sama-sama berada di sekitar 50-52 menit tanpa bukti perbedaan.
Keterbatasan dan Cara Menuliskannya #
Kejujuran laporan diukur dari bagian keterbatasannya. Empat batas proyek ini — semuanya tertulis otomatis di bagian 6 laporan:
| Keterbatasan | Konsekuensi | Penanganan lanjutan |
|---|---|---|
| n = 10 per metode — daya uji terbatas | selisih kecil (A-C, 2 menit) mungkin tidak terdeteksi | power analysis sebelum eksperimen lanjutan |
| Data sintetis deterministik | angka pedagogis, bukan bukti lapangan | jalankan ulang pipeline pada data eksperimen nyata |
| Asumsi normalitas dan varians sama tidak diuji formal | ANOVA sensitif pada pelanggaran asumsi | uji formal (Shapiro-Wilk, Levene) saat memakai data nyata |
| CI95 memakai z = 1.96 | interval terlalu sempit untuk n = 10 | ganti dengan kuantil t — t(0.975, 9) = 2.26 |
Laporan Tertulis dari Struct #
jalankanAnalisis menutup tiap eksekusi dengan menulis laporan.txt. Bagian 1-4 laporan menyalin tabel Command Window; bagian 5 — kesimpulan — adalah inti interpretatifnya:
fprintf(fid, '5. KESIMPULAN\n');
[~, iCepat] = min([S.mean]);
if A.signifikan
fprintf(fid, '- ANOVA signifikan (p = %.2e): minimal satu metode berbeda mean.\n', A.p);
else
fprintf(fid, '- ANOVA tidak signifikan (p = %.2e).\n', A.p);
end
fprintf(fid, '- Metode %s tercepat: %.2f +/- %.2f menit (mean +/- SE).\n', ...
data.label{iCepat}, S(iCepat).mean, S(iCepat).se);
pasanganSig = {P([P.signifikan]).pasangan};
if ~isempty(pasanganSig)
fprintf(fid, '- Signifikan setelah Bonferroni: %s.\n', ...
strjoin(pasanganSig, ', '));
end
for c = 1:numel(P)
if ~P(c).signifikan
fprintf(fid, '- %s: tidak berbeda signifikan (p = %.4g).\n', ...
P(c).pasangan, P(c).p);
end
endMari kita bedah baris-baris kode di atas (nomor baris mengikuti src/jalankanAnalisis.m):
- Baris 223 (
[~, iCepat] = min([S.mean]);):[S.mean]adalah comma-list seluruh mean —[50 45 52];minmemilih metode tercepat, lalu label dan angkanya dibaca dari struct array. Metode tercepat dipilih data, bukan opini. - Baris 224-228 (
if A.signifikan ...): kalimat kesimpulan bercabang pada logicalA.signifikan— bila suatu hari data berubah dan H0 tak lagi ditolak, laporan otomatis memakai kalimat yang benar. - Baris 229-230 (format
%.2f +/- %.2f): pasangan mean dan SE dicetak bersebelahan — persis formatmean ± SEtabel di atas. - Baris 231-235 (
pasanganSig = {P([P.signifikan]).pasangan};): pola comma-list dengan logical indexing —[P.signifikan]menjadi vektor logical yang memfilter elemen struct array P, kurung kurawal mengumpulkan fieldpasanganmenjadi cell array, lalustrjoinmerangkai “A - B, B - C”. - Baris 236-241 (loop terakhir): pasangan tidak-signifikan dicetak dengan p-value eksak — laporan jujur dua arah: yang terbukti berbeda dan yang belum terbukti berbeda.
Hasilnya pada laporan nyata (bagian 5 dan 6 dari laporan.txt):
5. KESIMPULAN
- ANOVA signifikan (p = 6.46e-07): minimal satu metode berbeda mean.
- Metode B tercepat: 45.00 +/- 0.62 menit (mean +/- SE).
- Signifikan setelah Bonferroni: A - B, B - C.
- A - C: tidak berbeda signifikan (p = 0.07994).
6. KETERBATASAN
- n = 10 per metode kecil; daya uji terbatas.
- Data sintetis deterministik, bukan eksperimen nyata.
- Asumsi normalitas dan varians sama tidak diuji formal.
- CI95 memakai z = 1.96; dengan n = 10, t(9) = 2.26 lebih lebar.Uji Otomatis dan Determinisme #
Kepercayaan pada seluruh analisis ditutup oleh tests/uji_analisis.m — 26 kasus assert yang menghitung ulang tiap statistik dari rumus manual lalu membandingkannya dengan keluaran fungsi. Kasus-kasus determinismenya menjalankan pipeline penuh dua kali (potongan di dalam blok try, indentasi aslinya dipertahankan):
% ---- end-to-end: jalankan pipeline penuh dua kali ----
transkrip1 = evalc('hasil1 = jalankanAnalisis();');
laporan1 = fileread('laporan.txt');
transkrip2 = evalc('hasil2 = jalankanAnalisis();');
laporan2 = fileread('laporan.txt');Kedua hasil kemudian dituntut identik: isequal(hasil1, hasil2) untuk seluruh struct dan strcmp(laporan1, laporan2) untuk laporan — hanya mungkin karena data dibangun dari angka tetap, bukan rand. Menjalankan berkas uji dari folder tests/:
== uji_analisis.m ==
LULUS: csv data terbentuk
LULUS: isi csv sesuai data
LULUS: mean per grup
LULUS: std sampel per grup
LULUS: median per grup
LULUS: se per grup
LULUS: min dan max per grup
LULUS: ci95 = mean +/- 1.96 SE
LULUS: g1 sesuai rumus momen
LULUS: semua grup cukup normal
LULUS: SSbetween dan SSwithin
LULUS: F sesuai rumus
LULUS: eta squared sesuai rumus
LULUS: ANOVA signifikan
LULUS: jumlah perbandingan 3
LULUS: pasangan lengkap
LULUS: t A-B sesuai rumus
LULUS: df perbandingan 18
LULUS: A-B dan B-C signifikan
LULUS: A-C tidak signifikan
LULUS: laporan.txt terbentuk
LULUS: laporan memuat ANOVA dan kesimpulan
LULUS: grafik box plot tersimpan
LULUS: deterministik: hasil isequal
LULUS: deterministik: laporan identik
LULUS: transkrip memuat tabel
Ringkasan: 26 lulus, 0 gagal (total 26)Checklist dan Ide Pengembangan #
| Deliverable | Kriteria selesai |
|---|---|
data_eksperimen.csv | 30 baris pengamatan plus header metode,waktu |
box-plot-eksperimen.png | tiga kotak tergambar, lima bilangan tiap metode tercetak |
laporan.txt | bagian 1-6 lengkap, seluruh angka dari struct |
| Kesimpulan | hanya klaim yang didukung uji, arah selisih disebut |
| Keterbatasan | tertulis eksplisit di bagian 6 laporan |
tests/uji_analisis.m | 26 kasus lulus, 0 gagal, folder uji /tmp bersih |
Ide pengembangan untuk membawa proyek ini lebih jauh:
- power analysis — hitung berapa replikat yang dibutuhkan untuk mendeteksi selisih sekecil 2 menit (A-C) sebelum eksperimen lanjutan dijalankan; uji daya bisa dibangun dari
betaincseperti p-value kita, - uji formal asumsi — tambahkan Shapiro-Wilk/Lilliefors untuk normalitas dan Levene untuk varians sama; di MATLAB keduanya tersedia di Statistics Toolbox (
lillietest,vartestn), - CI ber-distribusi t — ganti konstanta 1.96 dengan kuantil t 0.975 pada df = n-1, dihitung dari
betaincinv, sehingga CI benar untuk sampel kecil, - posthoc Tukey HSD — alternatif Bonferroni dengan daya lebih baik saat jumlah pasangan banyak,
- effect size pasangan — Cohen’s d untuk tiap pasangan (selisih dibagi pooled std) melengkapi eta-squared ANOVA,
- desain berpasangan — bila setiap pasangan batch bisa dijalankan pada hari yang sama, uji t berpasangan memangkas derau antar-hari dan menaikkan daya deteksi.
Proyek menutup lingkarannya: rencana yang dikunci di Bagian 1, deskripsi yang jujur di Bagian 2, uji yang dibangun dari rumus di Bagian 3, dan interpretasi yang tidak melampaui buktinya di bagian ini. Pola itulah — bukan sekadar kumpulan fungsi — yang layak dibawa ke data eksperimen Anda yang berikutnya.