pandas.cusum()是否与统计CUSUM测试相同?

时间:2019-04-11 18:57:28

标签: python pandas

我正在edX上观看有关数据分析的课程。 CUSUM背后执行“变更检测”的想法使我的兴趣达到了顶峰。 被告知的公式是:  S sub t = max {0,S sub(t-1)+(x sub t-mu-C) 而如果:  S sub t> =阈值T 我们检测到增加(减少类似)。 瞧,我看到大熊猫具有cusum功能。 但是,我似乎不明白它是如何工作的。我的数据头是:

    Year            GDP Growth Rate
1   1930           -0.085
2   1931           -0.064
3   1932           -0.129
4   1933           -0.012
5   1934            0.108

我的输出是:

      Year   GDP Growth Rate
1   1930.0         1929.915
2   1931.0         1930.936
3   1932.0         1931.871
4   1933.0         1932.988
5   1934.0         1934.108

所以看起来它只是在添加列。我显然在我的理解中缺少一些东西。 cusum()是我想要的方法吗?我试图看看提供的“变化检测”想法是否只是出于娱乐目的而检测到何时开始衰退,萧条或繁荣。 在有人说之前,我将添加: 不,这不是作业。

解决方案: 我正在寻找Cusum(似乎在这里找到了一个例子): https://github.com/demotu/BMC/blob/master/functions/detect_cusum.py AS用户指出,cumsum和CUSUM以及两个不同的东西。我的错。谢谢。 也: 参见https://stats.stackexchange.com/questions/59895/python-module-for-change-point-analysis

1 个答案:

答案 0 :(得分:0)

说我们有一个df:

df = pd.DataFrame({'Year': [1930,1931,1932,1933,1934],
                  'GDP Growth Rate': [-0.085,-0.064,-0.129,-0.012,0.108]})      
df

    Year    GDP Growth Rate
0   1930    -0.085
1   1931    -0.064
2   1932    -0.129
3   1933    -0.012
4   1934     0.108

我们可以使用GDP增长率列的总和来查看其变化,并创建一个名为Cumsum的新列:

df['Cumsum'] = df['GDP Growth Rate'].cumsum()
df


    Year  GDP Growth Rate   Cumsum
0   1930    -0.085          -0.085
1   1931    -0.064          -0.149
2   1932    -0.129          -0.278
3   1933    -0.012          -0.290
4   1934     0.108          -0.182

我们还可以调查变化是朝着正方向还是向负方向变化

df['Change'] = np.where(df['Cumsum'] > df['Cumsum'].shift(), '+', '-')
df

    Year    GDP Growth Rate Cumsum  Change
0   1930       -0.085      -0.085     -
1   1931       -0.064      -0.149     -
2   1932       -0.129      -0.278     -
3   1933       -0.012      -0.290     -
4   1934        0.108      -0.182     +

我们还可以设置一个任意阈值,并查看其总和在其之上或之下:

df['Threshold'] = np.where(df['Cumsum'] < -0.2, 'Past Threshold', '-')
df

    Year  GDP Growth Rate   Cumsum  Change    Threshold
0   1930    -0.085          -0.085    -           -
1   1931    -0.064          -0.149    -           -
2   1932    -0.129          -0.278    -     Past Threshold
3   1933    -0.012          -0.290    -     Past Threshold
4   1934     0.108          -0.182    +           -