Tôi không chắc chắn lý do tại sao pd.ols
rất cầu kỳ ở đó (có vẻ như tôi đã theo dõi ví dụ một cách chính xác). Tôi nghi ngờ điều này là do những thay đổi trong cách gấu trúc xử lý hoặc lưu trữ chỉ mục datetime nhưng quá lười biếng để khám phá thêm. Dù sao, kể từ biến datetime của bạn khác chỉ trong một giờ, bạn có thể chỉ trích xuất các giờ với một accessor dt
:
pd.ols(x=pd.to_datetime(z["index"]).dt.hour, y=z[0])
Tuy nhiên, cung cấp cho bạn một r-squared trong tổng số 1, vì mô hình của bạn được overspecified với sự bao gồm của một đánh chặn (và y là một hàm tuyến tính của x). Bạn có thể thay đổi range
thành np.random.randn
và sau đó bạn sẽ nhận được một cái gì đó trông giống như kết quả hồi quy bình thường.
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---------------------------------
Ngoài ra, bạn có thể chuyển đổi các chỉ số để một số nguyên, mặc dù tôi thấy điều này không làm việc rất tốt (tôi giả sử vì số nguyên đại diện nano giây kể từ khi kỷ nguyên hoặc một cái gì đó như thế, và do đó rất lớn và gây ra các vấn đề chính xác), nhưng chuyển sang số nguyên và chia cho một nghìn tỷ, hay như vậy đã làm việc và đưa về cơ bản kết quả tương tự như sử dụng dt.hour
(tức là cùng r-squared):
pd.ols(x=pd.to_datetime(z["index"]).astype(int)/1e12, y=z[0])
Nguồn của thông báo lỗi
FWIW, có vẻ như rằng thông báo lỗi xuất phát từ một cái gì đó như thế này:
pd.to_datetime(z["index"]).astype(float)
Mặc dù một workaround khá rõ ràng là thế này:
pd.to_datetime(z["index"]).astype(int).astype(float)
Tốt nhất, bạn không cần phải 'rest_index () ', không' pd.ols (y = s, x = s) 'có hiệu quả với bạn không? – Zero
Có nó! Cảm ơn bạn. Bạn có cơ hội biết làm thế nào nó hoạt động hoặc tại sao chuyển đổi từ datetime để tôi giả sử nổi hoạt động không có lỗi? – canyon289
Nevermind, điều này dường như thất bại. Nó chỉ là một hồi quy chống lại cùng một chuỗi – canyon289