gpt4 book ai didi

python - 时间序列 Pandas 的线性回归

转载 作者:太空狗 更新时间:2023-10-30 00:10:30 25 4
gpt4 key购买 nike

我想用时间序列作为预测变量进行回归,我试图按照这个 SO 答案 (OLS with pandas: datetime index as predictor) 给出的答案,但据我所知它似乎不再有效。

我是不是遗漏了什么或者是否有新的方法来做到这一点?

import pandas as pd

rng = pd.date_range('1/1/2011', periods=4, freq='H')
s = pd.Series(range(4), index = rng)
z = s.reset_index()

pd.ols(x=z["index"], y=z[0])

我遇到了这个错误。该错误是解释性的,但我想知道我在重新实现以前有效的解决方案时遗漏了什么。

TypeError: cannot astype a datetimelike from [datetime64[ns]] to [float64]

最佳答案

我不确定为什么 pd.ols 在那里如此挑剔(在我看来你确实正确地遵循了这个例子)。我怀疑这是由于 pandas 处理或存储日期时间索引的方式发生了变化,但我懒得进一步探索。无论如何,由于您的 datetime 变量仅在小时内不同,您可以使用 dt 访问器提取小时:

pd.ols(x=pd.to_datetime(z["index"]).dt.hour, y=z[0])

但是,这会使您的 r 平方为 1,因为您的模型因包含截距而过度指定(并且 y 是 x 的线性函数)。您可以将 range 更改为 np.random.randn,然后您会得到看起来像正常回归结果的结果。

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---------------------------------

或者,您可以将索引转换为整数,尽管我发现这不是很好(我假设是因为整数代表自纪元或类似时间以来的纳秒,因此非常大并导致精度问题),但转换为整数并除以一万亿左右确实有效,并给出了与使用 dt.hour 基本相同的结果(即相同的 r 平方):

pd.ols(x=pd.to_datetime(z["index"]).astype(int)/1e12, y=z[0])

错误信息来源

FWIW,看起来错误消息来自如下内容:

pd.to_datetime(z["index"]).astype(float)

虽然一个相当明显的解决方法是:

pd.to_datetime(z["index"]).astype(int).astype(float)

关于python - 时间序列 Pandas 的线性回归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30425490/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com