Üç tedavi kolu için kaç hasta gerekir?
G*Power 3.1.9.7'nin tek yönlü ANOVA hesabını tersine mühendislikle çözdük, kodunu hiç görmeyen ikinci bir ajanla sıfırdan yeniden yazdık ve 63 G*Power penceresiyle karşılaştırdık. Aşağıdaki hesaplayıcı, depodaki Python motorunun kendisini tarayıcınızda çalıştırır.
Python motoru tarayıcıya yükleniyor (scipy dahil, ilk açılışta ~10 sn)…
G*Power ile yan yana
Her satır G*Power 3.1.9.7 penceresine elle girilmiş bir vektördür; yanında motorun aynı girdideki çıktısı durur. Beklenen değeri ajan değil, kara kutunun kendisi belirledi. Satıra tıklayınca pencerenin ekran görüntüsü açılır.
| Vektör | Mod | f | α | güç / N | k | G*Power | Bu motor | Durum |
|---|
G*Power nerede yanılıyor
Çok küçük etkilerde (payda serbestlik derecesi 2·10⁸'i geçince) iki program ayrışıyor. Kimin doğru olduğunu ikisinden de bağımsız, 40 basamak hassasiyetle hesaplanan güç gösteriyor: hedef güç 0,80'e ulaşan en küçük 3'ün katını motor buluyor, G*Power bulamıyor.
Bir dürüstlük notu: motorun bu bölgedeki başarısı da ortama bağlı. scipy 1.18'de beşinde de doğru; eski scipy 1.15'te V52'de 6 hasta fazla veriyor. Bunu tek makinede değil, Windows ve Linux üzerinde dört farklı Python ile koşan CI matrisi yakaladı.
| Vektör | f | G*Power N | En küçük doğru N (= motor, scipy 1.18) | Fark | G*Power'ın N'inde gerçek güç |
|---|---|---|---|---|---|
| V51 | 0,001 | 9 634 692 | 9 634 692 | aynı | 0,800000006 |
| V53 | 0,0005 | 38 538 759 | 38 538 759 | aynı | 0,800000006 |
| V54 | 0,0002 | 240 867 222 | 240 867 225 | 3 hasta eksik | 0,7999999953 — hedefin altında |
| V52 | 0,0001 | 963 468 906 | 963 468 891 | 15 hasta fazla | 0,800000007 |
| V55 | 0,00005 | 3 853 878 072 | 3 853 875 552 | 2 520 hasta fazla | 0,800000275 |
Kanıt kodu: tests/test_r18_high_precision.py · ayrıntı: R18_YUKSEK_HASSASIYET.md
Testleri de test ettik
Geçen testler tek başına bir şey kanıtlamaz; bir hatayı yakalayıp yakalamadıkları önemlidir.
- 63
- G*Power penceresi, ekran görüntüleriyle. 59'u tüm alanlarıyla birebir, 4'ü yukarıdaki sapma.
- 1 485
- statsmodels vektörü. Kütüphane kesirli N verir, G*Power k'nın katına yuvarlar; kural tutuyor.
- 16 000
- rastgele girdi, 8 değişmez üzerinde: f büyüdükçe N küçülür, N her zaman k'nın katıdır, k = 2'de sonuç bağımsız bir t testi formülüyle aynıdır…
- 25 / 26
- mutant öldürüldü. Koda bilerek sokulan hataları testler yakaladı; ilk kampanyada yaşayan iki mutant iki gerçek test açığını gösterdi, kapatıldı. Yaşayan tek mutant eşdeğerdir.
- 19 / 20
- Türkçe klinik soruyu MCP üzerinden doğru yanıtlayan ajan; hiçbir yanıtta kendi hesapladığı sayı yok.
Nasıl yapıldı
Sök
Bir ajan REA ve Ghidra ile G*Power'ın içine baktı; kılavuzda olmayan 23 davranışı adres ve fonksiyon iziyle kanıt defterine yazdı. En önemlisi: N, grup sayısının katına yukarı yuvarlanıyor (251 değil 252).
Kanıtla
Her iddia G*Power penceresinden alınan bir vektörle sınandı; yanlış çıkan iddialar halüsinasyon günlüğüne girdi.
Spec çıkar
Bulgular 18 kurallık bir spesifikasyona ve Gherkin kabul kriterlerine dönüştü. Spec'te kod ya da adres yok.
Temiz odada yeniden yaz
İkinci ajan yalnızca spec ile, REA olmadan, başka bir klasörde motoru, komut satırını ve MCP sunucusunu yazdı. Binary'yi hiç görmedi.
Diferansiyel test
Aynı girdiler iki programa verildi; her uyuşmazlık ya bizim hatamız ya da kaçırdığımız bir kuraldı. Tek açıklanamayan fark, G*Power'ın kendi sayısal kayması çıktı.
Videolar
İkisi de 4K. Birincisi projenin tamamı; ikincisi ödevin istediği komut satırı koşusu: tek satır JSON, geçersiz girdide sıfırdan farklı çıkış kodu.