Webディスカッションフォーラムの統計データセットがあります。私は、トピックが持つことが期待される返信の数の分布を見ています。特に、トピックの返信数のリストを含むデータセットを作成し、その数の返信を含むトピックの数を作成しました。
"num_replies","count"
0,627568
1,156371
2,151670
3,79094
4,59473
5,39895
6,30947
7,23329
8,18726
データセットを対数プロットでプロットすると、基本的に直線が得られます:
(これはZipfianディストリビューションです)。ウィキペディアによると、対数プロットの直線は形式の単項式でモデル化できる関数を意味します。そして実際、私はそのような機能を目撃しました:
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)と乱数ジェネレーターを使用して、含まれる元の測定データセットと同じ合計数(1400930)のトピック(Webで見つかったこのCコードを使用)を生成すると、結果は次のようになりますのような:
測定されたポイントは黒で、モデルに従ってランダムに生成されたポイントは赤で表示されます。
これは、これらの1400930ポイントをランダムに生成することによって作成された単純な分散が、元のグラフの形状の良い説明であることを示していると思います。
生データを自分で操作することに興味がある場合は、ここに投稿しました。