【发布时间】:2018-02-08 16:23:42
【问题描述】:
给定一些时间序列数据:
np.random.seed(123)
r = pd.Series(np.random.beta(a=0.5, b=0.5, size=1000),
index=pd.date_range('2013', periods=1000))
以及scipy.stats._continuous_distns._distn_names内的分布:
import scipy.stats as scs
dists = scs._continuous_distns._distn_names
我希望能够建立一个新的分布,然后将其称为.ppf(百分点函数),同时将指数权重纳入分布的构建中。
例如,对于normal 分布,这将只需要估计一个指数加权平均值和标准差:
所有连续分布都以 loc 和 scale 作为关键字参数 调整分布的位置和规模,例如为了 标准正态分布位置是平均值,尺度是 标准差。 [source]
ewm = r.ewm(span=60)
loc = ewm.mean().iloc[-1]
scale = ewm.std().iloc[-1]
print(scs.norm.ppf(q=0.05, loc=loc, scale=scale))
-0.196734019969
但我希望能够将其扩展到更广泛的连续分布系列,其中经常涉及其他参数 (shape)。例如,
如何将此过程扩展到具有loc 和scale 之外的参数的distributions?
结合上面的sn-ps:
import scipy.stats as scs
import numpy as np
import pandas as pd
np.random.seed(123)
r = pd.Series(np.random.beta(a=0.5, b=0.5, size=1000),
index=pd.date_range('2013', periods=1000))
ewm = r.ewm(span=60)
loc = ewm.mean().iloc[-1]
scale = ewm.std().iloc[-1]
print(scs.norm.ppf(q=0.05, loc=loc, scale=scale))
# -0.196734019969
【问题讨论】:
-
你只是想估计 lambda 吗?
-
好的,但是所有这些参数都可以用均值和方差来计算,所以只需要你运行这些计算
-
我认为首先给出问题的清晰数学公式会有所帮助。 然后弄清楚如何实现它。问题“是否可以使用分布的 .fit 方法来估计参数,以某种方式结合指数权重?” 似乎太模糊了。
-
简短回答:您需要重写分布
fit函数以允许权重。目前不允许使用权重,所有观察都被视为来自给定分布的独立且同分布的观察。 (即加权 MLE 不仅仅是计算形状参数的加权矩方法) -
@user333700 您认为我在下面的回答至少在某种程度上模仿了这种方法吗? (当然,我使用的引导是一个中间步骤,在您的方法中不会发生。)
标签: python python-3.x pandas scipy distribution