鉴于一些时间序列数据:
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 (百分比点函数),同时将指数权值加入到分布的构建中。
例如,对于正常分布,这只需估计指数加权均值和标准差:
所有连续分布都以loc和scale作为关键字参数来调整分布的位置和规模,例如,对于标准正态分布,位置是均值,尺度是标准差。[来源]
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之外还有参数)
来自上面的组合片段:
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发布于 2017-08-31 02:20:05
以下是我的实现:
x,给每个x分配指数权重。np.random.choice的np.random.choice参数。.fit方法。代码:
def ewm_weights(i, alpha):
w = (1 - alpha) ** np.arange(i)[::-1]
w /= w.sum()
return w
def bootstrap(a, alpha, size=None):
p = ewm_weights(i=len(a), alpha=alpha)
return np.random.choice(a=a, size=size, p=p)ewm_weights的定义如下:
http://pandas.pydata.org/pandas-docs/stable/computation.html#exponentially-weighted-windows
用adjust=True。
示例:
# Create a nonstationary `x` variable with larger mean and stdev in period 2
x1 = np.random.normal(loc=4, scale=3, size=1000)
x2 = np.random.normal(loc=10, scale=5, size=1000)
x = np.hstack((x1,x2))x的直方图如下所示:
plt.hist(x, bins=25)

虽然带有b的引导alpha=0.03看起来如下:
b = bootstrap(x, alpha=0.03, size=int(1e6))
plt.hist(b, bins=25)

然后,来自scipy.stats._continuous_distns._distn_names的任何连续分发都可以适合于b。
问题:
ewm_weights更安全。x中的自相关。https://stackoverflow.com/questions/45969140
复制相似问题