python - pandas.cusum() 与统计 CUSUM 测试相同吗?
问题描述
我正在 edX 上观看有关数据分析的课程。CUSUM 背后执行“变更检测”的想法使我的兴趣达到了顶峰。我被告知的公式是: S sub t = max {0, S sub (t-1) + (x sub t - mu - C) 如果: S sub t >= threshold T,我们检测到增加(类似的减少)。瞧,我看到 pandas 有一个 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
解决方案
假设我们有一个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 来看看它是如何变化的,并创建一个名为 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 +
我们还可以设置任意阈值并查看 cumsum 何时高于或低于它:
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 + -
推荐阅读
- python - bluezero 远程 api v-rep 与 python
- android - Android getItemId() 在recyclerview中多次返回相同的id
- loopbackjs - Loopback 4 包含嵌套关系
- javascript - HERE API 路由计算突然停止工作
- node.js - Express:路由器无法读取 POST 请求
- django - 如何一次在 Django 中传递令牌数据并渲染模板?
- java - 如何在java中重新缩放图像?
- opengl-es - 请向我解释一下Android中的EGL到底是什么?
- python - 在 Jupyter 笔记本上运行时找不到 ipywidgets 函数 FileUpload
- r - 在 KM ggsurvplot 上绘制“扩展”预测生存率