io non sono sicuro perché pd.ols
è così pignolo lì (in quanto sembra a me che avete seguito correttamente l'esempio). Sospetto che ciò sia dovuto a cambiamenti nel modo in cui Panda gestisce o memorizza gli indici datetime, ma sono troppo pigro per esplorarlo ulteriormente. In ogni caso, dal momento che la variabile datetime differisce solo per l'ora, si può solo estrarre l'ora con un dt
di accesso:
pd.ols(x=pd.to_datetime(z["index"]).dt.hour, y=z[0])
tuttavia, che ti dà un R-quadro di 1, dal momento che il modello è overspecified con l'inclusione di un'intercetta (e y è una funzione lineare di x). È possibile modificare range
in np.random.randn
e quindi si otterrà qualcosa che assomiglia ai normali risultati di regressione.
In [6]: z = pd.Series(np.random.randn(4), index = rng).reset_index()
pd.ols(x=pd.to_datetime(z["index"]).dt.hour, y=z[0])
Out[6]:
-------------------------Summary of Regression Analysis-------------------------
Formula: Y ~ <x> + <intercept>
Number of Observations: 4
Number of Degrees of Freedom: 2
R-squared: 0.7743
Adj R-squared: 0.6615
Rmse: 0.5156
F-stat (1, 2): 6.8626, p-value: 0.1200
Degrees of Freedom: model 1, resid 2
-----------------------Summary of Estimated Coefficients------------------------
Variable Coef Std Err t-stat p-value CI 2.5% CI 97.5%
--------------------------------------------------------------------------------
x -0.6040 0.2306 -2.62 0.1200 -1.0560 -0.1521
intercept 0.2915 0.4314 0.68 0.5689 -0.5540 1.1370
---------------------------------End of Summary---------------------------------
alternativa, è possibile convertire l'indice per un intero, anche se ho trovato questo non ha funzionato molto bene (sto assumendo in quanto i numeri interi rappresentano nanosecondi dal l'epoca o qualcosa del genere, e quindi sono molto grandi e causare problemi di precisione), ma la conversione a intero e dividendo per un trilioni di e così ha fatto il lavoro e ha dato essenzialmente gli stessi risultati utilizzando dt.hour
(vale a dire lo stesso R-squared):
pd.ols(x=pd.to_datetime(z["index"]).astype(int)/1e12, y=z[0])
Fonte del messaggio di errore
FWIW, sembra che il messaggio di errore proviene da qualcosa di simile a questo:
pd.to_datetime(z["index"]).astype(float)
Anche se una soluzione abbastanza ovvia è questa:
pd.to_datetime(z["index"]).astype(int).astype(float)
Idealmente, non c'è bisogno di 'rest_index () ', non' pd.ols (y = s, x = s) 'funziona per te? – Zero
Sì, lo fa! Grazie. Per caso sai come funziona o perché la conversione da datetime a I assume float funziona senza errori? – canyon289
Non importa, questo sembra fallire. Fa solo una regressione contro la stessa serie – canyon289