matlab_格蘭傑因果關係檢驗

      格蘭傑因果關係檢驗:“依賴於使用過去某些時點上所有信息的最佳最小二乘預測的方差。"

       主要適用於經濟變量。

       其統計學本質上是對平穩時間序列數據一種預測,僅適用於計量經濟學的變量預測,不能作爲檢驗真正因果性的判據。

       基本步驟:

      1)將當前的y對所有的滯後項y以及別的什麼變量(如果有的話)做迴歸,即y對y的滯後項yt-1,yt-2,…,yt-q及其他變量的迴歸,但在這一回歸中沒有把滯後項x包括進來,這是一個受約束的迴歸。然後從此迴歸得到受約束的殘差平方和RSSR。

      2)做一個含有滯後項x的迴歸,即在前面的迴歸式中加進滯後項x,這是一個無約束的迴歸,由此迴歸得到無約束的殘差平方和RSSUR。
      3)零假設是H0:α1=α2=…=αq=0,即滯後項x不屬於此迴歸。
      4)爲了檢驗此假設,用F檢驗,即:
     它遵循自由度爲q和(n-k)的F分佈。在這裏,n是樣本容量,q等於滯後項x的個數,即有約束迴歸方程中待估參數的個數,k是無約束迴歸中待估參數的個數。
     5)如果在選定的顯著性水平α上計算的F值超過臨界值Fα,則拒絕零假設,這樣滯後x項就屬於此迴歸,表明x是y的原因。
     6)同樣,爲了檢驗y是否是x的原因,可將變量y與x相互替換,重複步驟(1)~(5)。
function granger(x,y,alpha,max_lag)
T = length(x);
BIC = zeros(max_lag,1);
RSSR = zeros(max_lag,1);
i = 1;
while i <= max_lag
    ystar = x(i+1:T,:);
    xstar = [ones(T-i,1) zeros(T-i,i)];
    j = 1;
    while j <= i
        xstar(:,j+1) = x(i+1-j:T-j);
        j = j+1;
    end
    [b,bint,r] = regress(ystar,xstar);
    BIC(i,:) = T*log(r'*r/T) + (i+1)*log(T);
    RSSR(i,:) = r'*r;
    i = i+1;
end
%RSSR不加滯後項x的受約束的殘差平方和
x_lag = find(min(BIC));
BIC = zeros(max_lag,1);
RSSUR = zeros(max_lag,1);
i = 1;
while i <= max_lag
    ystar = x(i+x_lag+1:T,:);
    xstar = [ones(T-(i+x_lag),1) zeros(T-(i+x_lag),x_lag+i)];
    j = 1;
    while j <= x_lag
        xstar(:,j+1) = x(i+x_lag+1-j:T-j,:);
        j = j+1;
    end
    %加入滯後項
    j = 1;
    while j <= i
        xstar(:,x_lag+j+1) = y(i+x_lag+1-j:T-j,:);
        j = j+1;
    end
    [b,bint,r] = regress(ystar,xstar);
    BIC(i,:) = T*log(r'*r/T) + (i+1)*log(T);
    RSSUR(i,:) = r'*r;
    i = i+1;
end
y_lag = find(min(BIC));
F_num = ((RSSR(x_lag,:) - RSSUR(y_lag,:))/y_lag);
F_den = RSSUR(y_lag,:)/(T-(x_lag+y_lag+1));
F = F_num/F_den;
c_v = finv(1-alpha,y_lag,(T-(x_lag+y_lag+1)));
p = 1-fcdf(F,y_lag,(T-(x_lag+y_lag+1)));
end





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章