Python 具有NaN值的Stats模型的样本外预测
我有一个数据集,其中包括有关美国汽车销售的各种值 我试图用一个简单的OLS回归预测2010年10月的汽车销量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
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)]
。无参数预测返回估计中使用的样本的拟合值。