如何找到滚动的 3 个月方差?

Posted

技术标签:

【中文标题】如何找到滚动的 3 个月方差?【英文标题】:How to find the rolling 3 months variance? 【发布时间】:2018-05-02 09:13:59 【问题描述】:

我有一个包含两列、日期和金额的数据集。我想找到过去 3 个月的方差 (VAR),然后通过按月平均 (AVG) 来聚合方差 (VAR)。我还想确保如果有少于 3 个月的数据可用,则不计算方差。 (所以我有 6 个月的数据,我只有过去 3 个月的平均方差)。非常感谢

注意:我正在使用 SSMS

Date                 Amount
23 February 2017    £41,079
07 January 2017     £25,856
....

【问题讨论】:

超过 3 个值的方差是否有用? 你是对的!我认为最好取每日方差(过去 90 天),然后按月平均? 我相应地编辑了问题,谢谢@Onno 请在本声明中定义“方差”。 VAR 中的方差 【参考方案1】:

如果您对方差的定义与此函数的作用相匹配,您可以使用内置聚合/窗口函数var()

如果您每行有一天,并且愿意接受 90 天为“3 个月”,那么您可以简单地这样做:

select t.*, var(amount) over (order by date rows between 89 preceding and current row) as rolling_var
from t;

如果这些条件不成立,则使用自联接的效率要低得多:

select t.date, t.amount, var(t2.amount)
from t join
     t t2
     on t2.date > dateadd(month, -3, t.date) and t2.date <= t.date
group by t.date, t.amount;

【讨论】:

每天记录不止一条。我尝试基于自加入运行您的第二个建议,但已经运行了 20 多分钟。 (我有 40 万条记录)

以上是关于如何找到滚动的 3 个月方差?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 python 中简单地计算时间序列的滚动/移动方差?

计算滚动窗口协方差矩阵

如何简单地计算python中时间序列的滚动/移动方差?

如何找到其乘积可以表示为 2 个随机整数的平方差的连续子序列/子数组的数量?

用excel怎样做单因素方差分析,并且多组间两两比较?

matlab如何求方差