利用滞后相关性计算水质站点之间的污染传递关系

在研究水质变化时,了解污染物从一个地点向另一个地点的传递过程至关重要。这不仅有助于我们追踪污染物的源头,还能为污染控制措施提供指导。

以下是在同一条河流、不同点位的氨氮变化趋势图,可以明显看出污染物的传递关系,那么如何简单快捷的计算出传递时间呢?今天,我们将探讨如何利用滞后相关性来计算水质站点之间的污染传递时间。

微信图片_20241030094721(1).png

滞后相关性的概念

滞后相关性(Lagged Correlation) 是一种统计方法,用于评估两个时间序列数据集之间的时间延迟关系。这种方法能够帮助我们理解污染物是如何随时间和空间变化的,进而推断出污染物的来源、路径和速度。

滞后相关性的数学意义

数学上,滞后相关性可以通过计算两个时间序列数据集 $X (t)$ 和 $Y (t)$ 在不同时间滞后 $k$ 下的相关系数 $r (k)$ 来量化它们之间的关系。公式如下:

$$
r(k) = \frac{\sum_{t=k+1}^{T}(X(t) - \bar{X})(Y(t-k) - \bar{Y})}{\sqrt{\sum_{t=1}^{T}(X(t) - \bar{X})^2} \sqrt{\sum_{t=1}^{T}(Y(t) - \bar{Y})^2}}
$$

其中:

  • $X (t)$ 和 $Y (t)$ 分别表示两个时间序列;
  • $\bar{X}$ 和 $\bar{Y}$ 分别是这两个序列的平均值;
  • $k$ 是时间滞后的步数,即 $Y (t-k)$ 相对于 $X (t)$ 的时间差;
  • $T$ 是时间序列的长度。

Python 算法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
def calculate_lagged_correlations(ts1, ts2, lags):
"""
计算两个时间序列在指定滞后范围内的相关性。
参数:
ts1 (pd.Series): 第一个时间序列
ts2 (pd.Series): 第二个时间序列
lags (list): 滞后值列表

返回:
dict: 滞后值及其对应的相关系数
"""
correlations = {}
for lag in lags:
if lag > 0:
corr = ts1.corr(ts2.shift(lag))
elif lag < 0:
corr = ts1.shift(-lag).corr(ts2)
else:
corr = ts1.corr(ts2)
correlations[lag] = corr
return correlations

最终效果

根据 correlations 简单绘图得到下图:

image.png

可以得出两数据最大滞后相关性为 0.753,相关性较高,滞后阶数为:28,意味着两者的污染物运移时间为 28 个步长。该数据的步长是 4 小时,也就是上游流向下游为 4.67 天。

小结

通过计算最大滞后相关性,我们可以有效分析两个监测点之间是否存在显著的滞后关联,并且精确地确定最大相关性的滞后阶数。这一方法在河道流量监测不准确的情况下尤为重要,能够帮助我们更好地掌握河道的流速和污染物的运移时间,为水质管理和环境保护提供科学依据。

BY

纯个人经验,如有帮助,请收藏点赞,如需转载,请注明出处。
微信公众号:环境猫 er
CSDN : 细节处有神明
个人博客: https://maoyu92.github.io/


利用滞后相关性计算水质站点之间的污染传递关系
https://maoyu92.github.io/2024/10/30/02 生态环境/滞后相关性计算水质站点之间的污染传递关系/
作者
陈文茂
发布于
2024年10月30日
许可协议