如何从数据集中获取学生的t参数?

时间:2019-04-04 10:28:45

标签: python statistics

我是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.describe()获得了不同的方法。这三个标准偏差均不同,并且偏度和峰度也不同。为什么会这样?

1 个答案:

答案 0 :(得分:0)

没有区别

SQRT(0.00014599380983290917)= 0.01208278982

一个是方差,另一个是stddev

好,让它更具描述性。

t.fit的参数是钳工认为将t分布曲线放在一组采样数据上的最佳方法。

DescribeResult产生方差,而不是stddev,因此在这里我们采用方差的平方根并得到stddev,SQRT(0.00014599380983290917)= 0.01208278982。然后,您可以计算stddev yourslef,它们是相同的。请记住,这些值(如stddev,方差,均值)是从采样数据中提取的。

在最后一行,您很可能通过应用公式或进行数值积分来计算DISTRIBUTION平均值和stddev。它们始终与采样的平均值或采样的stddev不同。拟合试图一次拟合所有(所有时刻),以最大程度地减少一些或另一个错误。它也可以通过其他方式工作-如果您提供分布参数,计算分布平均值,stddev,然后运行一些样本并计算采样的平均值/ stddev,则它们将与分布平均值不同。只有在无限采样szie的情况下,您才能在分布矩和采样矩之间达成协议。

相关问题