本篇文章的主題是分析總體經濟變數
利用AR模型了解是否有時間序列相關
而該篇是利用迴歸套件來展示
首先介紹一下時間序列中的AR模型
簡單來說就是現在這期會與之前的某些期有相關
而這篇文章就是要帶大家估計出AR(2)模型
也就是落後一期跟兩期的資料對於現在這期有什麼影響
資料的一欄是時間
而他為季資料 每三個月一筆
而另一欄則是經過調整過後的GNP成長率(與一年前相比)
稍微了解資料後就可以開始分析了
一開始先匯入必備的套件
import numpy as np
import pandas as pd
這兩個套件主要可以用來處理資料
接著匯入資料
data = pd.read_excel('hw_USGNP.xls')
通常這個時候可以把資料印出來看看
但由於這份資料還需要很多處理
因此等處理好再印出來看
由於AR模型本質上也是迴歸模型(未來再找時間詳細介紹)
接著為了估計AR(2)
所以必須做出有t, t-1, t-2期的資料
資料會有點像這樣
(圖是用小畫家做的,請多多包涵)
由於落後一期
所以若T期為a3
旁邊就會放T-1期a2和T-2期a1
也就是理用這兩個值來估計a3
而這樣做的後果
就是會在資料的前兩筆和最後兩筆有遺漏值
在估計時必須去除
因此利用以下程式碼完成
#改變數名
data['t'] = data['Real Gross National Product, Percent Change from Quarter One Year Ago, Quarterly, Seasonally Adjusted']
data = data.drop('Real Gross National Product, Percent Change from Quarter One Year Ago, Quarterly, Seasonally Adjusted', axis=1)
#建立t-1,t-2
data['t-1'] = data.iloc[1:, 1]
data['t-2'] = data.iloc[2:, 1]
#只取t=1971Q1~2014Q4
data = data.iloc[0:180, :]
#創造空值,讓lag有空間
data.loc[180] = {'date':np.nan, 't':np.nan, 't-1':np.nan, 't-2':np.nan}
data.loc[181] = {'date':np.nan, 't':np.nan, 't-1':np.nan, 't-2':np.nan}
以上是先將變數名改成t 接著建立變數t-1,t-2
其中.iloc是用index製作slice的方法(三言兩語不好講清QQ)
接著取出要用來建模的資料
再多創造兩列 讓lag有空間可以放置
#建立lag
data['t-1'] = data.iloc[1:, 1]
for i in range(0, len(data['t-1'])):
data.iloc[i, 2] = data.iloc[i-1, 1]
for i in range(0, len(data['t-2'])):
data.iloc[i, 3] = data.iloc[i-2, 1]
#取出沒有NA的
data = data.iloc[2:180,0:4]
print(data.head(3))
print(data.tail(3))
接著就利用迴圈 讓資料可以順利向下遞移一格
再把有NA的欄位刪除
這邊可以把資料印出來看一下
是不是如同想像中的一樣
到這邊就算是把資料整理好囉
是不是深刻感受到資料處理是資料分析最困難的地方呢?
資料處理好後就可以開始建模囉
這邊利用迴歸模型
#回歸的套件
from sklearn.linear_model import LinearRegression
model = LinearRegression()
#建立模型
model.fit(data[['t-1', 't-2']], data['t'])
利用import輕鬆建模
也算是呼應主題吧
其中比較需要注意的就是model.fit函數
前面要放的是自變數 後面放的是應變數喔
最後就可以把估出來的係數印出來看看啦
print('[B2 B3] =', model.coef_) #B2,B3
print('B1 =', model.intercept_) #B1
簡單的算出答案
所以今天學習到了:
時間序列的AR模型
製造新變數、新觀測值
利用迴圈平移資料
導入套件建立迴歸模型
現在很多演算法其實在網路上都有套件可以import
所以在我看來 最困難的地方往往是資料處理的部分
而要怎麼從中加入自己的專業知識更是我們應該努力的方向
下一篇我會利用statsmodel套件用更快的方法估計AR模型
再請大家好好期待吧~
沒有留言:
張貼留言