基於 Python 的時序模型 AMIRA模型

2021-08-21 12:21:15 字數 3498 閱讀 5162

時間序列分析的目的:給定乙個已被觀測了的時間序列,**該序列的未來值

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是根據字典,聲學模型和語音模型,將輸入的語音特徵失量序列轉化為字串行。聲學模型是對聲學 語音學 環境的變數 說話人性別 口音等...