PythonでのANOVAは、何をしていますか?

anova numpy python significance statistics
PythonでのANOVAは、何をしていますか?

私は統計が本当に好きですが、6年以上コースを受講していません。 ここで必要なテストの種類と、これらの種類の問題に使用する最適なnumpy / scipy / R関数を見つけるのに苦労しています。

訪問者とそれに対応するプロパティのテーブルがあります(例: 「ブラウザ= Mozilla、リファラー= Google」)、および訪問者ごとの変数値(例: 5)、時間の経過とともにデータポイントにグループ化されます。

私の目標は、

A)家族が「どれくらい重要か」のスコアで、最も重要な不動産家族を見つけます

私が描きたい結論の例*:

Referrer has 10x larger effect size upon value-per-visitor than Browser
=> PropertyFamily('browser').significance = 1
=> PropertyFamily('referrer').significance = 10

AND

B)家族内で最も重要なプロパティを、重要度スコアで見つけます。

私が描きたい結論のサンプル:

GIVEN THAT Value:Baseline => $5/hit
5 hits from IE @ $5/hit (equal to baseline) => no significance
1 hit from Netscape @ $0 => little significance (not enough data)
10 hits from FF @ $10/hit => HIGH significance (hits and delta_value both high)

私の質問は:

1)ここで私の生活を楽にするnumpy / scipy / R関数はありますか?

2)ANOVA(分散分析)およびANOVAの時間経過についてもう少し詳しく知っている人はフィードバックを提供してください。 私はこれを正しく行っていることを肯定していません、簡単なものを見逃している可能性があります。 確認または修正の両方に感謝します。

これらは、過去30日間の(ヒット、値、日)の_ARRAYS_であることに注意してください。 たとえば、月曜日にValue-Of-Mozillaに(ベースラインに対して)大きなピークがあり、火曜日にValue-Of-Mozillaにドロップ(ベースラインより下)がある場合、Mozillaを「重要な」プロパティとして表示させたい(ピーク/ドロップが互いにキャンセルするのではなく)

map / reducingの前の入力データの例:

data = {
'baseline': [(hits, value, day) for hits, value, day in last_thirty_days('baseline')],
'browser': {
  'mozilla': [(hits, value, day) for hits, value, day in last_thirty_days('browser', 'mozilla')],
  ... etc ...
  }
}
... etc ...

現在のコードは次のとおりです-Dumbo / Hadoopで実行され、基本的に式を考案した「重要性」の数値を提供します。 私の式は機能し、意味のあるデータを提供しますが、「重要」の値は十分に定義されていません(「重要」プロパティのスコアは通常100以上ですが、これはデータセットのサイズによって変化します)これにはおそらく「本当の公式」があります。

# Runs after each (hits, value, date) tuple has been grouped
# into corresponding "plot points", as they would appear on a graph
pp = PlotPoint(property, date, hits, value)
pp.epc = float(pp.value/pp.hits) if pp.hits else 0

# Finds PlotPoint('baseline', date)
# if pp = PlotPoint('firefox', '1-1-10')
#  then pp.baseline == PlotPoint('baseline', '1-1-10')
baseline = pp.baseline()
if baseline.hits == 0:
    volume_ratio = 0
else:
    volume_ratio = round(100*pp.hits/baseline.hits)
value_ratio = baseline.epc - pp.epc

# Make up a significance value --
# e.g. (10% of visitors * ($1 delta from baseline))^2
pp.significance = math.sqrt(volume_ratio * value_ratio **2)

# OK, we have values for each plotpoint, now sum them up
# to get values for the whole property (over a 30day period)
pps = property.plotpoint_set.all()
property.hits = sum([p.hits for p in pps])
property.value = sum([p.value for p in pps])
property.epc = property.value/property.hits
value_delta = baseline.epc - property.epc

# Make up a significance for the Property, based on each point's significance
property.significance = math.log(sum(
                [sss.significance**2 for sss in pps]
                )*abs(value_delta)+1)

前もって感謝します!

  1  1


ベストアンサー

知る限り、numpy / scipyで利用可能な統計的テストはかなり基本的なものです。 統計に多かれ少なかれ専用の言語であり、多くの高度な機能を利用できるRを検討することをお勧めします。

また、MANOVAが本当にあなたがしたいことだとは思いません。 MANOVAは、相互作用する従属変数がいくつかある場合に使用します。 これは実際には単なる分散分析です。

Rでできることの例:

bybrowser = lm(value ~ browser, data=visitors)
anova(bybrowser)
byreferrer = lm(value ~ referrer, data=visitors)
anova(byreferrer)
byreferrerandbrowser = lm(value ~ browser * referrer, data=visitors)
anova(byreferrerandbrowser)

これはすべて、値が正規分布していることを前提としていることに注意してください。 この仮定を確認する必要があります( `hist(visitors $ value)`は良い出発点です)。 そうでない場合は、正規化する方法を見つける(ログを取得する)か、適切なノンパラメトリックテストを使用します。

ああ、最後に、統計に関するアドバイスが必要な場合は、それ専用の姉妹サイトがあります:https://stats.stackexchange.com/

3


タイトルとURLをコピーしました