【问题标题】:Accumulative sums and Standard Deviation with loops for in PythonPython中循环的累积和和标准偏差
【发布时间】:2023-03-18 22:40:02
【问题描述】:

我已尝试解决此问题,但无法解决。 我正在尝试确定金融领域的标准差,我的意思是:

Pr = Prob are equal [0.3, 0.4, 0.3]
r = Return are equal [0.10 ,0.05, 0.30]

所以,首先我计算我的平均值

E(r) = 0.10*0.3 + 0.4*0.05 + 0.3*0.3 = 0.14

其次,计算我的方差:

Var = 0.3*(0.1-0.14)^2 + 0.4*(0.05-0.14)^2 + 0.3*(0.3 - 0.14)^2 = 0.0114

第三,我的标准差是

Var^(1/2) = 0.10677078 rounded  to 0.10677

在 Python 中,我尝试使用基本算法求解,但我做不到。 我的代码是:

import math
def dev_stan(prob, ret):
    Pro = 0
    Des_Stan = 0
    Var = 0

    for i in range(len(ret)):
         Pro += prob[i]*ret[i]
         Var += (ret[i] - Pro)**2*prob[i]  
         Des_Stan = (math.sqrt(Var))
    return Des_Stan, Var, Pro, ret, prob

x = [0.30,0.4,0.30] 
y = [0.10,0.05,0.30]
print(dev_stan(x,y))

此代码导致:0.0956556 但这不是答案。

【问题讨论】:

标签: python finance standard-deviation


【解决方案1】:

您的问题是尝试将均值、方差和标准差计算为某种运行总计,所有这些都是同时计算的。你不能用你在这里使用的那些特定公式来做到这一点。正如您亲手展示的那样,您首先进行了均值计算,只有在获得完整均值后才计算方差,然后才在获得方差后才计算标准差。您不能只将方差公式应用于平均值的一部分,并希望事情能顺利进行。

import math
def dev_stan(prob, ret):
    Pro = 0
    Des_Stan = 0
    Var = 0

    for i in range(len(ret)):
        Pro += prob[i]*ret[i]
    for i in range(len(ret)):
        Var += (ret[i] - Pro)**2*prob[i]  
    Des_Stan = (math.sqrt(Var))
return Des_Stan, Var, Pro, ret, prob

应该可以。请注意,最后的 Des_Stan 必须在 for 循环之外。如果要计算均值、方差和标准差的运行估计值,则必须使用不同的公式。

【讨论】:

  • 这不是真的。有几种算法可用于单次或在线方差估计。您的解决方案相当幼稚。
  • 我说“你不能用这些公式做到这一点”。 IE。使用 OP 使用的公式。我将编辑我的帖子以使其更清晰。
【解决方案2】:

对于python中的数学计算,Numpy就是你想要的。

import numpy as np

def dev_stan(x, y):
    mean = x.dot(y)
    var = np.sum(x * (y - mean) ** 2)    
    std = np.sqrt(var)
    return mean, var, std, x, y

x = np.array([0.30,0.4,0.30])
y = np.array([0.10,0.05,0.30])
print(dev_stan(x,y))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 2016-04-24
    • 1970-01-01
    • 1970-01-01
    • 2021-07-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多