Varyans Hesaplanması Için Algoritmalar

Kısaca: varyans hesaplanması icin kullanılan algoritmalar pratik sonuçlar elde edilmesinde önemli rol oynamaktadırlar. Varyansın hesaplanması için işe yarar bilgisayar algoritmalarının tasarlanmasında ana sorun varyans formüllerinin veri kare toplamlarının hesaplanmasını gerektirmesindedir. Bu işlem yapılırken sayısal kararsızlık problemleri ve özellikle büyük veri değerleri bulunuyorsa aritmetik taşmalar problemleri ortaya çıkması çok muhtemeldir. ...devamı ☟

varyans hesaplanması icin kullanılan algoritmalar pratik sonuçlar elde edilmesinde önemli rol oynamaktadırlar. Varyansın hesaplanması için işe yarar bilgisayar algoritmalarının tasarlanmasında ana sorun varyans formüllerinin veri kare toplamlarının hesaplanmasını gerektirmesindedir. Bu işlem yapılırken sayısal kararsızlık problemleri ve özellikle büyük veri değerleri bulunuyorsa aritmetik taşmalar problemleri ortaya çıkması çok muhtemeldir. I. Naif algoritma Tüm bir anakütle veri dizisi için varyansın hesaplanması için formül şudur: :\sigma^2 = \displaystyle\frac ^ x_i^2 - (\sum_^ x_i)^2/n}. \! Bir sonsuz olmayan n gözlem hacminde bir örneklem veri dizisi kullanarak anakütle varyansının bir yansız kestirim değerini bulmak için formül şöyle ifade edilir: :s^2 = \displaystyle\frac ^ x_i^2 - (\sum_^ x_i)^2/n}. \! Bu formüller kullanılarak varyans kestirimi hesaplamak için bir naif algoritma için szde kod şöyle verilir: n = 0 toplam = 0 toplam_kare = 0 for veri olan her x: n = n + 1 toplam = toplam + x toplam_kare = toplam_kare + x*x end for ortalama = toplam/n varyans = (toplam_kare - toplam*ortalama)/(n - 1) Bu algoritma bir sonlu anakutle verileri icin varyansin hesaplanmasina hemen adapte edilebilir: en son satirda ki n - 1 ile bolum yapilacagina n ile bolum yapilir. toplam_kare ve toplam * ortalama bibirine hemen yakin sayilar olabilir. Bu nedenle sonucun kesinligi hesaplamada kullanilan kayan noktali aritmetigin dogal kesinligindan daha az olabilir. Eger varyans degeri elde edilen veri toplamina karsit olarak daha kucuk ise, bu sorun daha da siddetle ortaya cikar. II. İki-geçişli algoritma Varyans için değişik bir formül kullanan diğer bir yaklaşım şu sözde kod ile verilmiştir: n = 0 toplam1 = 0 for veri olan her x: n = n + 1 toplam1 = toplam1 + x end for ortalama = toplam1/n toplam2 = 0 for veri olan her x: toplam2 = toplam2 + (x - ortalama)^2 end for varyans = toplam2/(n - 1)

IIa. Düzeltilmiş toplam şekli

Yukarıda verilen algortımanın düzeltilmiş toplam şekli şöyle verilir: n = 0 toplam1 = 0 for veri olan her x: n = n + 1 toplam1 = toplam1 + x end for ortalama = toplam1/n toplam2 = 0 toplamc = 0 for veri olan her x: toplam2 = toplam2 + (x - ortalama)^2 toplamc = toplamc + (x - ortalama) end for varyans = (toplam2 - toplamc^2/n)/(n - 1) III. On-line algoritması :m_} = \frac} + x_}} = m_} + \frac} - m_}} \! :s^2_} = \frac} + (x_} - m_}) \, (x_} - m_})} \; \; \, \, \; \, \mathrm \! :s^2_} = \frac} + (x_} - m_}) \, (x_} - m_})}. Gereken yenileştirme için bulunabilecek daha uygun bir işlemin (cari) ortalamadan farkların karelerinin toplamını bulmak olduğu anlaşılmıştır; bu değer \sum_^n (x_i - m)^2 olup burada M_2 olarak gösterilmektedir: :M_\mathrm\! = M_\mathrm + (x_\mathrm - m_\mathrm)(x_\mathrm - m_\mathrm) :s^2_\mathrm = \frac :s^2_\mathrm = \frac Sayısal olarak daha kararlı bir algoritma aşağıda verilmiştir. Bu algoritma ortalama hesaplamak için kullanılmak niyetiyle Knuth (1998) tarafından verilmiş ve orada ilk defa Welford(1962) tarafından ortaya atıldığı bildirilmiştir. n = 0 ortalama = 0 M2 = 0 for veri olan her x: n = n + 1 delta = x - ortalama ortalama = ortalama + delta/n M2 = M2 + delta*(x - ortalama) // Bu terim ortalama icin yeni değeri kullanır end for varyans_n = M2/n varyans = M2/(n - 1) IV. Ağırlıklı küçük artışlı algoritma Eğer gözlemler için değişik ağırlıklar verilmişse, West (1979) şu küçük artışlı algoritmanın kullanılabileceğini bildirmiştir: n = 0 for veri olan her x: if n=0 then n = 1 ortalama = x S = 0 toplamagırlık = agırlık else n = n + 1 temp = agırlık + toplamagırlık S = S + sumweight*agırlık*(x-ortalama)^2 / temp ortalama = ortalama + (x-ortalama)*agırlık / temp toplamagırlık = temp end if end for Varyans = S * n / ((n-1)*toplamagırlık) // eğer veri dizisi anakütle içinse n/(n-1) kullanılmaz. V. Paralel algoritma Chan, Golub ve LeVeque (1979) hazırladıkları bir raporda yukarıda verilen III. On-line Algoritmasının bir örneklem olan Xi herhangi iki tane X^A ve X^B setlerine ayırmak için işleme konabilen bir algoritmanın özel bir hali olduğunu bildirmişlerdir: :\delta\! = m^B - m^A :m^X = m^A + \delta\cdot\frac :M_2^X = M_2^A + M_2^B + \delta^2\cdot\frac. Bu bazı hallerde daha kullanışlı olabilmektedir. Örneğin girdinin ayrılabilir parçalarına çoklu kompüter işlem birimlerinin kullanılması imkanini sağlayabilir.

V.a. Üst seviyede istatistikler

Örnek

lem verileri için üst seviyede istatistikler olan çarpıklık ve basıklık ölçülerini bulmak icin Terriberry Chen'in üçüncü ve dördüncü merkezsel moment bulmak için ortaya attığı formülü daha uygun bir şekile şöyle değiştirmiştir.: :M_3^X = M_3^A + M_3^B + \delta^3\frac + 3\delta\frac :\begin M_4^X = M_4^A + M_4^B & + \delta^4\frac \\ & + 6\delta^2\frac + 4\delta\frac \\ \end Burada yine, M_k verilerin ortalamadan farklarının üstel değerlerinin toplamlarıdır; yani \Sigma(x - \overline)^k olur. Bu değerler kullanılarak çarpıklık ve basıklık ölçüleri şöyle bulunur: :g_1 = \frac M_3}} : çarpıklık, :g_2 = \frac : basıklık. Küçük artışlı hallerde (yani B = \), bu şöyle basitleştirilebilir: :\delta\! = x - m :m' = m + \frac :M_2' = M_2 + \frac :M_3' = M_3 + \frac - \frac :M_4' = M_4 + \frac + \frac - \frac Burada dikkati çeken nokta, \delta / (n+1) değerini korumak suretiyle, sadece tek bir bölme işleminin gerekli olmasi ve böylece çok az bir ekstra maliyetle daha yüksek istatistiksel ölçüler hesaplanabilmesidir. Örnek Kullanılan kompüterde bütün "floating" nokta operasyonlarının IEEE 754 çifte-hassiyetli aritmetik ile yapıldığı varsayılsın. Sonsuz büyüklükte bir anakütleden n=5 büyüklüğünde bir örneklem olarak ::4, 7, 13, 16 veri seti elde edildiğini düşünelim. Bu örneklem için örneklem ortalaması 10 olur ve yanlı olmayan anakütle varyans kestirimi 30dur. Hem "I. naif Algoritma" hem de "II. iki geçisli Algoritma" bu değerleri doğru olarak hesaplamaktadirlar. Şimdi örnekleme olarak şu veri setini alalım: ::10^8+4, 10^8+7, 10^8+13, 10^8+16 Bu örneklemin de, birinci orneklem gibi ayni varyans kestirimine sahip olması gerekir. "II. Algoritma" bu varyansı doğru olarak hesaplamaktadır. Fakat "I. Algoritma" sonuç olarak tam 30 yerine 29.333333333333332 sonucu verir. Bu dakiklik kaybının belki kabul edilebilir tolerans olduğu ve "I. Algoritma" kullanılmasının nisbeten önemsiz bir hata doğurduğu söylenebilir. Fakat bu "I. Algoritma" hesaplamasında çok önemli bir eksiklik ve hataya işaret etmektedir. Bu sefer örneklem olarak şunu alalım: ::10^9+4, 10^9+7, 10^9+13, 10^9+16 Yine "II. Algoritma" doğru anakütle varyans kestirimi oalarak 30 gösterir. Ama "I. Algoritma" kullanılınca elde edilen kestirim hesabı -170.66666666666666 olarak verilir. Bu çok önemli ve yapılmaması gereken bir hatadır; çünkü kavram olarak tanımlamayla varyans değerinin hiçbir zaman negatif olmaması gerekir. Ayrıca bakınız * Varyans * Varyans hesaplaması için formül

Dış bağlantılar

*

Kaynaklar

Vikipedi

Bu konuda henüz görüş yok.
Görüş/mesaj gerekli.
Markdown kullanılabilir.