形式


22

Webディスカッションフォーラムの統計データセットがあります。私は、トピックが持つことが期待される返信の数の分布を見ています。特に、トピックの返信数のリストを含むデータセットを作成し、その数の返信を含むトピックの数を作成しました。

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

データセットを対数プロットでプロットすると、基本的に直線が得られます:

対数目盛でプロットされたデータ

(これはZipfianディストリビューションです)。ウィキペディアによると、対数プロットの直線は形式の単項式でモデル化できる関数を意味します。そして実際、私はそのような機能を目撃しました:y=aバツk

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ポイントをランダムに生成することによって作成された単純な分散が、元のグラフの形状の良い説明であることを示していると思います。

生データを自分で操作することに興味がある場合は、ここに投稿しました


2
カウントとnum_repliesの両方のログを取得し、それらに標準線形モデルを適合させないのはなぜですか?
GUNG -復活モニカ

3
10000件未満の返信数の急増は何ですか?
-Glen_b

3
カウントもログカウントにも一定の分散はありません(カウントの場合、分散は平均とともに増加し、ログカウントの場合、通常は平均とともに減少します)。両方の変数がカウントであり、多くのカウントが非常に小さいことを考えると、おそらくログリンクを使用して、ポアソン、準ポアソン、または負の二項GLMに傾きます。通常の回帰を使用する必要がある場合は、少なくとも分散の問題に対処してください。もう1つの方法は、カウントのアンスコム変換またはフリーマンチューキー変換を実行して、非線形最小二乗モデルを近似することです。
Glen_b

1
この興味深いスパイクは、いくつかのフォーラムで人間が実施した「最大トピック長」によるものです。
thenickdude

2
ファッジはおいしいです:)より普遍的に、(num_replies + 1)と(num_posts_in_topic)の間に違いはありません。
thenickdude

回答:


22

あなたの例は非常に良い例です。なぜなら、それはそのようなデータで繰り返し起こる問題を明確に指摘しているからです。

2つの一般的な名前は、べき関数とべき乗則です。生物学や他のいくつかの分野では、特にサイズ測定に関連する場合は常に、人々はしばしばアロメトリーについて話します。物理学やその他の分野では、人々はスケーリング則について話します。

ここでは単項式を良い用語とは見なしません。それを整数のべき乗と関連付けているからです。同じ理由で、これは多項式の特殊なケースとは見なされません。

べき乗則を分布の裾に適合させる問題は、2つの異なる変数間の関係にべき乗則を適合させる問題に変化します。

べき乗則を近似する最も簡単な方法は、両方の変数の対数をとり、回帰を使用して直線を近似することです。よくあるように、両方の変数にエラーが発生する場合は常に、これに対して多くの反対があります。この例は、両方の変数(およびどちらも)が応答(従属変数)と見なされる可能性があるため、適切な例です。この議論は、より対称的な近似方法につながります。

さらに、エラー構造に関する仮定の問題が常にあります。繰り返しになりますが、ここでの例は、エラーが明らかに不均一であるための一例です。これは、重み付き最小二乗のようなものを示唆しています。

1つの優れたレビューはhttp://www.ncbi.nlm.nih.gov/pubmed/16573844です

さらに別の問題は、人々がデータのある範囲でのみべき法則を特定することが多いことです。その後、質問は統計的であると同時に科学的になり、べき乗則を特定することが単なる希望的観測であるか、おしゃれなアマチュアの娯楽であるかどうかに至るまで続きます。議論の多くは、物理学から形而上学に至るまでの関連する議論とともに、フラクタルでスケールフリーの振る舞いの見出しの下で起こります。あなたの特定の例では、小さな曲率が明らかなようです。

愛好家は懐疑論者よりも多くのことを発表するため、べき法則への熱狂者は常に懐疑論者と一致しません。対数スケールの散布図は、自然で優れたプロットであるが、べき関数形式からの逸脱をチェックするために、ある種の残差プロットを伴う必要があることをお勧めします。


2
おかげで、人々が「多項式回帰」について議論しているこのようなものを見つけることができなかった理由は説明できます。そのモデルをフィッティングした結果で質問を更新しました!
thenickdude

べき乗則のフィッティングへのもう少し厳密なアプローチと、フィッティングモデルの有意性検定を探している場合は、おそらくこのペーパー:arxiv.org/abs/0706.1062と付随コード:tuvalu.santafe.edu/が必要
マーティン・オリアリー

2
上記の論文は、べき法則である分布に関するものであり、べき法則である変数間の関係ではありません。この質問のタイトルは後者の方が適しています。この質問の例は前者の方が適しています。
ニックコックス

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.