簡體   English   中英

時間序列數據的線性回歸

[英]Linear Regression of Time-Series Data

我有一個數據框,它由帶有許多列的每月時間戳索引。 數據框的值是 float64,我只想做一個線性回歸來計算數據的斜率並將其存儲為數據框底部的新行。

我曾嘗試使用 linregress 和 polyfit,但我無法獲得正確的輸出,我要么遇到了不受支持的操作數類型,要么 SVD 沒有在線性最小二乘法中收斂。

df = pd.DataFrame({'123': ['20.908', '8.743', '8.34', '2.4909'],
                 '124': ["2", 2.34, 0, 4.1234],
                  '412': ["3", 20.123, 3.123123, 0],
                   '516': ["5", 20.123, 3.123123, 0],
                   '129': ["10", 20.123, 3.123123, 0]},

                 index=['2015-01-10', '2015-02-10', '2015-03-10', '2015-04-10'])

在這種情況下,Y 將是列中的值,X 將是時間戳。

   123     124      412      516      129
2015-01-10  20.908       2        3        5       10
2015-02-10   8.743    2.34   20.123   20.123   20.123
2015-03-10    8.34       0  3.12312  3.12312  3.12312
2015-04-10  2.4909  4.1234        0        0        0

預期的輸出是對每一列進行線性擬合,並將每一列的斜率添加到底部的新行中。

這段代碼應該給你的想法:

df = df.astype(float)
df.index = pd.to_datetime(df.index)
slopes = []
for col in df:
    x = df.index.month.values
    y = df[col].values
    b = (len(x) * (x * y).sum() - (x.sum() * y.sum())) / (len(x) * (x ** 2).sum() - x.sum() ** 2)
    slopes.append(b)

斜率:[-5.565429999999997, 0.40302000000000004, -2.5999877, -3.1999877, -4.699987700000003]

線性回歸方程為:

在此處輸入圖片說明

來源

或使用numpy.polyfit

df = df.astype(float)
df.index = pd.to_datetime(df.index)
x = df.index.month.values
y = df.values
slopes, offsets = np.polyfit(x, y, deg=1)

斜率:數​​組([-5.56543, 0.40302, -2.5999877, -3.1999877, -4.6999877])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM