我有以下系列数据。它具有如下所示的600个数据点,我想使用Python按照相同的数据模式生成100000个元素的数组,我不知道该怎么做。有人可以帮我这样做吗?
我试图绘制直方图并使数据具有某种分布,但是效果不佳,因为我认为我的数据没有遵循任何分布
tup = levy.fit_levy(data)
array = tup[0].get('0')
random = levy_stable.rvs(array[0], array[1],array[2],array[3],size=100000)
这是我要拟合的数据的曲线图和直方图
答案 0 :(得分:0)
这里的第一个问题是您是否拥有(1)时间序列或(2)独立样本?如果我理解您的问题,我相信您处于第二种情况,您需要:
我建议您开始尝试不同的主分布(查看数据指数可能是一个很好的起点)。在这里,您可以在SciPy中找到许多连续分布:
https://docs.scipy.org/doc/scipy/reference/stats.html#continuous-distributions
如果要自动查找数据的SSE最少的分布,请查看tmthydvnprt的答案:
Fitting empirical distribution to theoretical ones with Scipy (Python)?
但是,如果是时间序列数据,则需要拟合时间序列模型而不是频率分布。在这种情况下,我建议您开始拟合ARIMA模型,如果这种方法行不通,请使用更复杂的模型:https://www.statsmodels.org/dev/generated/statsmodels.tsa.arima_model.ARIMA.html
答案 1 :(得分:0)
为什么不对数据进行内核平滑处理?
我有一个列表x = [f1, f2,...,f600]
与您一样
使用OpenTURNS的KernelSmoothing方法,很容易拟合非参数分布:
import openturns as ot
# format x as a sample of 600 points
sample = ot.Sample([[p] for p in x])
model = ot.KernelSmoothing().build(sample)
就是这样!
如果要对模型进行100000次采样,只需致电:
sample_100000 = model.getSample(100000)