|
这个程序我已经完全看懂了,现在把几个有疑问的地方说明一下,供大家使用:
1、该程序是否是最新的Diks, C. and Panchenko, V. (2006)版方法?
答:是的,楼主分享的程序包是非线性格兰杰因果检验开发者开发的,详见C语言程序包中:
*
* This program calculates p-values for the Hiemstra-Jones statistic
* as well as for the Diks-Panchenko statistic. For details see the
* README file and our paper:
*
* Diks, C. and Panchenko, V. (2006)
* A new statistic and practical guidelines for nonparametric Granger causality
* testing, Journal of Economic Dynamics and Control 30 (9-10), 1647-1669
*
* Cees Diks -- June 2008
2、如何使用?答:解压完毕后,按住shift键,右击hjt2_tval.exe所在文件夹的空白处,选择“在此处打开命令窗口”,在第一行输入hjt2_tval几个字,按回车,会有第二行显示出来,让你输入数据。将需要的数据事先以.dat形式保存在与hjt2_tval.exe相同的文件夹中,然后在第二行输入该文件的名称,如x.dat。同理输入第二列数据。两列数据输入完毕后程序会自动给出结果。
3、是否使用残差序列?
答:按照 Diks, C. and Panchenko, V. (2006)所述,直接使用严平稳的原序列是可以的,但是按照《基于非线性Granger因果检验的股市间联动关系研究_潘越 》所述,如果严平稳的原序列存在线性关系,就需要进行BDS检验,确认非线性关系,再建立VAR模型,提取残差,对残差序列进行非线性格兰杰因果检验。因此,你的数据在做这个检验之前,要先进行线性格兰杰因果检验,如果没有通过,且数据是平稳的,那么就可以做本程序提供的检验了。4、结果中的UNIF是什么?/数据是否需要标准化处理?
答:UNIF结果就是令方差为1(这里我也没太看懂,根据英文应该是这样)处理数据后的结果,而不带UNIF的结果就是标准化数据后的结果,所以不用标准化。
源代码如下:从第204行
void uniform (double *X, int M)
{
int *I, i;
I = (int*) malloc (M*sizeof(int));
InsertionSort(X, I, M);
for (i=0;i<M;i++)
X = (double) I/M*3.464101615; // to make unit variance
}
/* normalize the time series to unit std. dev. */
void normalise(double *x, int N)
{
int i;
double mean=0.0, var=0.0;
for (i=0;i!=N;i++)
{
mean += x;
var += x*x;
}
mean /= (double)(N);
var /= (double)(N);
var -= mean*mean;
for (i=0;i!=N;i++)
x = (x-mean)/sqrt(var);
return;
}
5、关于楼中坛友LiuRuijin给出的matlab改进版程序包?
答:该程序基于Hiemstra–Jones test 1994的方法,因此目前可能发英文文章并不适用,水一篇中文的还是可以的。当然,还是要感谢他的帮助!
|