Les Pandas/Statsmodel LO prédire les valeurs futures
J'ai essayé d'obtenir une prédiction pour l'avenir des valeurs dans le modèle que j'ai créé. J'ai essayé les deux LO dans les pandas et statsmodels. Voici ce que j'ai dans statsmodels:
import statsmodels.api as sm
endog = pd.DataFrame(dframe['monthly_data_smoothed8'])
smresults = sm.OLS(dframe['monthly_data_smoothed8'], dframe['date_delta']).fit()
sm_pred = smresults.predict(endog)
sm_pred
La longueur du tableau retourné est égal au nombre d'enregistrements dans mon premier dataframe, mais les valeurs ne sont pas les mêmes. Quand je fais les opérations suivantes à l'aide des pandas je n'ai pas de valeurs retournées.
from pandas.stats.api import ols
res1 = ols(y=dframe['monthly_data_smoothed8'], x=dframe['date_delta'])
res1.predict
(Notez qu'il n'est pas .ajustement de la fonction MCO dans les Pandas) quelqu'un Pourrait jeter une certaine lumière sur la façon dont je pourrais obtenir les prédictions de mon modèle OLS dans les deux pandas ou statsmodel-je me rends compte que je ne dois pas être en utilisant .prédire correctement et j'ai lu les multiples autres problèmes que les gens ont eu, mais ils ne semblent pas s'appliquer à mon cas.
modifier je crois "endog' telle que définie est erronée-que je devrais être en train de passer les valeurs pour lesquelles je tiens à prévoir; c'est pourquoi j'ai créé une plage de dates des 12 dernières périodes de la dernière valeur enregistrée. Mais encore, je rater quelque chose que j'obtiens l'erreur:
matrices are not aligned
modifier voici un extrait de données, la dernière colonne (en rouge) des nombres est la date de delta, qui est une différence dans le mois à compter de la première date:
month monthly_data monthly_data_smoothed5 monthly_data_smoothed8 monthly_data_smoothed12 monthly_data_smoothed3 date_delta
0 2011-01-31 3.711838e+11 3.711838e+11 3.711838e+11 3.711838e+11 3.711838e+11 0.000000
1 2011-02-28 3.776706e+11 3.750759e+11 3.748327e+11 3.746975e+11 3.755084e+11 0.919937
2 2011-03-31 4.547079e+11 4.127964e+11 4.083554e+11 4.059256e+11 4.207653e+11 1.938438
3 2011-04-30 4.688370e+11 4.360748e+11 4.295531e+11 4.257843e+11 4.464035e+11 2.924085
ok...j'ai essayé de poster un copier-collé sur le bloc de données à partir d'un ipython de sortie, mais bien sûr, il n'est pas correctement...
ne
df.to_dict
et collerVotre première série de code a l'air correct. Pourquoi voudriez-vous que les valeurs soient identiques? Peut-être regarder
smresults.summary()
de voir comment le modèle est adapté.Ce n'est pas que je m'attends à la même chose, vraiment, c'est juste que c'est le retour des valeurs pour 42 périodes, mais je ne sais pas lesquels et les valeurs sont e+22 qui est trop élevé.
OriginalL'auteur pythonista | 2014-08-26
Vous devez vous connecter pour publier un commentaire.
Je pense que votre problème ici est que statsmodels ne pas ajouter de une interception par défaut, de sorte que votre modèle ne permet pas d'obtenir une grande partie de l'ajustement. Pour le résoudre dans votre code pourrait être quelque chose comme ceci:
Aussi, pour ce que ça vaut, je pense que le statsmodel formule de l'api est beaucoup plus agréable de travailler avec lorsque vous traitez avec DataFrames, et ajoute une interception par défaut (ajouter un
- 1
pour l'enlever). Voir ci-dessous, il devrait donner la même réponse.Edit:
De prédire les valeurs futures, il suffit de passer de nouvelles données à
.predict()
Par exemple, en utilisant le premier modèle:Sur l'ordonnée à l'origine - il n'y a rien codée dans le numéro de
1
c'est juste basé sur le calcul de l'OLS (un intercept est parfaitement analogue à un régresseur qui est toujours égal à 1), de sorte que vous pouvez tirer de la valeur dès le résumé. En regardant les statsmodels docs, une autre façon d'ajouter une interception serait:intercept' not in index
. De plus je suis capable de voir l'ordonnée à l'origine précisément à partir du modèle de résumé, dois-je l'utiliser ou ne '1' coder quelque chose? Merci encore!désolé! Je ce qui se passe avec l'ordonnée à l'origine! J'ai juste besoin de comprendre comment prédire l'avenir des périodes avec ce modèle maintenant...
sur l'erreur - assurez-vous que
type(dframe)
est une pandas un DataFrame, vous ne devriez pas se faire d'erreur. Voir modifier pour obtenir des réponses à vos autres questions.très sympa, merci beaucoup-j'ai fait un tas de ewma avec différentes portées et suis prédire les valeurs futures à l'aide de ewma et je voulais le comparer à LO prédictions sur les données d'origine et sur le lissage des données...aucune idée de ce qui faire confiance, mais merci de m'aider avec ce morceau!
OriginalL'auteur chrisb