Excel'deki bir frekans dağılımından Nth değerini (veya N'nci yüzdelik değeri) nasıl tahmin edebilirim?


2

Ham veri yerine sıklık sayıları içeren bir Excel elektronik tablom var. 653. değer veya 95. yüzdelik gibi şeyleri kolayca bulabilmeyi istiyorum.

Örnek olarak, ham verilerin paket başına gecikme olduğunu varsayalım. Sahip olduğum frekans sayımı verileri şöyle görünebilir:

1ms = 1234567
3ms = 34254
5ms = 33034
7ms = 6901
10ms = 76

6901 paket kovaya "5 milisaniyeden büyük, ancak 7 milisaniyeden büyük değil" düştü.

Kovalar oldukça ayrıntılı olduğundan, ham veriye sahipmişim gibi bazı standart istatistik bilgileri hesaplamak için bazı hileler yapabilirim diye düşünüyordum. Ortalama hesaplamak bunu gerektirmez, ancak medyan veya standart sapma veya yüzde 99 gibi bir şey tamamen bir veri aralığına dayanmaya dayanır. Biri yardım edebilir mi?


Matematiksel olarak ne kadar doğru olmak istediğinize bağlı olarak bu, math.stackexchange.com için daha iyi bir soru olabilir. Her bir kepçenin iç dağılımı hakkında bazı varsayımlarda bulunmalısınız. Biri her kovada eşit dağılım gösterebilir. Bunu yapmak ve anlamak en kolay şey olurdu, ancak örneğinizin üssel azalmasının görünüşüne göre, bu oldukça kötü bir varsayım olabilir. Bu varsayımla sorun yaşarsanız birkaç formül yazmanıza yardımcı olabilirim.
Jarvin

1
Aslında, istatistik.stackexchange.com muhtemelen şimdi düşünüyorum, daha iyidir. Ancak soruyu doğru formülü bulmak için ayırmanız ve bu formülü excel uygulamasında uygulamanız gerekir. Sorunuzla hangisiyle daha fazla uğraştığınızdan ve nerede yayınlanması gerektiğine karar vermeniz gerektiğinden emin değilim. Taşınmasını isterseniz, bir yönetici diğer siteye geçirebilir.
Jarvin

Yanıtlar:


1

Sahip olduğunuz frekanslar için Excel, ham verileri tutmak için yeterli satır içermiyor. Frekansları 100 katına düşürdüm (sonuncusu hariç), böylece bir Excel sayfasına sığacaklardı. Bu kodu çalıştırırsanız, aşağıdaki gibi bir formülle kullanıldığında ham verileri almalısınız:

{=FREQUENCY($A$2:$A$13095,{1,3,5,7,10})}

size (küçültülmüş frekanslarım) 12345, 343, 330, 69, 7 verir. Aralıklarınızda rastgele sayılar üretir.

Sub MakeRawData()

    Dim i As Long
    Dim dRaw As Double

    For i = 1 To 12345
        dRaw = Rnd
        Sheet1.Cells(Sheet1.Rows.Count, 1).End(xlUp).Offset(1, 0).Value = dRaw
    Next i

    For i = 1 To 343
        dRaw = (2 - 1 + 1) * Rnd + 1
        Sheet1.Cells(Sheet1.Rows.Count, 1).End(xlUp).Offset(1, 0).Value = dRaw
    Next i

    For i = 1 To 330
        dRaw = (4 - 3 + 1) * Rnd + 3
        Sheet1.Cells(Sheet1.Rows.Count, 1).End(xlUp).Offset(1, 0).Value = dRaw
    Next i

    For i = 1 To 69
        dRaw = (6 - 5 + 1) * Rnd + 5
        Sheet1.Cells(Sheet1.Rows.Count, 1).End(xlUp).Offset(1, 0).Value = dRaw
    Next i

    For i = 1 To 7
        dRaw = (9 - 7 + 1) * Rnd + 7
        Sheet1.Cells(Sheet1.Rows.Count, 1).End(xlUp).Offset(1, 0).Value = dRaw
    Next i

End Sub

Çok verimli değil ve kaç dakika sürebilir, ancak sık sık yapmanız gerekmiyorsa, bu büyük bir sorun olmamalı.


Kod için teşekkürler. Benim sorunum aslında gönderdiğim rakamlardan daha kötü. 100 kova (1 - 100ms arası) ve toplam 38 milyon paket paketim var.
kbyrd

Bu veri hacmiyle, belki de verileri bir veritabanında (Access, SQL Server Express) saklamak ve verileri Excel ile değiştirmek daha iyi bir yaklaşım olabilir mi? Ne yazık ki, büyük veritabanı veri kümelerini Excel ile değiştirmek konusunda pratik bir tecrübem yok. Herhangi bir düşünce, @dkusleika?
teknomalogical

İlk düşüncem, kova başına yaklaşık 30 veri noktasını geçtiğinizde, veri manipülasyonunun sonuçlarının değişmeyeceğidir. Yukarıdaki kod tarafından üretilen veri kümesini alırsanız, 38 milyon veri noktanız varsa aynı olan bir medyan elde edersiniz. Veritabanına 38 milyon veri noktası koyarsanız, ADO'yu VBA'ya çıkarmak için ADO'yu kullanabilirsiniz (örnekler için dailydoseofexcel'de ADO'yu arayın), ancak bir araya getirici ya da bir şey kullanmadığınız sürece 38 milyon biraz zaman alacak.
dkusleika

2

Partiye yaklaşık 1,5 yıl geciktim, ama sadece bunun üzerine tökezleyen başkalarına göndereceğimi düşündüm.

Bence en iyi bahis, sahip olduğunuz verilerden bir kümülatif dağılım fonksiyonunu enterpolasyon yapmak. Bu, özellikle sağladığınız örnek veriler birlikte çalıştığınız dağıtıma yakınsa, bazı dikkat çekici ve el sallama işlemlerine neden olabilir. Bununla birlikte, ilk başta tahmin ettiğiniz bir dağıtımdan bir milyon + sahte veri noktası oluşturmaktan (ve saklamaktan!) Kesinlikle korkuyor.

CDF'yi edinmek için, her bir kova için kümülatif olasılığı hesaplamanız gerekir. Her zaman biraz gecikme olduğunu varsayalım, bu yüzden 0 sıklıkta minimum değeriniz olarak 0 alın. Her kova üst sınırındaki CDF değerini bulmak için aşağıdaki formülü kullanın.

(sum of frequencies in bucket and previous buckets)/(sum of all frequencies)

Sağladığınız örnek veriler için kümülatif olasılık puanları,

{(0,0); (1;0.943); (3,0.969); (5,0.995); (7,0.999); (10,1)}

Şimdi, incelik için. Eğer dağıtımın nasıl göründüğüne dair bazı sağduyulu içgörüleriniz varsa, örneğin gecikmelerin yaklaşık% 25'inin 0,1 ms'den az olduğunu düşünüyorsanız, bu sezgileri verilerinize ekleyebilirsiniz. Dağılımın neye benzemesi gerektiği hakkında hiçbir fikriniz yoksa, sahip olduklarınızla yuvarlanabilirsiniz.

Buradan iki seçeneğiniz vardır: (a) sahip olduğunuz noktalar arasında doğrusal olarak enterpolasyon yapın veya (b) verilerinize beta dağılımı gibi işlevsel bir forma uyun. (a) regresyon gerektirmediğinden daha basittir; ancak, size sahip olduğunuzdan daha iyi taneli bir resim vermeyecektir ve sıklıkların hesaplanması biraz Excel formülü kung fu gerektirir. (b) size temel verilere, lineer enterpolasyondan daha yakından benzeyen ince taneli bir resim sunacak ve herhangi bir kepçe veya yüzdelik frekansları bulmak için yalnızca basit, basit Excel formülleri gerektirecektir; ancak, Çözücü eklentisini gerektiren bir regresyon gerektirir. (B) seçeneğini tercih ediyorum çünkü paranızın karşılığını en iyi şekilde alıyor (yani çaba).

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.