Bagian 8 menghasilkan angka dan Bagian 9 menghasilkan gambar, tetapi proyek belum selesai: angka tidak berbicara sendiri, dan tahap inilah yang menentukan apakah laporan akhirnya jujur atau berlebihan. Pada bagian ini kita menerjemahkan keempat hasil analisis menjadi temuan, menandai apa yang tidak boleh disimpulkan dari data observasional berukuran 30 siswa, lalu melatih memilih kalimat yang tepat untuk laporan. Prinsip-prinsipnya mengikuti kerangka chapter Interpretasi Hasil Analisis . Aturan mainnya satu: klaim boleh sekuat buktinya, tidak lebih.
Empat Temuan beserta Status Bukitnya #
Pertama, kita rangkum keempat hasil ke satu tabel — bukan sekadar angkanya, tetapi juga status buktinya, karena dua temuan dengan angka sama kuat bisa menyandang status berbeda:
import pandas as pd
from scipy import stats
def muat_bersih(path):
"""Muat data mentah dan terapkan seluruh langkah pembersihan."""
df = pd.read_csv(path).drop_duplicates().reset_index(drop=True)
df["kelas"] = df["kelas"].str.upper()
df["kehadiran_persen"] = pd.to_numeric(df["kehadiran_persen"].replace("-", pd.NA))
df = df.dropna(subset=["kehadiran_persen"]).reset_index(drop=True)
df["kehadiran_persen"] = df["kehadiran_persen"].astype(int)
return df
def desimal_id(nilai, digit=2):
"""Format desimal dengan koma gaya Indonesia, mis. '0,94'."""
return f"{nilai:.{digit}f}".replace(".", ",")
bersih = muat_bersih("../data/nilai_siswa.csv")
r_jam = stats.pearsonr(bersih["jam_belajar_mingguan"], bersih["nilai_ujian"])
r_hadir = stats.pearsonr(bersih["kehadiran_persen"], bersih["nilai_ujian"])
r_silang = stats.pearsonr(bersih["jam_belajar_mingguan"], bersih["kehadiran_persen"])
uji = stats.ttest_ind(bersih.loc[bersih["kelas"] == "A", "nilai_ujian"],
bersih.loc[bersih["kelas"] == "B", "nilai_ujian"])
reg = stats.linregress(bersih["jam_belajar_mingguan"], bersih["nilai_ujian"])
temuan = pd.DataFrame(
{
"kode": ["T1", "T2", "T3", "T4"],
"temuan": [
"jam belajar sejalan kuat dengan nilai",
"kehadiran ikut sejalan, tetapi juga sejalan dengan jam belajar",
"tiap tambahan 1 jam belajar diikuti sekitar 2,9 poin nilai",
"selisih nilai antar kelas belum terbukti bermakna",
],
"angka_kunci": [
f"r = {desimal_id(r_jam.statistic)}",
f"r = {desimal_id(r_hadir.statistic)}; r silang = {desimal_id(r_silang.statistic)}",
f"slope = {desimal_id(reg.slope)}; R-kuadrat = {desimal_id(reg.rvalue ** 2)}",
f"selisih 3,7 poin; p = {desimal_id(uji.pvalue)}",
],
"status_bukti": [
"bukti kuat",
"bukti kuat, penyebab tercampur",
"bukti kuat",
"bukti tidak cukup",
],
}
)
print(temuan.to_string(index=False))Output yang Dihasilkan:
kode temuan angka_kunci status_bukti
T1 jam belajar sejalan kuat dengan nilai r = 0,94 bukti kuat
T2 kehadiran ikut sejalan, tetapi juga sejalan dengan jam belajar r = 0,87; r silang = 0,87 bukti kuat, penyebab tercampur
T3 tiap tambahan 1 jam belajar diikuti sekitar 2,9 poin nilai slope = 2,88; R-kuadrat = 0,88 bukti kuat
T4 selisih nilai antar kelas belum terbukti bermakna selisih 3,7 poin; p = 0,44 bukti tidak cukupKolom status_bukti itulah pemandu seluruh bagian ini: T1 dan T3 boleh ditulis dengan yakin, T2 wajib membawa keterangan tercampur, dan T4 harus ditulis dengan bahasa “belum”, bukan bahasa kebalikannya. Tabel semacam ini layak Anda bangun juga untuk dataset pilihan Anda — membuatnya sebelum menulis kesimpulan mencegah kalimat melesat dari buktinya.
Korelasi Bukan Kausalitas #
Temuan T1 paling mudah disalahartikan, jadi kita bedah pelan-pelan. Data ini bersifat observasional: tidak ada siswa yang diberi jadwal belajar secara acak oleh peneliti, sehingga tiga penjelasan berikut sama-sama selaras dengan r = 0,94:
- Jam belajar menaikkan nilai — penjelasan yang paling sering langsung diambil.
- Nilai atau kemampuan awal menaikkan jam belajar — siswa yang cepat memahami materi biasanya menikmati belajar dan menambah porsinya; arah sebabnya terbalik.
- Faktor ketiga mendorong keduanya sekaligus — kesungguhan, dukungan keluarga, atau target sekolah pascakelulusan membuat siswa belajar lama sekaligus mendapat nilai tinggi.
Dari data semacam ini, ketiganya tidak bisa dipilah. Temuan T2 memperkuat gesekan itu: kehadiran sejalan dengan nilai (r = 0,87) tetapi juga sejalan dengan jam belajar (r silang = 0,87), sehingga sumbangan kehadiran terhadap nilai tidak bisa dipisahkan dari jam belajar — hampir tidak ada siswa yang hadir rajin sambil belajar sedikit. Slope 2,88 pada T3 pun mengikuti aturan yang sama: angka itu adalah asosiasi rata-rata pada kelompok ini, bukan janji kenaikan bagi satu siswa tertentu. Hubungan sebab-akibat baru bisa diklaim dari eksperimen terkendali — dan klaim seperti itu berada di luar jangkauan data ini.
Seberapa Besar Selisih yang Bisa Muncul dari Kebetulan #
Temuan T4 sering mengecewakan pembaca laporan: “tapi kelas A kan lebih tinggi?” Satu percobaan kecil menjelaskan mengapa uji-t bersikap demikian — kita belah nilai 15 siswa kelas A menjadi dua kelompok secara acak (benih tetap agar hasil dapat diulang), lalu uji kedua belahan itu seolah dua kelas berbeda:
import numpy as np
import pandas as pd
from scipy import stats
def muat_bersih(path):
"""Muat data mentah dan terapkan seluruh langkah pembersihan."""
df = pd.read_csv(path).drop_duplicates().reset_index(drop=True)
df["kelas"] = df["kelas"].str.upper()
df["kehadiran_persen"] = pd.to_numeric(df["kehadiran_persen"].replace("-", pd.NA))
df = df.dropna(subset=["kehadiran_persen"]).reset_index(drop=True)
df["kehadiran_persen"] = df["kehadiran_persen"].astype(int)
return df
bersih = muat_bersih("../data/nilai_siswa.csv")
nilai_a = bersih.loc[bersih["kelas"] == "A", "nilai_ujian"].reset_index(drop=True)
rng = np.random.default_rng(42)
acak = rng.permutation(nilai_a.to_numpy())
kelompok_1 = acak[:8]
kelompok_2 = acak[8:]
hasil = stats.ttest_ind(kelompok_1, kelompok_2)
print("Percobaan: satu kelas A dibelah dua secara acak (benih 42).")
print(f"Rata-rata kelompok 1 : {kelompok_1.mean():.2f} (n = {len(kelompok_1)})")
print(f"Rata-rata kelompok 2 : {kelompok_2.mean():.2f} (n = {len(kelompok_2)})")
print(f"Selisih : {kelompok_1.mean() - kelompok_2.mean():.2f} poin")
print(f"p-value : {hasil.pvalue:.4f}")Output yang Dihasilkan:
Percobaan: satu kelas A dibelah dua secara acak (benih 42).
Rata-rata kelompok 1 : 65.62 (n = 8)
Rata-rata kelompok 2 : 76.29 (n = 7)
Selisih : -10.66 poin
p-value : 0.1164Hasil percobaan itu menjelaskan banyak hal:
- Dua kelompok yang pasti setara — belahan kelas yang sama — bisa saja selisih 10,66 poin rata-ratanya. Tidak ada guru, metode, atau perbedaan apa pun di antara keduanya; selisih itu murni hasil pembagian acak 15 siswa.
- Selisih sebesar itu pun belum bermakna (p = 0,1164), apalagi selisih 3,7 poin antar kelas (p = 0,44). Dengan kelompok sebanyak ini, kegoyangan alami rata-rata memang besar — itulah yang diukur uji-t, bukan seberapa yakin kita melihat dua angka berbeda.
- Praktiknya bagi laporan: selisih antar kelompok selalu dilaporkan bersama p-value-nya, dan kesimpulannya mengikuti hasil uji, bukan kesan mata.
Batas-batas yang Ikut Ditulis #
Interpretasi yang jujur menuliskan keterbatasan secara terbuka, bukan menyembunyikannya di kaki halaman. Untuk analisis ini, empat batas wajib menyertai temuan: sampel hanya 30 siswa dari satu ujian di satu sekolah, sehingga temuan berlaku untuk kelompok serupa dan perlu diperiksa ulang pada data lebih besar; jam belajar adalah laporan mandiri siswa yang bisa meleset dari kebiasaan sebenarnya — satu dari tiga lapisan konteks yang kita baca pada Bagian 2; variabel kuat seperti nilai ujian sebelumnya tidak tersedia, padahal ia prediktor terbaik nilai berikutnya; dan hanya dua variabel kebiasaan yang terukur, meninggalkan faktor lain di luar jangkauan analisis. Menulis daftar seperti ini bukan menurunkan nilai proyek — justru menaikkan kredibilitasnya, karena pembaca tahu batas kepercayaan yang mereka beli.
Bahasa Laporan yang Tepat dan yang Berlebihan #
Sekarang kita latih bagian yang paling terasa di laporan akhir: memilih kalimat. Tabel berikut memasangkan klaim berlebihan dengan versi yang didukung bukti:
| Kalimat berlebihan | Kalimat yang didukung data |
|---|---|
| “Belajar lebih lama menyebabkan nilai naik.” | “Jam belajar berkorelasi sangat kuat dengan nilai (r = 0,94).” |
| “Menambah satu jam belajar menjamin nilai naik 2,9 poin.” | “Tiap tambahan jam belajar berasosiasi dengan kenaikan sekitar 2,9 poin nilai secara rata-rata.” |
| “Kelas A lebih unggul dari kelas B.” | “Selisih rata-rata kedua kelas tidak ditemukan bermakna (p = 0,44).” |
| “Kehadiran yang tinggi menentukan nilai tinggi.” | “Kehadiran sejalan dengan nilai (r = 0,87), tetapi sejalan pula dengan jam belajar sehingga sumbangannya sulit dipisahkan.” |
Pola pada kolom kanan konsisten: kata kerja kuat seperti “menyebabkan”, “menjamin”, dan “menentukan” hanya untuk desain yang memang membuktikan sebab; untuk data observasional kita memakai kata “sejalan”, “berasosiasi”, “berkorelasi”. Untuk hasil uji yang tidak bermakna, bahasanya “tidak ditemukan bermakna” atau “belum ada bukti cukup” — bukan “terbukti sama”, karena ketiadaan bukti memang bukan bukti ketiadaan.
Panduan untuk Dataset Anda #
Saat giliran Anda menginterpretasikan dataset pilihan sendiri, enam langkah berikut menjaga kesimpulan tetap sepadan dengan buktinya:
- Rangkum temuan beserta status buktinya — seperti tabel T1-T4 di atas — sebelum menulis satu kalimat kesimpulan.
- Pasangkan setiap klaim dengan angkanya — r, slope, atau p-value — sehingga pembaca bisa memeriksa, bukan sekadar percaya.
- Uji setiap klaim sebab-akibat dengan pertanyaan: apakah ada penjelasan lain yang sama selarannya? Bila ya, tulis hubungan sebagai asosiasi.
- Baca p-value dengan arah yang benar: p kecil berarti hasil jarang muncul dari kebetulan; p besar berarti belum ada bukti — bukan bukti tidak ada perbedaan.
- Hargai ukuran sampel: temuan dari 30, 300, dan 3.000 baris pantas dibaca dengan tingkat keyakinan yang berbeda.
- Minta satu orang lain membaca ringkasan Anda dan menantang satu klaim mana pun yang terdengar lebih kuat dari angkanya.
Empat temuan kini berdiri dengan status bukti dan bahasa yang tepat. Tersisa satu langkah: merangkai semuanya — data, metode, temuan, keterbatasan — menjadi laporan utuh yang bisa dipegang siapa pun, pada Bagian 11: Menyusun Laporan .