時間序列分析的目的:給定乙個已被觀測了的時間序列,**該序列的未來值
arima 模型:如果乙個時間序列經差分運算後具有平穩性,則該序列為差分平穩序列,可以使用 arima 模型進行分析。
時間序列的預處理:
平穩性檢驗:
時序圖檢驗:平穩序列的時序圖顯示該序列值始終在乙個常數附近隨機波動,而且波動範圍有界;
非平穩序列有明顯的趨勢性或週期性。
自相關圖檢驗:平穩序列具有短期相關性,即只有近期的序列值對現時值的影響比較明顯,間隔越遠的過去值對現時值影響越小。隨著延遲期數k的增加,平穩序列的自相關係數會比較快的衰減趨向於0, 並在0附近隨機波動
非平穩序列的自相關係數衰減的速度比較慢。
單位根檢驗:存在單位根就是非平穩序列。
純隨機性檢驗(白雜訊檢驗):由樣本各延遲期數的自相關係數可以計算得到檢驗統計量,然後計算出對應的 p 值。如果 p 值顯著大於顯著性水平
預處理完成後可以根據處理結果將序列分為不同型別,不同的序列採取不同的分析方法:
平穩非白雜訊序列:其均值和方差是常數。常用的擬合模型是 arma 模型。
非平穩序列:均值和方差不穩定,一般將其轉變為平穩序列。如果乙個時間序列經差分運算後具有平穩性,則該序列為差分平穩序列,可以使用 arima 模型進行分析。
模型識別原則:
模型自相關係數 acf
偏自相關係數 pacf
ar(p)
拖尾p 階截尾
ma(q)
q 階截尾
拖尾aema(p,q)
p 階截尾
q 階截尾
差分運算:
差分運算具有強大的確定性資訊提取能力,許多非平穩序列差分後會顯示出平穩序列的性質,這時稱這個非平穩序列為差分平穩序列。
對差分平穩序列可以使用arma模型進行擬合。arima 模型的實質就是差分運算與arma模型的組合。
差分平穩時間序列建模步驟:
獲得觀察值序列——>平穩性檢驗——(y)——>白雜訊檢驗——(y)——>分析結束
平穩性檢驗——(n)——>差分運算——>平穩性檢驗------->白雜訊檢驗——(n)——>擬合 arma 模型——>白雜訊檢驗------->分析結束
得到平穩非白雜訊序列後建模步驟:
平穩非白雜訊序列——>計算 acf、pacf——>arma模型識別——>估計模型中未知引數的值——>模型檢驗——(y)——>模型優化——(y)——>**將來走勢
-----模型檢驗——(n)——>arma模型識別——>估計模型中未知引數的值——>模型檢驗——(y)——>模型優化——(n)——>arma模型識別------
例項:
import pandas as pd
discfile='../data/arima_data.xls'
forecastnum=5
#讀取資料,指定日期列為指標,pandas自動將日期識別為 datatime 格式
data=pd.read_excel(discfile,index_col=u'日期')
#時序圖
import matplotlib.pyplot as plt
plt.rcparams['font.sans-serif']=['simhei']
plt.rcparams['axes.unicode_minus']=false
data.plot()
data.show()
#自相關圖
from statsmodels.graphics.tsaplots import plot_acf
plot_acf(data).show()
#平穩性檢測——單位根檢驗
from statsmodels.tsa.stattools import adfuller as adf
print(u'原始序列的 adf 檢驗結果為:',adf(data[u'銷量']))
#返回值依此是:adf、pvalue、usedlag、nobs、critical、values、icbest、regresults、resstore
對非平穩序列進行差分運算:
#差分後的結果
d_data=data.diff().dropna()
d_data.columns=[u'銷量差分']
#差分後再次檢驗
#時序圖
d_data.plot()
plt.show()
#自相關圖
plot_acf(d_data).show()
from statsmodels.graphics.tsaplots import plot_pacf
#偏自相關圖
plot_pacf(d_data).show()
#單位根檢驗
print(u'差分序列的 adf 檢驗結果為:',adf(d_data[u'銷量差分']))
對平穩序列進行白雜訊檢驗:
#白雜訊檢驗
from statsmodels.stats.diagnostic import acorr_ljungbox
print(u'差分序列的白雜訊檢驗結果為:',acorr_ljungbox(d_data,lags=1)) #返回統計量和 p 值
arima 模型擬合:
from statsmodels.tsa.arima_model import arima
data[u'銷量']=data[u'銷量'].astype(float)
#定階pmax = int(len(d_data)/10) #一般階數不超過 length/10
qmax = int(len(d_data)/10) #一般階數不超過 length/10
bic_matrix= #bic 矩陣
for p in range(pmax+1):
tmp=
for q in range(qmax+1):
try: #存在部分報錯,用 try來跳過報錯
except:
bic_matrix = pd.dataframe(bic_matrix) #從中可以找出最小值
#先用 stack 展平,然後用 idxmin 找出最小值位置
p,q=bic_matrix.stack().idxmin()
print(u'bic 最小的 p 值和 q 值為:%s、%s'%(p,q))
#建立 arima(0,1,1)模型
model=arima(data,(p,1,q)).fit()
#給出乙份模型報告
model.summary2()
#做為期 5 天的**,返回**結果、標準誤差、置信區間
model.forecast(5)
基於MATLAB的AM調製解調
am調製解調原理 過程實現 遇到的問題及解決辦法 結束語am解調程式清單 摘要現在的社會越來越發達,科學技術不斷的在更新,在訊號和模擬電路裡面經常要用到調製與解調,而am的調製與解調是最基本的,也是經常用到的。用am調製與解調可以在電路裡面實現很多功能,製造出很多有用又實惠的電子產品,為我們的生活帶...
基於quartus的高階時序分析
派生時鐘就是和獨立時鐘存在頻率或者相位關係的時鐘,非同步儲存器就是具有儲存讀寫非同步功能的儲存器。在時序分析中,這兩個部分的靜態時序分析是需要設定個別約束的。派生時鐘會產生時鐘偏斜或者不同頻率時序問題,非同步儲存器則類似latch,存在建立時間和保持時間的要求。分別對獨立時鐘和衍生時鐘做時序約束,保...
語音識別中的聲學模型(AM)和語言模型 LM
本文主要受參考自 以及 最近看essen原始碼,感覺對於asr 的一下之前的比較基礎的演算法很生疏,在知乎上看到這個鏈結,感覺講的比較通俗易懂,拿來再理解一下。decoder是根據字典,聲學模型和語音模型,將輸入的語音特徵失量序列轉化為字串行。聲學模型是對聲學 語音學 環境的變數 說話人性別 口音等...