9
9
10
10
import numpy as np
11
11
12
- from pandas .core .api import DataFrame , Series
12
+ from pandas .core .api import DataFrame , Series , isnull
13
13
from pandas .core .common import _ensure_float64
14
14
from pandas .core .index import MultiIndex
15
15
from pandas .core .panel import Panel
@@ -381,12 +381,13 @@ def y_predict(self):
381
381
For in-sample, this is same as y_fitted."""
382
382
return self .y_fitted
383
383
384
- def predict (self , new_y_values , fill_value = None , fill_method = None ,
385
- axis = 0 ):
384
+ def predict (self , beta = None , x = None , fill_value = None ,
385
+ fill_method = None , axis = 0 ):
386
386
"""
387
387
Parameters
388
388
----------
389
- new_y_values : Series or DataFrame
389
+ beta : Series
390
+ x : Series or DataFrame
390
391
fill_value : scalar or dict, default None
391
392
fill_method : {'backfill', 'bfill', 'pad', 'ffill', None}, default None
392
393
axis : {0, 1}, default 0
@@ -403,20 +404,34 @@ def predict(self, new_y_values, fill_value=None, fill_method=None,
403
404
-------
404
405
Series of predicted values
405
406
"""
406
- orig_y = new_y_values
407
- if fill_value is None and fill_method is None :
408
- new_y_values = new_y_values .dropna (how = 'any' )
407
+ if beta is None and x is None :
408
+ return self .y_predict
409
+
410
+ if beta is None :
411
+ beta = self .beta
409
412
else :
410
- new_y_values = new_y_values .fillna (value = fill_value ,
411
- method = fill_method , axis = axis )
412
- if isinstance (new_y_values , Series ):
413
- new_y_values = DataFrame ({'x' : new_y_values })
414
- if self ._intercept :
415
- new_y_values ['intercept' ] = 1.
413
+ beta = beta .reindex (self .beta .index )
414
+ if isnull (beta ).any ():
415
+ raise ValueError ('Must supply betas for same variables' )
416
+
417
+ if x is None :
418
+ x = self ._x
419
+ orig_x = x
420
+ else :
421
+ orig_x = x
422
+ if fill_value is None and fill_method is None :
423
+ x = x .dropna (how = 'any' )
424
+ else :
425
+ x = x .fillna (value = fill_value , method = fill_method , axis = axis )
426
+ if isinstance (x , Series ):
427
+ x = DataFrame ({'x' : x })
428
+ if self ._intercept :
429
+ x ['intercept' ] = 1.
430
+
431
+ x = x .reindex (columns = self ._x .columns )
416
432
417
- new_y_values = new_y_values .reindex (columns = self ._x .columns )
418
- rs = self .sm_ols .model .predict (new_y_values .values )
419
- return Series (rs , new_y_values .index ).reindex (orig_y .index )
433
+ rs = x .values .dot (beta .values )
434
+ return Series (rs , x .index ).reindex (orig_x .index )
420
435
421
436
RESULT_FIELDS = ['r2' , 'r2_adj' , 'df' , 'df_model' , 'df_resid' , 'rmse' ,
422
437
'f_stat' , 'beta' , 'std_err' , 't_stat' , 'p_value' , 'nobs' ]
0 commit comments