Python 具有NaN值的Stats模型的样本外预测

Python 具有NaN值的Stats模型的样本外预测,python,regression,statsmodels,Python,Regression,Statsmodels,我有一个数据集,其中包括有关美国汽车销售的各种值 我试图用一个简单的OLS回归预测2010年10月的汽车销量 df2=pd.read\u csv('Paul\u data/question12\u prediction\u data.csv')) 由于数组的索引为零,窗口大小=7#-1 window=df2.ix[0:窗口大小:] 打印窗口 结果=sm.ols(公式=“log\u sales~log\u sales\u l2+车辆跳跃\u l2+车辆品牌\u l2+实际\u sales\u ed

我有一个数据集,其中包括有关美国汽车销售的各种值

我试图用一个简单的OLS回归预测2010年10月的汽车销量

df2=pd.read\u csv('Paul\u data/question12\u prediction\u data.csv'))
由于数组的索引为零,窗口大小=7#-1
window=df2.ix[0:窗口大小:]
打印窗口
结果=sm.ols(公式=“log\u sales~log\u sales\u l2+车辆跳跃\u l2+车辆品牌\u l2+实际\u sales\u edmunds\u l1+发行商+isWinter”,数据=df2)。拟合()
打印结果.predict()[df2[(df2.month==10)和(df2.year==2015)]。索引[0]]
窗口包含以下数据:

year  month  auto_sales  log_sales  log_sales_l1  log_sales_l2  \
0  2015      3       83352  11.330828     11.294807     11.317823   
1  2015      4       83871  11.337035     11.330828     11.294807   
2  2015      5       85489  11.356143     11.337035     11.330828   
3  2015      6       84123  11.340035     11.356143     11.337035   
4  2015      7       85320  11.354164     11.340035     11.356143   
5  2015      8         NaN        NaN     11.354164     11.340035   
6  2015      9         NaN        NaN           NaN     11.354164   
7  2015     10         NaN        NaN           NaN           NaN   

   log_sales_l3  GT_vehicleshopping  GT_vehiclemaintenance  GT_suvs  \
0     11.313523              0.1320                  0.694   0.0680   
1     11.317823              0.1150                  0.745   0.0525   
2     11.294807              0.1060                  0.754   0.0560   
3     11.330828              0.0950                  0.785   0.0550   
4     11.337035              0.1025                  0.870   0.1075   
5     11.356143              0.1140                  0.794   0.1240   
6     11.340035                 NaN                    NaN      NaN   
7           NaN                 NaN                    NaN      NaN   

          ...          vansminivans_l2  isWinter  isSummer  vehiclebrands  \
0         ...                   0.0900         1         0           0.08   
1         ...                   0.1250         0         0           0.09   
2         ...                   0.1580         0         0           0.09   
3         ...                   0.1750         0         1           0.12   
4         ...                   0.1920         0         1           0.17   
5         ...                   0.2100         0         1            NaN   
6         ...                   0.2175         0         0            NaN   
7         ...                      NaN       NaN       NaN            NaN   

   vehiclebrand_l1  vehiclebrand_l2  actual_sales_edmunds  edmund_forecast  \
0             0.05             0.03               1542841          1522881   
1             0.08             0.05               1451790          1464176   
2             0.09             0.08               1631234          1591221   
3             0.09             0.09               1473142          1484487   
4             0.12             0.09               1507643          1478025   
5             0.17             0.12               1573573          1538958   
6              NaN             0.17                   NaN              NaN   
7              NaN              NaN                   NaN              NaN   

   actual_sales_edmunds_l1  edmund_forecast_l1  
0                  1255458             1285019  
1                  1542841             1522881  
2                  1451790             1464176  
3                  1631234             1591221  
4                  1473142             1484487  
5                  1507643             1478025  
6                  1573573             1538958  
7                      NaN                 NaN  

[8 rows x 32 columns]
但是,我得到以下错误:


索引器错误回溯(最近一次调用)
在()
5.
6结果=sm.ols(公式=“log\u sales~log\u sales\u l2+vehicleshopping\u l2+VehiclerBrand\u l2+实际销售\u edmunds\u l1+Isummer+isWinter”,数据=df2)。拟合()
---->7打印结果。预测()[df2[(df2.month==10)和(df2.year==2015)]。索引[0]]
8#np.exp(结果预测(df2.ix[x+(窗口大小)])
索引器:索引7超出大小为5的轴0的界限

我不知道现在该如何进行,我知道我正在尝试进行样本外预测,但迄今为止我所做的一切都未能解决这个问题。

我相信,你的问题是,你正在回归的数据只有5个条目,其中并非所有的输入都是NaN。因此:

result.predict()
返回由5个元素组成的数组,但这是:

df2[(df2.month == 10) & (df2.year == 2015)].index[0]

返回“7”,因为执行的切片返回一行,对应于原始数据帧中的第8行。因此,您要求“给我这个长度为5的数组的第8个元素”,因此它会中断。

我相信您的问题是,您正在回归的数据只有5个条目,其中并非所有输入都是NaN。因此:

result.predict()
返回由5个元素组成的数组,但这是:

df2[(df2.month == 10) & (df2.year == 2015)].index[0]

返回“7”,因为执行的切片返回一行,对应于原始数据帧中的第8行。因此,您要求“给我这个长度为5的数组的第8个元素”,因此它会断开。

user333700是正确的,这解决了我的问题:

df2 = pd.read_csv('Paul_data/question12_prediction_data.csv')
window_size = 4                                              #-1 due to zero-indexing of array
window = df2.ix[0:window_size,:]

result = sm.ols(formula="log_sales ~ log_sales_l2 + vehicleshopping_l2 + vehiclebrand_l2 + actual_sales_edmunds_l1 + isSummer + isWinter", data=window).fit()
index = df2[(df2.month == 10) & (df2.year == 2015)].index[0] -1
print result.predict(df2)[index]

user333700是正确的,这解决了我的问题:

df2 = pd.read_csv('Paul_data/question12_prediction_data.csv')
window_size = 4                                              #-1 due to zero-indexing of array
window = df2.ix[0:window_size,:]

result = sm.ols(formula="log_sales ~ log_sales_l2 + vehicleshopping_l2 + vehiclebrand_l2 + actual_sales_edmunds_l1 + isSummer + isWinter", data=window).fit()
index = df2[(df2.month == 10) & (df2.year == 2015)].index[0] -1
print result.predict(df2)[index]

我是否正确地认为,理论上可以使用通过使用填充的行建立的回归来预测样本外的数据?当然,这确实是关键。当您在没有参数的情况下调用predict()时,您使用的是估计参数,而不是用于拟合的数据。在您最初的例子中,它返回了一个包含5个预测的列表。在您的编辑中,您现在明确地告诉statsmodels它应该对哪些数据进行预测。我更正,从理论上讲,应该可以使用通过使用填充的行建立的回归来预测样本之外的数据?当然,这确实是重点。当您在没有参数的情况下调用predict()时,您使用的是估计参数,而不是用于拟合的数据。在您最初的例子中,它返回了一个包含5个预测的列表。在您的编辑中,您现在明确地告诉statsmodels它应该做什么数据,predictionOLS可以为给定的解释变量进行预测。在我看来,错误在于解释变量的预测数据不在预测调用中,即检查括号
result.predict([df2[(df2.month==10)和(df2.year==2015)])
.predict without arguments返回估计中使用的样本的
fittedvalues
。OLS可以预测给定的解释变量。在我看来,错误在于解释变量的预测数据不在预测调用中,即检查括号
结果。predict([df2[(df2.month==10)和(df2.year==2015)]
。无参数预测返回估计中使用的样本的
拟合值。