Как получить параметры студента из набора данных? - PullRequest
0 голосов
/ 04 апреля 2019

Я новичок в кодировании на python и хочу получить параметры из набора данных, который, как я знаю из теории, скорее всего, t-распределен.Первым методом, который я попробовал, было использование t.fit ().Для двойной проверки результатов я также использовал st.stats.describe () и заметил, что получаю разные результаты.Я также использовал t.stats (), чтобы получить моменты "mvsk".Я не уверен, что делают различные функции, и какие результаты можно доверять.Позднее параметры будут использоваться в симуляции Монте-Карло.Может кто-нибудь объяснить различные методы, и что я делаю неправильно?

import numpy as np
from scipy.stats import norm,t
import scipy.stats as st
import pandas as pd
import math


SP = pd.read_excel('S&P+sectors.xlsx',
                parse_dates=['date'],
                index_col='date')['.SPX']                   

rets = np.log(SP).diff()
rets = rets.dropna()

t.fit(rets)
print("Parameters from t.fit: ", t.fit(rets), "\n")

d = st.stats.describe(rets)
print(d, "\n")
print("Standard Deviation from st.stats.describe : ",np.sqrt(d[3]), "\n")

mean, var, skew, kurt = t.stats(t.fit(rets)[0], moments='mvsk', 
        loc =  t.fit(rets)[1], scale = t.fit(rets)[2])

print("mean, std.dev, skew, kurt: ",mean,np.sqrt(var),skew,kurt)

Вывод:

Parameters from t.fit:  (2.563005821560674, 0.0005384408493821172, 0.006945103287629065) 

DescribeResult(nobs=4767, minmax=(-0.09469514468085727, 0.10957195934756658), mean=0.00011244654312862343, variance=0.00014599380983290917, skewness=-0.21364378793604263, kurtosis=8.494830112279583) 

Standard Deviation from st.stats.describe :  0.012082789819942626 

mean, std.dev, skew, kurt:  0.0005384408493821172 0.014818254946408262 nan nan

Вы можете видеть, что я получаю разные средства от т.fit () и st.stats.describe ().Стандартное отклонение отличается для всех трех, и асимметрия, и эксцесс также различны.Почему это?

1 Ответ

0 голосов
/ 04 апреля 2019

Разницы нет

SQRT (0,00014599380983290917) = 0,01208278982

Один - дисперсия, другой - стандартное отклонение

Хорошо, давайте сделаем это более наглядным.

Параметры из t.fit - это то, что установщик считает наилучшим для построения кривой t-распределения над набором выборочных данных.

DescribeResult создает дисперсию, а не stddev, поэтому здесь мы берем квадратный корень дисперсии и получаем stddev, SQRT (0.00014599380983290917) = 0,01208278982. Затем вы вычисляете stddev yourslef, и они одинаковы. Помните, что эти значения (например, stddev, дисперсия, среднее) взяты из выборочных данных.

В последней строке вы вычисляете среднее значение DISTRIBUTION и stddev, скорее всего, применяя формулы или выполняя числовое интегрирование. Они ВСЕГДА отличаются от выборочного среднего или выборочного стандартного ввода. Фиттинг пытается подогнать все (все моменты) одновременно, сводя к минимуму ту или иную ошибку. Это работает и наоборот: если вы пришли с параметрами распределения, вычислите среднее значение распределения, stddev, а затем запустите некоторую выборку и вычислите выборочное среднее / stddev, они будут отличаться от параметров распределения. Только в случае бесконечной выборки вы получите согласие между моментами распределения и выборочными моментами.

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