Накопительные суммы и стандартное отклонение с циклами для в Python - PullRequest
0 голосов
/ 01 мая 2018

Я пытался решить эту проблему, но я не могу. Я пытаюсь определить стандартное отклонение в финансах, я имею в виду:

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, но это не ответ.

Ответы [ 2 ]

0 голосов
/ 31 июля 2018

Для математических расчетов в 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))
0 голосов
/ 01 мая 2018

Ваша задача состоит в том, чтобы вычислить среднее значение, дисперсию и стандартное отклонение как некий промежуточный итог, рассчитанный одновременно. Вы не можете сделать это с теми конкретными формулами, которые вы используете здесь. Как вы показали вручную, сначала вы выполнили вычисление среднего значения, и только после того, как вы получили полное среднее значение, вы рассчитали дисперсию, а затем только после получения дисперсии вычислили стандартное отклонение. Вы не можете просто применить эту формулу дисперсии к части среднего и надеяться, что все получится правильно.

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. Если вы хотите вычислить текущую оценку среднего значения, дисперсии и стандартного отклонения, вам придется использовать разные формулы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...