我对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
你可以看到,我从t.fit()和st.stats.descripe()得到了不同的方法。三者的标准差不同,偏度和峰度也不同。为什么会这样
没有区别
SQRT(0.00014599380983290917)=0.01208278982
一个是方差,另一个是标准差分
好吧,让我们描述一下
拟合得到的参数是fitter认为最好将t分布曲线放在采样数据集上的参数
DescribeResult产生的方差,不是stddev,所以这里我们取方差的平方根,得到stddev,SQRT(0.00014599380983290917)=0.01208278982。然后你自己计算stddev,它们是一样的。请记住,这些值(如stddev、方差、平均值)是从采样数据中获取的
在最后一行,你计算分布平均值和stddev,最有可能通过应用公式或做数值积分。它们总是不同于抽样均值或抽样标准差。拟合是试图一次拟合所有的东西(所有的时刻),尽量减少一些或另一个错误。它的工作方式也与此相反-如果您提供分布参数,计算分布平均值,stddev,然后运行一些sample并计算sampled mean/stddev,它们将不同于分布参数。只有在无限样本szie的情况下,分布矩和样本矩才能达到一致
相关问题 更多 >
编程相关推荐