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:

matlab
% driver: analisis lengkap dari folder kerja yang bisa ditulisi
addpath('src');
hasil = jalankanAnalisis();

Output yang Dihasilkan:

text
=== 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.txt

Urutan 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 transkripCara membaca yang benarJebakan yang harus dihindari
Keputusan: p < alpha -> H0 ditolakbukti kuat bahwa minimal satu metode berbedalangsung menyimpulkan pasangan mana yang berbeda — itu tugas posthoc
eta^2 = 0.65265.2% variasi waktu produksi dijelaskan pilihan metodepuas hanya dengan p kecil tanpa effect size — p tidak menyebut besar efek
A - C ... p = 0.07994 tidak signifikandata tidak cukup membuktikan perbedaan A-Cmenyimpulkan “A dan C sama” — ketiadaan bukti bukan bukti ketiadaan
A - B +5.00A lima menit lebih lambat dari B — urutan pasangan menentukan tandamenukar arah dan menyimpulkan B yang lebih lambat
alpha Bonferroni = 0.05/3 = 0.0167ambang 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:

BesaranFormat bakuContoh dari proyek ini
Estimasi pusatmean ± SE45.00 ± 0.62 menit
Hasil ANOVAF(dfB, dfW) = nilai, p = nilaiF(2,27) = 25.30, p = 6.46e-07
Effect sizeeta^2 = nilaieta^2 = 0.652
Uji pasangant(df) = nilai, p = nilai, keputusant(18) = +5.80, p = 1.698e-05
Pasangan tanpa buktifrasa “tidak cukup bukti” plus pA - 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:

matlab
% 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:

text
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:

  1. Minimal satu metode berbeda mean waktu produksi — F(2,27) = 25.30, p = 6.46e-07, jauh di bawah alpha sebelum koreksi apa pun.
  2. 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.
  3. Efek pilihan metode besar — eta^2 = 0.652: 65.2% variasi antar-batch dijelaskan oleh metode, sisanya derau proses.
  4. 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:

  1. “A dan C sama persis” — uji gagal menolak H0, bukan membuktikan H0 benar.
  2. “C lebih lambat dari A” — selisih 2 menit tidak signifikan; CI95 keduanya bertumpang tindih (Bagian 2).
  3. “B selalu tercepat di semua kondisi” — inferensi berlaku untuk kondisi eksperimen ini (operator, mesin, dan bahan yang sama); generalisasi ke lini lain menuntut replikasi.
  4. “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:

KeterbatasanKonsekuensiPenanganan lanjutan
n = 10 per metode — daya uji terbatasselisih kecil (A-C, 2 menit) mungkin tidak terdeteksipower analysis sebelum eksperimen lanjutan
Data sintetis deterministikangka pedagogis, bukan bukti lapanganjalankan ulang pipeline pada data eksperimen nyata
Asumsi normalitas dan varians sama tidak diuji formalANOVA sensitif pada pelanggaran asumsiuji formal (Shapiro-Wilk, Levene) saat memakai data nyata
CI95 memakai z = 1.96interval terlalu sempit untuk n = 10ganti 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:

matlab
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
end

Mari kita bedah baris-baris kode di atas (nomor baris mengikuti src/jalankanAnalisis.m):

  1. Baris 223 ([~, iCepat] = min([S.mean]);): [S.mean] adalah comma-list seluruh mean — [50 45 52]; min memilih metode tercepat, lalu label dan angkanya dibaca dari struct array. Metode tercepat dipilih data, bukan opini.
  2. Baris 224-228 (if A.signifikan ...): kalimat kesimpulan bercabang pada logical A.signifikan — bila suatu hari data berubah dan H0 tak lagi ditolak, laporan otomatis memakai kalimat yang benar.
  3. Baris 229-230 (format %.2f +/- %.2f): pasangan mean dan SE dicetak bersebelahan — persis format mean ± SE tabel di atas.
  4. 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 field pasangan menjadi cell array, lalu strjoin merangkai “A - B, B - C”.
  5. 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):

text
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):

matlab
    % ---- 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/:

text
== 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 #

DeliverableKriteria selesai
data_eksperimen.csv30 baris pengamatan plus header metode,waktu
box-plot-eksperimen.pngtiga kotak tergambar, lima bilangan tiap metode tercetak
laporan.txtbagian 1-6 lengkap, seluruh angka dari struct
Kesimpulanhanya klaim yang didukung uji, arah selisih disebut
Keterbatasantertulis eksplisit di bagian 6 laporan
tests/uji_analisis.m26 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 betainc seperti 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.