Bir web tartışma forumunun istatistikleri olan bir veri setine sahibim. Bir konunun olması beklenen cevap sayısının dağılımına bakıyorum. Özellikle, konuların cevap sayımlarının bir listesini içeren bir veri seti ve daha sonra bu sayıya sahip olan konuların sayısını oluşturdum.
"num_replies","count"
0,627568
1,156371
2,151670
3,79094
4,59473
5,39895
6,30947
7,23329
8,18726
Veri kümesini bir log-log arsaya çizersem, temelde düz bir çizgi olanı alırım:
(Bu bir Zipfian dağılımıdır ). Wikipedia, log-log plot'larındaki düz çizgilerin biçimindeki bir monomiyal ile modellenebilecek bir işlevi ima ettiğini söyledi . Ve aslında böyle bir işlevi göze çarptım:
lines(data$num_replies, 480000 * data$num_replies ^ -1.62, col="green")
Gözbebeklerim açıkça R kadar doğru değil. Öyleyse R'nin bu modelin parametrelerini benim için daha doğru şekilde nasıl ayarlayabildim? Polinom regresyonunu denedim, ancak R'nin üsse bir parametre olarak uymaya çalıştığını sanmıyorum - istediğim model için doğru ad nedir?
Düzenleme: Cevaplar için teşekkürler herkese. Önerildiği gibi, şimdi bu tarifi kullanarak girdi verilerinin kayıtlarına karşı doğrusal bir modele uyuyorum:
data <- read.csv(file="result.txt")
# Avoid taking the log of zero:
data$num_replies = data$num_replies + 1
plot(data$num_replies, data$count, log="xy", cex=0.8)
# Fit just the first 100 points in the series:
model <- lm(log(data$count[1:100]) ~ log(data$num_replies[1:100]))
points(data$num_replies, round(exp(coef(model)[1] + coef(model)[2] * log(data$num_replies))),
col="red")
Sonuç, modeli kırmızı ile gösteren:
Bu benim amaçlarım için iyi bir yaklaşım gibi görünüyor.
Daha sonra, orijinal ölçülen veri kümesi gibi konular (1400930) aynı toplam sayı üretmek için bir rasgele sayı üreteci ile birlikte bu Zipfian modeli (a = 1,703164) kullanın (kullanarak ihtiva Web'de bulunan bu C kodu , sonuç görünüyor) sevmek:
Ölçülen noktalar siyah, modele göre rastgele oluşturulmuş olanlar kırmızıdır.
Bunun 1400930 puanları rasgele üreterek yarattığı basit varyansın orijinal grafiğin şekli için iyi bir açıklama olduğunu düşünüyorum.
Ham verilerle kendin oynamak istiyorsan, buraya gönderdim .