alert !在这里问这样一个入门级的问题,我感到很尴尬!

嘿,伙计们,我一直在做一个项目,涉及时间序列总Electron 内容数据.我的目标是应用统计分析,找出地震引起的TEC异常.

我跟着this research paper for sliding IQR method.但由于某些原因,我没有得到如本文中所示的结果与给定的公式.所以我决定使用滚动平均值+1.6 STD方法.

问题是,当我使用ax. fill_between(x1 = index,y1 = ub,y2 = lb)方法时,我的置信区间带绘制得比数据点更远一步.请参见所给图,以便更好地理解.

以下是我目前正在做的事情:

df = DAEJ.copy()
window = 12
hourly = df.resample(rule="h").median()
hourly["ma"] = hourly["TEC"].rolling(window=window).mean()
hourly["hour"] = hourly.index.hour
hourly["std_err"] = hourly["TEC"].rolling(window=window).std()
hourly["ub"] = hourly["ma"] + (1.67* hourly["std_err"])
hourly["lb"] = hourly["ma"] - (1.67* hourly["std_err"])
hourly["sig2"] = hourly["TEC"].rolling(window=window).var()
hourly["kur"] = hourly["TEC"].rolling(window=window).kurt()
hourly["pctChange"] = hourly.TEC.pct_change(12, fill_method="bfill")
hourly = hourly.dropna()
dTEC = hourly[(hourly["TEC"] > hourly["ub"])]



fig, ax = plt.subplots(figsize=(12,4))
hourly["TEC"].plot(ax=ax, title="TEC Anomaly", label="Station: DAEJ")
ax.fill_between(x=hourly.index, y1=hourly["ub"], y2=hourly["lb"], color="red", label="Conf Interval", alpha=.4)
ax.legend()

这是我得到的结果!

TEC Anomaly detection using rolling std method

如图所示,数据和色带没有正确对齐,我知道在计算滚动平均值与窗口为12小时将导致12小时偏移值,但即使在下降第一个值后,我仍然没有得到对齐的数字.

推荐答案

你需要用center=True:

window = 12
hourly = df.resample(rule="h").median()
hourly["ma"] = hourly["TEC"].rolling(window=window, center=True).mean()
hourly["hour"] = hourly.index.hour
hourly["std_err"] = hourly["TEC"].rolling(window=window, center=True).std()
hourly["ub"] = hourly["ma"] + (1.67* hourly["std_err"])
hourly["lb"] = hourly["ma"] - (1.67* hourly["std_err"])
hourly["sig2"] = hourly["TEC"].rolling(window=window, center=True).var()
hourly["kur"] = hourly["TEC"].rolling(window=window, center=True).kurt()
hourly["pctChange"] = hourly.TEC.pct_change(12, fill_method="bfill")
hourly = hourly.dropna()
dTEC = hourly[(hourly["TEC"] > hourly["ub"])]

或者,你试图做的事情应该用shift:

# your original code
# ...

# then shift
ax.fill_between(x=hourly.index, y1=hourly["ub"].shift(-window//2),
                y2=hourly["lb"].shift(-window//2),
                color="red", label="Conf Interval", alpha=.4)

输出:

enter image description here

Python相关问答推荐

Chatgpt API不断返回错误:404未能从API获取响应

点到面的Y距离

滚动和,句号来自Pandas列

难以在Manim中正确定位对象

可变参数数量的重载类型(args或kwargs)

如何在solve()之后获得症状上的等式的值

如何在Raspberry Pi上检测USB并使用Python访问它?

利用Selenium和Beautiful Soup实现Web抓取JavaScript表

部分视图的DataFrame

joblib:无法从父目录的另一个子文件夹加载转储模型

Django—cte给出:QuerySet对象没有属性with_cte''''

isinstance()在使用dill.dump和dill.load后,对列表中包含的对象失败

如何指定列数据类型

在matplotlib中删除子图之间的间隙_mosaic

如何强制向量中的特定元素在Gekko中处于优化解决方案中

应用指定的规则构建数组

Django在一个不是ForeignKey的字段上加入'

如何提高Pandas DataFrame中随机列 Select 和分配的效率?

有了Gekko,可以创建子模型或将模型合并在一起吗?

如何在python tkinter中绑定键盘上的另一个回车?