Regresi untuk model bentuk ?


22

Saya memiliki dataset yang merupakan statistik dari forum diskusi web. Saya melihat distribusi jumlah balasan yang diharapkan dimiliki suatu topik. Secara khusus, saya telah membuat dataset yang memiliki daftar jumlah balasan topik, dan kemudian jumlah topik yang memiliki jumlah balasan tersebut.

"num_replies","count"
0,627568
1,156371
2,151670
3,79094
4,59473
5,39895
6,30947
7,23329
8,18726

Jika saya memplot dataset pada plot log-log, saya mendapatkan apa yang pada dasarnya garis lurus:

Data diplot pada skala log-log

(Ini adalah distribusi Zipfian ). Wikipedia memberi tahu saya bahwa garis lurus pada log-log plot menyiratkan suatu fungsi yang dapat dimodelkan dengan monomial dari bentuk . Dan sebenarnya saya sudah melihat fungsi seperti itu:y=Sebuahxk

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

Model bermata dua

Bola mata saya jelas tidak seakurat R. Jadi bagaimana saya bisa mendapatkan R agar sesuai dengan parameter model ini bagi saya lebih akurat? Saya mencoba regresi polinomial, tetapi saya tidak berpikir bahwa R mencoba menyesuaikan eksponen sebagai parameter - apa nama yang tepat untuk model yang saya inginkan?

Sunting: Terima kasih atas jawaban semua orang. Seperti yang disarankan, saya sekarang sudah cocok dengan model linier terhadap log data input, menggunakan resep ini:

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")

Hasilnya adalah ini, menunjukkan model dengan warna merah:

Model yang dipasang

Itu terlihat seperti perkiraan yang baik untuk tujuan saya.

Jika saya kemudian menggunakan model Zipfian ini (alpha = 1,703164) bersama dengan generator angka acak untuk menghasilkan jumlah total topik yang sama (1400930) seperti dataset terukur asli yang terkandung (menggunakan kode C ini yang saya temukan di web ), hasilnya terlihat seperti:

Angka acak menghasilkan hasil

Poin yang diukur berwarna hitam, yang dihasilkan secara acak sesuai dengan model berwarna merah.

Saya pikir ini menunjukkan bahwa varian sederhana yang dibuat dengan secara acak menghasilkan 1400930 poin ini adalah penjelasan yang baik untuk bentuk grafik asli.

Jika Anda tertarik untuk bermain sendiri dengan data mentah, saya telah mempostingnya di sini .


2
Mengapa tidak mengambil log dari kedua hitungan & num_replies, & cocok dengan model linier standar?
gung - Reinstate Monica

3
Apa itu lonjakan besar dalam hitungan di bawah 10.000 balasan?
Glen_b -Reinstate Monica

3
Baik penghitungan maupun penghitungan log tidak memiliki varians konstan (untuk penghitungan, varians akan meningkat dengan rata-rata, untuk penghitungan log umumnya akan berkurang dengan rata-rata). Mengingat kedua variabel adalah jumlah dan banyak jumlah yang cukup kecil, saya akan condong ke arah Poisson, quasi-Poisson, atau GLM binomial negatif, mungkin dengan log-link. Jika Anda harus menggunakan regresi biasa, setidaknya berurusan dengan masalah varians. Alternatif lain adalah melakukan transformasi Anscombe atau Freeman-Tukey dari perhitungan dan menyesuaikan model kuadrat terkecil nonlinier.
Glen_b -Reinstate Monica

1
Lonjakan menarik itu disebabkan oleh "panjang topik maksimum" yang dipaksakan manusia di beberapa forum.
thenickdude

2
Fudge enak :) Lebih sederhana lagi, tidak ada perbedaan antara (num_replies +1) dan (num_posts_in_topic).
thenickdude

Jawaban:


22

Contoh Anda sangat bagus karena jelas menunjukkan masalah berulang dengan data tersebut.

Dua nama umum adalah fungsi kekuasaan dan hukum kekuasaan. Dalam biologi, dan beberapa bidang lain, orang sering berbicara tentang alometri, terutama setiap kali Anda menghubungkan pengukuran ukuran. Dalam fisika, dan beberapa bidang lain, orang berbicara tentang hukum penskalaan.

Saya tidak akan menganggap monomial sebagai istilah yang baik di sini, karena saya mengaitkannya dengan kekuatan bilangan bulat. Untuk alasan yang sama, ini tidak dianggap sebagai kasus khusus polinomial.

Masalah pemasangan hukum kekuasaan ke ekor distribusi morf menjadi masalah pas hukum kekuasaan untuk hubungan antara dua variabel yang berbeda.

Cara termudah untuk menyesuaikan undang-undang kekuasaan adalah mengambil logaritma dari kedua variabel dan kemudian pas garis lurus menggunakan regresi. Ada banyak keberatan terhadap hal ini setiap kali kedua variabel mengalami kesalahan, seperti yang biasa terjadi. Contoh di sini adalah contoh kasus karena kedua variabel (dan tidak satu pun) dapat dianggap sebagai respon (variabel dependen). Argumen itu mengarah pada metode pemasangan yang lebih simetris.

Selain itu, selalu ada pertanyaan tentang asumsi tentang struktur kesalahan. Sekali lagi, contoh di sini adalah kasus di mana kesalahan jelas heteroscedastic. Itu menunjukkan sesuatu yang lebih seperti kuadrat terkecil tertimbang.

Satu ulasan yang sangat baik adalah http://www.ncbi.nlm.nih.gov/pubmed/16573844

Namun masalah lain adalah bahwa orang sering mengidentifikasi undang-undang kekuasaan hanya atas beberapa rentang data mereka. Pertanyaan-pertanyaan kemudian menjadi ilmiah dan statistik, sampai ke apakah mengidentifikasi hukum kekuasaan hanyalah angan-angan atau hobi amatir yang modis. Sebagian besar diskusi muncul di bawah judul perilaku fraktal dan bebas skala, dengan diskusi terkait mulai dari fisika hingga metafisika. Dalam contoh spesifik Anda, kelengkungan kecil tampak jelas.

Penggemar hukum kekuasaan tidak selalu cocok dengan skeptis, karena para penggemar menerbitkan lebih dari skeptis. Saya menyarankan bahwa sebar plot pada skala logaritmik, meskipun plot alami dan sangat baik yang sangat penting, harus disertai dengan plot sisa dari beberapa jenis untuk memeriksa keberangkatan dari bentuk fungsi kekuasaan.


2
Terima kasih, itu menjelaskan mengapa saya tidak dapat menemukan hal seperti ini di mana orang-orang mendiskusikan "regresi polinomial". Saya telah memperbarui pertanyaan saya dengan hasil dari pemasangan model itu!
thenickdude

Jika Anda mencari pendekatan yang sedikit lebih ketat untuk pemasangan undang-undang kekuasaan, dan tes signifikansi untuk model pas, Anda mungkin menginginkan makalah ini: arxiv.org/abs/0706.1062 dan kode yang menyertainya: tuvalu.santafe.edu/ ~ aaronc / powerlaws
Martin O'Leary

2
Makalah yang dikutip di atas adalah untuk distribusi yang merupakan undang-undang kekuasaan, bukan hubungan antara variabel yang merupakan undang-undang kekuasaan. Judul pertanyaan ini lebih cocok untuk yang terakhir; contoh pertanyaan ini lebih cocok dengan mantan.
Nick Cox

1

Jika Anda berasumsi bahwa kekuatan adalah model yang cocok, maka Anda dapat menggunakan log(y) ~ log(x)sebagai model Anda, dan cocok dengan regresi linier menggunakan lm():

Coba ini:

# 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
)

Cocok dengan model:

# 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))
)

Sekarang buat plot:

# 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")

masukkan deskripsi gambar di sini

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.