Bir dağıtımın bir güç yasasına uygun olup olmadığı nasıl test edilir?


13

Kaç kullanıcının kaç soru gönderdiğine dair verilerim var. Örneğin,

[UserCount, QuestionCount] 
[2, 100] 
[9, 10] 
[3, 80] 
... ...

Bu, 2 kullanıcının her birinin 100 soru gönderdiğini, 9 kullanıcının her birinin 10 soru gönderdiğini vb. Peki, UserCount, QuestionCountdağıtımın bir güç yasasına uygun olup olmadığını nasıl belirleyebilirim ?

PoweRlaw paketini buldum . Ancak, değerlendirmeyi yapmak için yalnızca bir grup sayı iletebilirim. (Bu pakette sağlanan örnek kelime sıklığıdır.) Peki bu paketi nasıl kullanırım? Yoksa yanlış bir şey mi var? Ayrıca her kullanıcının soru sayısıyla ilgili verilerim var, yani [100, 100, 10, 10, 10 ... ]. Bu verileri pakete iletirsem ne elde edeceğim?


1
Bu makalede, R kodu yanı sıra güç hukuku dağıtımlarını sınamak için matematiksel bir açıklama sağlar. Clauset ve diğ. "Ampirik Verilerde Güç Hukuku Dağılımları."
Sycorax, Reinstate Monica

Teşekkürler. Ancak, kağıttaki tüm içeriği yakalayamıyorum. Doğrulamayı yapmak için bazı yaklaşımlar istiyorum. 'Pakete tek bir veri geçişi grubunun anlamı' hakkında bir fikriniz var mı? Örnekte, veri kümesi kelime frekanslarıdır. Tekrar teşekkürler.
tThirday

Üzgünüm, bu pakete aşina değilim.
Sycorax: Reinstate Monica

Yanıtlar:


8

Clauset ve arkadaşlarına göre, güç yasası kuyruğunu poweRlawpaketle şu şekilde test edersiniz :

  1. Güç hukuku dağıtım nesnesini oluşturun. Bu durumda verileriniz ayrık olduğundan, sınıfın ayrık sürümünü kullanın
data <- c(100, 100, 10, 10, 10 ...)
data_pl <- displ$new(data)
  1. Güç yasasının ve üs değerini tahmin edin ve bunları güç yasası nesnesine atayın αxminα
est <- estimate_xmin(data_pl)
data_pl$xmin <- est$xmin
data_pl$pars <- est$pars

son iki satır bir satır olarak yeniden yazılabilir

data_pl$xmin <- est

Ayrıca, bu noktada KS istatistiğini görebilirsiniz:

est$KS
  1. KS istatistiği, güç yasası dağıtımının verilerinize ne kadar iyi uyduğunu söyler, ancak verilerinizin güç yasasından ne kadar çekildiğini söylemez. Yani değerine de ihtiyacınız var . Bunu şu şekilde yapabilirsiniz:p
bs <- bootstrap_p(data_pl)
bs$p

Bu biraz zaman alabilir, bu yüzden git ve bir fincan çay al ...

  1. Bir değeri aldığınızı ve bunun 0.05'ten büyük olduğunu veya önemli seviyeniz ne olursa olsun, başka hiçbir alternatif dağıtımın verilere güç yasalarından daha iyi uyma olasılığını hariç tutmanız gerekir. Paket ile mukayese edebilmek 3 diğer alternatifleri uygular. Örneğin log-normal'i ele alalım:ppoweRlaw
data_alt <- dislnorm$new(data)
data_alt$xmin <- est$xmin
data_alt$pars <- estimate_pars(data_alt)
comp <- compare_distributions(data_pl, data_alt)

O Not çünkü log-normal dağılım, güç yasasının olarak ayarlanır işlevi gerektiren Her iki dağılımlar için aynı olması bu. Nesne ilginç iki alan vardır: bir pozitif sayı anlamı ile daha iyi bir uyum, hangi gösterir aksi iyidir ve negatif; yani fark ne kadar önemli. x m i nxmincompare_distributionsxmincompcomp$test_statisticdata_plcomp$p_two_side

İle bu adımı yineleyin disexp, dispoisbu alternatiflerle güç kanunu karşılaştırmak için sınıflar.


Lütfen @Clivele, verilerinize bağımsız bir örnek verebilir misiniz? Verilerimi test etmek için bir sorunum var, bu yüzden çalışan bir örneği takdir ediyorum ... teşekkürler, yayınınızı çok ilham verici buldum!
maycca

1
Sen komutu yazabilirsiniz data("moby")ve kullanımı mobyyerine dataolduğu gibi, benim örnekte giriş
Zebra Propulsion Lab
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.