统计模型:难以将ARIMA预测与原始数据的置信区间重叠

时间:2018-07-28 02:58:49

标签: python matplotlib graph statsmodels arima

我有一些股票数据,可以通过下载并制成熊猫系列

methodInfo = ty.GetMethod(methNm, parmType);

对于statsmodels,我想绘制一个显示以下内容的ARIMA模型:

  1. 原始数据
  2. 拟合值与某些原始数据重叠,并且
  3. 未来的预测+置信区间直至指定距离。

enter image description here

上面的图片来自statsmodels文档here,但是遵循他们的代码会抛出奇怪的错误。

 <CircleWrap  width={800} height={600}/>

 function CircleWrap(props) {
 return (
  <div style={{border: "1px solid white", margin: "auto", width: "90%", height: "90%"}}>
    <h3>SVG Circle</h3>
      <div style={{border: "1px solid black", padding: "3px", margin: "auto", width: "90%", height: "90%"}}>
        <ResizeCircle width={this.props.width} height={this.props.height}/>
      </div>
  </div>
);
}

let ResizeCircle = withResizeHandler(Circle);

function Circle(props) {
 return (<svg id={this.state.chartId} style={{display: 'block', margin: "auto", width: this.props.width, height: this.props.height}}>
     <g transform={transform}>
          <circle cx="70" cy="70" r="70"  fill="red"/>
     </g>
  </svg>  
);
}

const withResizeHandler = (WrappedComponent) => {
  return class extends React.Component {
  render () {
   return (
     <div style={{border: "1px solid red", margin: "auto", width: "100%", height: "100%"}}>
       {/* pass down the props from the hoc wrapper */}
       <WrappedComponent width={this.state.width} height={this.state.height}/>
     </div>
   );
 }

下面的错误

import quandl as qd
api =  '1uRGReHyAEgwYbzkPyG3'
qd.ApiConfig.api_key = api 

data = qd.get_table('WIKI/PRICES', qopts={'columns': ['ticker', 'date', 'high', 'low', 'open', 'close']},
                    ticker=['AMZN'], date={'gte': '2000-01-01', 'lte': '2014-03-10'})

data.reset_index(inplace=True, drop=True)

price = pd.Series(data.iloc[:,2].values,index=pd.to_datetime(data.iloc[:,1]))

我在做什么错了?

更新

在Chad Fulton的建议之后,我尝试A)以预先指定的频率下载数据,B)下载后手动更改原始数据的频率,以及C)将statsmodels更新为0.9并重试以上所有内容。 / p>

A给我一个错误“推断的频率,从传递的日期开始不符合传递的频率D”,而B在数据中产生fig, ax = plt.subplots() ax = price.loc['2012-01-03':].plot(ax=ax, label='observed') fig = model_fit.plot_predict('2014-01-03','2015-01-03', dynamic=False, ax=ax, plot_insample=False) plt.show() ,导致模型本身无法运行,而C改变了B的错误类型。

我认为这是因为没有频率可以应用于数据,所以不知道不知道如何生成未来日期也不能归咎于预测。在那种情况下,是否有人在进行基本预测时,至少对于自动处理缺失数据的非状态空间模型,如何在财务时间序列中利用尽可能多的数据有任何实用建议?

1 个答案:

答案 0 :(得分:1)

我的第一个答案可能不是很令人满意,但从长远来看可能会更好,是关于建议您升级到Statsmodels 0.9的建议,该版本已彻底修改了日期/时间处理。那很有可能解决您的问题。

我的第二个答案是,您可以通过确保日期索引具有频率来解决Statsmodels <0.9的问题。看来您的日期可能是每天的日期(如果不是,则必须更改以下内容以使用正确的freq参数),所以我建议您替换:

price = pd.Series(data.iloc[:,2].values,index=pd.to_datetime(data.iloc[:,1]))

具有:

price = pd.Series(data.iloc[:,2].values, index=pd.DatetimeIndex(data.iloc[:,1], freq='D'))