Bir model modeli için regresyon ?


22

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:

Log-log ölçeğinde çizilen veriler

(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:y=birxk

lines(data$num_replies, 480000 * data$num_replies ^ -1.62, col="green")

Göz küresi modeli

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:

Uygun model

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:

Rasgele sayı üretilen sonuçlar

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


2
Neden sadece her iki sayının ve num_replies'in günlüklerini almıyor ve bunlara standart bir lineer modele uymuyorsunuz?
gung - Monica'yı yeniden kurun

3
10000 yanıtın hemen altındaki sayımdaki büyük artış nedir?
Glen_b -Reinstate Monica

3
Ne sayımlar ne de log-sayımları sabit bir varyansa sahip değildir (sayımlar için, varyans ortalama ile artacaktır, log-saymalar için genellikle ortalama ile düşecektir). Her iki değişkenin sayıları ve sayıları oldukça küçük olduğu göz önüne alındığında, belki bir log-link ile bir Poisson, quasi-Poisson veya negatif binom GLM'ye yaslandım. Sıradan regresyon kullanmanız gerekiyorsa, en azından varyans sorunu ile ilgilenin. Başka bir alternatif, sayıların bir Anscombe veya Freeman-Tukey dönüşümü yapmak ve doğrusal olmayan en küçük kareler modeline uymaktır.
Glen_b -Reinstate Monica

1
Bu ilginç yükseliş, birkaç forumda insan tarafından uygulanan "azami konu uzunluğu" nedeniyledir.
thenickdude

2
Fudge lezzetli :) Daha açıkçası, (num_replies + 1) ve (num_posts_in_topic) arasında bir fark yoktur.
o zaman

Yanıtlar:


22

Örneğiniz çok iyi bir örnek çünkü bu tür verilerle tekrarlayan sorunları açıkça gösteriyor.

İki ortak isim güç işlevi ve güç kanunu. Biyolojide ve bazı diğer alanlarda, insanlar, özellikle boyut ölçümleriyle ilgili olduğunuzda, genellikle, tüm ölçümlerden bahseder. Fizikte ve bazı diğer alanlarda, insanlar ölçeklendirme yasalarından bahseder.

Monomial'ı burada iyi bir terim olarak görmezdim, çünkü bunu tam sayıdaki güçlerle ilişkilendiririm. Aynı nedenden ötürü, bu en iyi, bir polinomun özel bir hali olarak kabul edilmez.

Bir iktidar yasasını bir dağıtım kanununun kuyruğuna yerleştirme sorunları, iktidar yasasını iki farklı değişken arasındaki ilişkiye uydurma problemlerine dönüşür.

Bir güç yasasına uymanın en kolay yolu her iki değişkenin logaritmasını almak ve sonra regresyon kullanarak düz bir çizgiye oturmaktır. Her iki değişken de yaygın olduğu gibi hataya maruz kaldığında, buna birçok itiraz vardır. Buradaki örnek, her iki değişkenin (ve hiçbirinin) yanıt (kabul edilebilir değişken) olarak kabul edilebileceği şeklinde bir durumdur. Bu argüman daha simetrik bir fitting yöntemine yol açar.

Ek olarak, her zaman hata yapısına ilişkin varsayımlar sorusu vardır. Yine, buradaki örnek, hataların açıkça heteroscedastic olduğu için bu noktada bir örnektir. Bu, ağırlıklı en küçük kareler gibi bir şey önerir.

Mükemmel bir inceleme, http://www.ncbi.nlm.nih.gov/pubmed/16573844

Yine bir başka sorun da, insanların güç yasalarını yalnızca belirli bir veri aralığı boyunca tanımlamalarıdır. Sorular daha sonra istatistiksel olduğu kadar bilimsel hale geldi, güç yasalarını tanımlamanın sadece arzulu bir düşünce mi yoksa moda bir amatör eğlence mı olduğu konusunda tamamen aşağı. Tartışmanın çoğu, fiziki ve metafiziğe kadar değişen tartışmalarla birlikte, fraktal ve ölçeksiz davranış başlıkları altında ortaya çıkmaktadır. Özel örneğinizde, biraz eğrilik belirgin gözüküyor.

Güç kanunları için meraklılar her zaman şüphecilerle eşleşmiyor, çünkü meraklılar şüphecilerden daha fazlasını yayınlıyor. Logaritmik skalalardaki dağılım grafiğinin, temel olan doğal ve mükemmel bir komploya, güç fonksiyon formundan ayrılmaları kontrol etmek için bir çeşit kalıntı grafiğe eşlik etmesi gerektiğini öneriyorum.


2
Teşekkürler, bu neden insanların "polinom regresyonu" hakkında tartıştıkları böyle bir şey bulamadığımı açıklıyor. Sorumu, bu modele uymanın sonuçları ile güncelledim!
thenickdude

Güç yasalarına uyma konusunda biraz daha sıkı bir yaklaşım ve takılan model için önemlilik testleri arıyorsanız, muhtemelen bu makaleyi istersiniz: arxiv.org/abs/0706.1062 ve ekli kod: tuvalu.santafe.edu/ ~ aaronc / powerlaws
Martin O'Leary

2
Yukarıda belirtilen makale, güç yasaları olan değişkenler arasındaki ilişkiler değil, güç yasaları olan dağıtımlar içindir. Bu sorunun başlığı ikincisine daha iyi uyar; Bu sorunun örneği bir öncekine daha iyi uyuyor.
Nick Cox

1

Bir gücün sığacak iyi bir model olduğunu varsayarsanız, modeliniz olarak kullanabilir log(y) ~ log(x)ve aşağıdakileri kullanarak doğrusal bir regresyon yerleştirebilirsiniz lm():

Bunu dene:

# Generate some data
set.seed(42)

x <- seq(1, 10, 1)

a = 10
b = 2
scatt <- rnorm(10, sd = 0.2)


dat <- data.frame(
  x = x,
  y = a*x^(-b) + scatt
)

Bir model yerleştirin:

# Fit a model
model <- lm(log(y) ~ log(x) + 1, data = dat) 
summary(model)

pred <- data.frame(
  x = dat$x,
  p = exp(predict(model, dat))
)

Şimdi bir arsa oluşturun:

# Create a plot
library(ggplot2)
ggplot() +
  geom_point(data = dat, aes(x=x, y=y)) +
  geom_line(data = pred, aes(x=x, y=p), col = "red")

görüntü tanımını buraya girin

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.