YZM301 · Teardown Sprint · İz 3

Üç 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örModfαgüç / NkG*PowerBu motorDurum

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örfG*Power NEn küçük doğru N (= motor, scipy 1.18)FarkG*Power'ın N'inde gerçek güç
V510,0019 634 6929 634 692aynı0,800000006
V530,000538 538 75938 538 759aynı0,800000006
V540,0002240 867 222240 867 2253 hasta eksik0,7999999953 — hedefin altında
V520,0001963 468 906963 468 89115 hasta fazla0,800000007
V550,000053 853 878 0723 853 875 5522 520 hasta fazla0,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ı

  1. 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).

  2. Kanıtla

    Her iddia G*Power penceresinden alınan bir vektörle sınandı; yanlış çıkan iddialar halüsinasyon günlüğüne girdi.

  3. Spec çıkar

    Bulgular 18 kurallık bir spesifikasyona ve Gherkin kabul kriterlerine dönüştü. Spec'te kod ya da adres yok.

  4. 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.

  5. 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.

Tanıtım · ~70 sn
Komut satırı · 58 sn