웹 토론 포럼의 통계 인 데이터 세트가 있습니다. 주제가 가질 것으로 예상되는 답글 수의 분포를보고 있습니다. 특히, 주제 응답 수 목록이있는 데이터 세트를 작성한 다음 해당 응답 수를 가진 주제 수를 작성했습니다.
"num_replies","count"
0,627568
1,156371
2,151670
3,79094
4,59473
5,39895
6,30947
7,23329
8,18726
로그 로그 플롯에 데이터 세트를 플롯하면 기본적으로 직선이 무엇인지 알 수 있습니다.
이것은 Zipfian 배포판 입니다. Wikipedia에 따르면 log-log plot의 직선은 형식의 단일로 모델링 할 수있는 함수를 의미합니다 . 그리고 실제로 나는 그러한 기능을 눈여겨 보았다.
lines(data$num_replies, 480000 * data$num_replies ^ -1.62, col="green")
내 눈알은 분명히 R만큼 정확하지 않습니다. 어떻게 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 모델 (알파 = 1.703164)을 난수 생성기와 함께 사용하여 포함 된 원래 측정 데이터 세트 ( 웹에서 찾은이 C 코드 사용)와 동일한 총 토픽 수 (1400930)를 생성 하면 결과가 보입니다. 처럼:
측정 된 점은 검은 색이며, 모델에 따라 임의로 생성 된 점은 빨간색입니다.
나는 이것이 1400930 포인트를 무작위로 생성하여 생성 된 간단한 분산이 원래 그래프의 모양에 대한 좋은 설명임을 보여줍니다.
원시 데이터를 직접 연주하는 데 관심이 있으시면 여기에 게시했습니다 .