格蘭傑因果關係檢驗:“依賴於使用過去某些時點上所有信息的最佳最小二乘預測的方差。"
主要適用於經濟變量。
其統計學本質上是對平穩時間序列數據一種預測,僅適用於計量經濟學的變量預測,不能作爲檢驗真正因果性的判據。
基本步驟:
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