Matlab predict函式在時間序列方面的坑

2021-10-14 01:21:05 字數 1572 閱讀 7739

這兩天在做時間序列的程式設計,和predict函式算是死磕上了,好在瀏覽了部分論壇後有一點心得,下面就用程式表達把。

首先人為構建乙個ar(1)序列:

x0 =1;

x = zeros(

1000,1

);x(1

)= x0;

for k=2:

1000

x(k)

=0.4

*x(k-1)

+0.1

*randn(1)

;end

其次去擬合、**它:

model = armax(x,[1

,0])

;predict1 = predict(model,x,1)

;

這裡做的是一步**,我就是在對predict函式的輸出上卡住的,不過好在經過半天的時間弄懂了一些。

predict函式看上去是在做**,其實實際上類似於乙個評估函式,它不會生成t時刻之後的**值,相反地,它只會生成t時刻之前的擬合值。

拿上面的**來說,我其實是做了一步**,但是predict1和x的樣本量是一樣的,這裡predict1最後的乙個擬合值x^t

\hat x_

x^t​

是通過x裡的xt−

1∗ϕ1

x_*\phi_1

xt−1​∗

ϕ1​生成的,依次類推,直到predict1裡x^1

\hat x_1

x^1​

,它無法通過x裡x0∗

ϕ1

x_*\phi_1

x0​∗ϕ1

​生成,因為x裡的x

=x=\

x=,因此它就從自己本身的x^2

ϕ1

\frac

ϕ1​x^2

​​生成。

predict = predict(model,x,k)

;

假設我們用到的是ar(p)模型,設上述predict函式輸出的結果predict裡第i個值為x^i

\hat x_i

x^i​

,該函式在計算x^i

\hat x_i

x^i​

時,用到的是x裡第i-k,i-k-1,i-k-2,…,i-k-p+1個值xi−

1,xi

−2,⋯

,xi−

k−p+

1x_,x_,\cdots,x_

xi−1​,

xi−2

​,⋯,

xi−k

−p+1

​來計算的,當然,如果i-k-p+1<1時,它會從自身取值倒推出前面的值。

官網鏈結在此。

當然該函式起這個名字肯定是能拿來做**的,只要稍微修改一下輸入就可以,比如我想要**未來k步:

predict = predict(model,

[x;zeros(k,1)

],k)

;

輸出結果predict的最後k行就是**的值。

函式基礎 匿名函式,函式,箭頭函式,立即執行函式

doctype html html lang en head meta charset utf 8 meta name viewport content width device width,initial scale 1.0 title document title head body body ...

函式 常見函式

def fib n if n 1 return 1if n 2 return 1return fib n 1 fib n 2 def hannuo n,a,b,c n 表示有n個盤子 a 代表第乙個塔,開始的塔 b 代表第二個塔,過渡塔 c 代表第三個塔,目標塔 d.在 中n 2,這個分支可以不要,...

Lua 函式 函式

在lua中,函式是一種對語句和表示式進行抽象的主要機制。函式既可以完成某項特定的任務,也可以只做一些計算並返回結果。lua具有一項非常於總不同的特徵,允許函式返回多個結果 s,e string.find hello lua users lua print s,e 7 9 以lua編寫的函式同樣可以返...