การถดถอยสำหรับรูปแบบของ ?


22

ฉันมีชุดข้อมูลซึ่งเป็นสถิติจากฟอรัมสนทนาทางเว็บ ฉันกำลังดูจำนวนการตอบกลับที่คาดว่าจะมี โดยเฉพาะฉันได้สร้างชุดข้อมูลที่มีรายการของการตอบหัวข้อแล้วจำนวนของหัวข้อที่มีการตอบกลับจำนวนนั้น

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

หากฉันพล็อตชุดข้อมูลบนพล็อตการบันทึกล็อกฉันจะได้รับสิ่งที่เป็นเส้นตรง:

ข้อมูลถูกพล็อตในระดับล็อก - ล็อก

(นี่คือการกระจาย Zipfian ) วิกิพีเดียบอกว่าเส้นตรงในแปลงเข้าสู่ระบบเข้าสู่ระบบบ่งบอกถึงฟังก์ชั่นที่สามารถสร้างแบบจำลองโดย monomial ของแบบฟอร์มที่ k และในความเป็นจริงฉันได้ฟังฟังก์ชั่นดังกล่าว:Y=axk

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

แบบจำลองดวงตา

เห็นได้ชัดว่าดวงตาของฉันไม่แม่นยำเท่ากับอาร์ดังนั้นฉันจะได้ R เพื่อให้พอดีกับพารามิเตอร์ของโมเดลนี้สำหรับฉันได้อย่างแม่นยำมากขึ้นได้อย่างไร? ฉันลองการถดถอยพหุนาม แต่ฉันไม่คิดว่า R พยายามปรับเลขชี้กำลังเป็นพารามิเตอร์ - ชื่อที่เหมาะสมสำหรับรุ่นที่ฉันต้องการคืออะไร

แก้ไข: ขอบคุณสำหรับคำตอบทุกคน ตามที่แนะนำตอนนี้ฉันได้จัดวางโมเดลเชิงเส้นตรงกับบันทึกของข้อมูลอินพุตโดยใช้สูตรนี้:

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

ผลลัพธ์คือสิ่งนี้แสดงโมเดลเป็นสีแดง:

รูปแบบการติดตั้ง

ดูเหมือนจะเป็นการประมาณที่ดีสำหรับวัตถุประสงค์ของฉัน

ถ้าฉันใช้รูปแบบ Zipfian นี้ (alpha = 1.703164) พร้อมกับตัวสร้างตัวเลขแบบสุ่มเพื่อสร้างจำนวนทั้งหมดของหัวข้อ (1400930) เหมือนกับชุดข้อมูลที่วัดได้เดิม (ใช้รหัส C ที่ฉันพบบนเว็บ ) ผลลัพธ์จะดู ชอบ:

ผลลัพธ์ที่สร้างตัวเลขสุ่ม

จุดที่วัดได้จะเป็นสีดำจุดที่สร้างแบบสุ่มตามแบบจำลองจะเป็นสีแดง

ฉันคิดว่านี่แสดงให้เห็นว่าความแปรปรวนอย่างง่ายที่สร้างขึ้นโดยการสร้างจุดสุ่ม 1,400,930 คะแนนเหล่านี้เป็นคำอธิบายที่ดีสำหรับรูปร่างของกราฟต้นฉบับ

หากคุณกำลังสนใจในการเล่นกับข้อมูลดิบตัวเองผมได้โพสต์ไว้ที่นี่


2
ทำไมไม่ลองบันทึกทั้งสองค่า & num_replies & ใส่โมเดลเชิงเส้นมาตรฐานให้พอดี
gung - Reinstate Monica

3
อะไรที่ขัดขวางจำนวนมหาศาลได้ต่ำกว่า 10,000 คำตอบ?
Glen_b -Reinstate Monica

3
ทั้งการนับและการนับบันทึกไม่มีความแปรปรวนคงที่ (สำหรับการนับความแปรปรวนจะเพิ่มขึ้นด้วยค่าเฉลี่ยสำหรับการนับการบันทึกมันจะลดลงด้วยค่าเฉลี่ย) เนื่องจากทั้งสองตัวแปรมีค่าและจำนวนมากมีขนาดค่อนข้างเล็กฉันจึงโน้มตัวไปที่ Poisson, quasi-Poisson หรือลบ binomial GLM บางทีด้วย log-link หากคุณต้องใช้การถดถอยปกติอย่างน้อยจัดการกับปัญหาความแปรปรวน อีกทางเลือกหนึ่งคือทำการแปลง Anscombe หรือ Freeman-Tukey ของจำนวนและพอดีกับโมเดลกำลังสองน้อยที่สุดที่ไม่ใช่เชิงเส้น
Glen_b -Reinstate Monica

1
เข็มที่น่าสนใจนั้นเกิดจาก "ความยาวหัวข้อสูงสุด" ที่มนุษย์บังคับใช้ในฟอรัมต่างๆ
thenickdude

2
ฟัดจ์นั้นอร่อย :) ยิ่งกว่าธรรมดาไม่มีความแตกต่างระหว่าง (num_replies + 1) และ (num_posts_in_topic)
thenickdude

คำตอบ:


22

ตัวอย่างของคุณดีมากเพราะชี้ให้เห็นปัญหาที่เกิดซ้ำกับข้อมูลดังกล่าวอย่างชัดเจน

ชื่อสามัญสองชื่อคือฟังก์ชันพลังงานและกฎหมายพลังงาน ในวิชาชีววิทยาและสาขาอื่น ๆ คนมักพูดถึง allometry โดยเฉพาะอย่างยิ่งเมื่อคุณมีการวัดขนาด ในสาขาฟิสิกส์และสาขาอื่น ๆ ผู้คนพูดถึงกฎการปรับขนาด

ฉันจะไม่ถือว่า monomial เป็นคำที่ดีที่นี่เพราะฉันเชื่อมโยงกับพลังจำนวนเต็ม ด้วยเหตุผลเดียวกันนี้จึงไม่ถือว่าเป็นกรณีพิเศษของพหุนาม

ปัญหาของการปรับกฎกำลังไฟฟ้าไปที่หางของการแจกแจงแปรเปลี่ยนเป็นปัญหาของการปรับกฎกำลังไฟฟ้าให้เข้ากับความสัมพันธ์ระหว่างตัวแปรสองตัวที่แตกต่างกัน

วิธีที่ง่ายที่สุดในการจัดทำกฎกำลังคือลอการิทึมของตัวแปรทั้งสองแล้วจึงใส่เส้นตรงโดยใช้การถดถอย มีการคัดค้านหลายครั้งเมื่อใดก็ตามที่ตัวแปรทั้งสองมีข้อผิดพลาดตามปกติ ตัวอย่างที่นี่เป็นกรณีในจุดเป็นทั้งตัวแปร (และไม่) อาจถือเป็นการตอบสนอง (ตัวแปรตาม) อาร์กิวเมนต์นั้นนำไปสู่วิธีการที่เหมาะสมกว่าในการทำให้สมมาตร

นอกจากนี้ยังมีคำถามเกี่ยวกับสมมติฐานเกี่ยวกับโครงสร้างข้อผิดพลาดอยู่เสมอ อีกครั้งตัวอย่างที่นี่เป็นกรณีที่ชี้ให้เห็นข้อผิดพลาดที่แตกต่างกันอย่างชัดเจน นั่นแสดงให้เห็นอะไรบางอย่างที่คล้ายกับน้ำหนักกำลังสองน้อยที่สุด

หนึ่งรีวิวที่ยอดเยี่ยมคือhttp://www.ncbi.nlm.nih.gov/pubmed/16573844

อีกปัญหาหนึ่งคือผู้คนมักระบุกฎหมายพลังงานในช่วงข้อมูลบางช่วงเท่านั้น คำถามเหล่านั้นกลายเป็นวิทยาศาสตร์และสถิติไปจนถึงการระบุว่ากฎหมายพลังงานเป็นเพียงความคิดที่ปรารถนาหรืองานอดิเรกมือสมัครเล่นที่ทันสมัย การอภิปรายส่วนใหญ่เกิดขึ้นภายใต้หัวข้อของพฤติกรรมเศษส่วนและไม่มีเกล็ดพร้อมการอภิปรายที่เกี่ยวข้องตั้งแต่ฟิสิกส์ไปจนถึงอภิปรัชญา ในตัวอย่างเฉพาะของคุณความโค้งเล็กน้อยดูเหมือนชัดเจน

ผู้ที่ชื่นชอบกฎหมายพลังงานไม่ได้ถูกจับคู่เสมอโดยผู้สงสัยเพราะผู้ที่ชื่นชอบการตีพิมพ์มากกว่าผู้ที่สงสัย ฉันขอแนะนำให้พล็อตกระจายในตาชั่งลอการิทึมแม้ว่าพล็อตที่เป็นธรรมชาติและยอดเยี่ยมที่มีความสำคัญควรจะมาพร้อมกับพล็อตที่เหลือบางชนิดเพื่อตรวจสอบการออกจากฟังก์ชั่นพลังงาน


2
ขอบคุณที่อธิบายว่าทำไมฉันไม่สามารถหาอะไรแบบนี้ที่ผู้คนกำลังคุยกันเรื่อง "พหุนามถดถอย" ฉันได้อัปเดตคำถามของฉันพร้อมผลการทดสอบจากแบบจำลองนั้น
thenickdude

หากคุณกำลังมองหาวิธีที่เข้มงวดกว่าเล็กน้อยในการปรับกฎหมายพลังงานและการทดสอบอย่างมีนัยสำคัญสำหรับรุ่นที่ติดตั้งไว้คุณอาจต้องการเอกสารนี้: arxiv.org/abs/0706.1062และรหัสประกอบ: tuvalu.santafe.edu/ ~ aaronc / powerlaws
Martin O'Leary

2
กระดาษที่อ้างถึงข้างต้นมีไว้สำหรับการแจกแจงที่เป็นกฎหมายเกี่ยวกับพลังงานไม่ใช่ความสัมพันธ์ระหว่างตัวแปรที่เป็นกฎพลังงาน ชื่อของคำถามนี้ตรงกับที่ดีกว่า; ตัวอย่างของคำถามนี้เหมาะกับอดีตที่ดีกว่า
Nick Cox

1

หากคุณคิดว่าพลังงานเป็นแบบจำลองที่เหมาะสมคุณสามารถใช้log(y) ~ log(x)เป็นแบบจำลองของคุณและใช้การถดถอยเชิงเส้นโดยใช้lm():

ลองสิ่งนี้:

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

พอดีกับรูปแบบ:

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

ตอนนี้สร้างพล็อต:

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

ป้อนคำอธิบายรูปภาพที่นี่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.