当前位置: 首页 > 知识库问答 >
问题:

Python-计算加权滚动标准偏差

慕容聪
2023-03-14

我有一分钟一分钟的熊猫数据帧df。我希望将加权应用于返回,并计算滚动加权均方差,窗口=10。我可以计算非加权性病,年化:

df_spy['10mVol'] = df_spy['Return'].rolling(center=False,window=10).std()*(1440*252)**(0.5)*100

在Numpy中还有另一个关于加权std的问题,但我对滚动加权std很好奇。(加权标准偏差,单位为NumPy?)

计算加权标准差的公式为:https://math.stackexchange.com/questions/320441/standard-deviation-of-the-weighted-mean

weighting   Midpoint   Return      10mVol   Weighted
0.2         215.6700    NaN         NaN      NaN
0.8         215.8400    -0.000788   NaN     -0.000630
0.8         216.0600    -0.001019   NaN     -0.000815

谢谢你的帮助

共有1个答案

邵赞
2023-03-14

据我所知,rolling方法之后的链式函数是一个接受数组并给出数字的函数。为每个窗口计算该函数。因此,如果我们有一个计算加权标准差的函数,我们可以将它与lambda函数一起使用,得到滚动加权标准差。(我希望您提供的加权std计算没有出错)

import pandas as pd
import numpy as np


def weighted_std(values, weights):
    # For simplicity, assume len(values) == len(weights)
    # assume all weights > 0
    sum_of_weights = np.sum(weights)
    weighted_average = np.sum(values * weights) / sum_of_weights
    n = len(weights)
    numerator = np.sum(n * weights * (values - weighted_average) ** 2.0)
    denominator = (n - 1) * sum_of_weights
    weighted_std = np.sqrt(numerator / denominator)
    return weighted_std


def rolling_std(s, weights):
    window_size = len(weights)
    return s.rolling(center=False, window=window_size).apply(lambda win: weighted_std(win, weights))

s = pd.Series(np.random.random([10]))  # generate random data
w = np.array([1., 3., 5.])  # choose weights
print(s.values)
print(rolling_std(s, w).values)

示例输出:

[ 0.08101966  0.57133241  0.29491028  0.25139964  0.26151065  0.45768199
  0.94459935  0.21534497  0.35999294  0.60242746]
[        nan         nan  0.19701963  0.11936639  0.01539041  0.12097725
  0.33346742  0.40784167  0.25884732  0.17709334]

这里的lambda win:weighted_std(win,weights)是一个函数,它将数组作为输入并返回一个数字。

 类似资料:
  • 我的数据与此类似: 我需要计算基于名称组的差异列的标准偏差。 我试过了 和 但两者都为传递给的变量提供了KeyError。我试图用以下方法解决它: 但错误仍然存在。 提前谢谢。

  • 问题内容: 使用Python,假设我正在运行已知数量的项目,并且能够计时处理每个项目要花费的时间,以及运行所花费的总时间以及到目前为止所处理项目的数量。我目前正在计算飞行中的平均值,但是如果说单个项目花费的时间特别长(几秒钟而不是几毫秒),则可能会导致偏差。 我想展示一个运行中的标准偏差。如何在不保存每个记录的情况下执行此操作? 问题答案: 我使用的是Welford方法,它给出的结果更准确。该链接

  • 我尝试使用< code>rowSds()来计算每一行的标准偏差,这样我就可以选择具有高标准偏差的行来绘制图表。 我的数据帧名为<code>xx 我试图计算每一行的标准偏差,并辅助sd列名: 我得到这个错误: 知道在计算SD时如何省略吗?我的语法正确吗?

  • 我有一个10data.frames的列表,我只需要为每个data.frame划分两列,然后计算相对均方差。 我想用lapplication。 下面是列表中包含的一个data.frame的示例: 我必须对我的所有10个数据帧执行以下操作:

  • 我对标准差的计算有点执着,如果你能在下面的两个问题上给我一些帮助,那就太好了。 代码 问题1:我如何计算这个的标准误差(平均值的标准偏差)? 代码 问题2:如何计算累积标准偏差? 非常感谢!!(很抱歉数据格式错误!)