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

2024-05-15 14:43:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我对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()得到了不同的方法。三者的标准差不同,偏度和峰度也不同。为什么会这样


Tags: 数据方法fromimportasstatsnpmean
1条回答
网友
1楼 · 发布于 2024-05-15 14:43:08

没有区别

SQRT(0.00014599380983290917)=0.01208278982

一个是方差,另一个是标准差分

好吧,让我们描述一下

拟合得到的参数是fitter认为最好将t分布曲线放在采样数据集上的参数

DescribeResult产生的方差,不是stddev,所以这里我们取方差的平方根,得到stddev,SQRT(0.00014599380983290917)=0.01208278982。然后你自己计算stddev,它们是一样的。请记住,这些值(如stddev、方差、平均值)是从采样数据中获取的

在最后一行,你计算分布平均值和stddev,最有可能通过应用公式或做数值积分。它们总是不同于抽样均值或抽样标准差。拟合是试图一次拟合所有的东西(所有的时刻),尽量减少一些或另一个错误。它的工作方式也与此相反-如果您提供分布参数,计算分布平均值,stddev,然后运行一些sample并计算sampled mean/stddev,它们将不同于分布参数。只有在无限样本szie的情况下,分布矩和样本矩才能达到一致

相关问题 更多 >