ฉันมีชุดข้อมูลซึ่งเป็นสถิติจากฟอรัมสนทนาทางเว็บ ฉันกำลังดูจำนวนการตอบกลับที่คาดว่าจะมี โดยเฉพาะฉันได้สร้างชุดข้อมูลที่มีรายการของการตอบหัวข้อแล้วจำนวนของหัวข้อที่มีการตอบกลับจำนวนนั้น
"num_replies","count"
0,627568
1,156371
2,151670
3,79094
4,59473
5,39895
6,30947
7,23329
8,18726
หากฉันพล็อตชุดข้อมูลบนพล็อตการบันทึกล็อกฉันจะได้รับสิ่งที่เป็นเส้นตรง:
(นี่คือการกระจาย Zipfian ) วิกิพีเดียบอกว่าเส้นตรงในแปลงเข้าสู่ระบบเข้าสู่ระบบบ่งบอกถึงฟังก์ชั่นที่สามารถสร้างแบบจำลองโดย monomial ของแบบฟอร์มที่ k และในความเป็นจริงฉันได้ฟังฟังก์ชั่นดังกล่าว:
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 คะแนนเหล่านี้เป็นคำอธิบายที่ดีสำหรับรูปร่างของกราฟต้นฉบับ
หากคุณกำลังสนใจในการเล่นกับข้อมูลดิบตัวเองผมได้โพสต์ไว้ที่นี่