我是 R 和协整的新手,所以当我试图解释我想要做什么时,请耐心等待。我试图在加拿大/美国西部电力系统的 1500-2000 电压变量中找到协整变量。频率是每小时(在幂中常见),并且协整组合可以少至 N 个变量,最多为 M 个变量。
我尝试使用 ca.jo 但这里是我遇到的问题:
1) ca.jo (Johansen) 对它可以使用的变量数量有限制
2) ca.jo 似乎强制 y(t) 向量中的第一个变量成为因变量(见下文)。
特征向量,归一化为第一列:(这些是协整关系)
V1.l2 V2.l2 V3.l2
V1.l2 1.0000000 1.0000000 1.0000000
V2.l2 -0.2597057 -2.3888060 -0.4181294
V3.l2 -0.6443270 -0.6901678 0.5429844
如您所见,ca.jo 试图找到 3 个变量的线性组合,但强制第一个变量(在本例中为 V1)的系数为 1(即因变量)。我的理解是 ca.jo 会尝试找到所有组合,以便将每个变量都选为因变量。您可以在 ca.jo 文档中给出的示例中看到相同的处理方式。
3) ca.jo 似乎没有找到少于 y(t) 向量中变量数量的线性组合。因此,如果有 5 个变量并且其中 3 个是协整的(即 V1 ~ V2 + V3),则 ca.jo 无法找到此组合。也许我没有正确使用 ca.jo,但我的期望是 V1 ~ V2 + V3 与 V1 ~ V2 + V3 + 0 x V4 + 0 x V5 相同的协整组合。换句话说,未协整的变量的系数应该为零,并且 ca.jo 应该找到这种类型的组合。
我将不胜感激,因为我对 R 和协整还很陌生,并且在过去的 2 个月里一直在自学。
谢谢你。
我也在 nabble 上发过贴:
http://r.789695.n4.nabble.com/ca-jo-cointegration-multivariate-case-tc3469210.html
最佳答案
我不是专家,但由于没有人回应,我将尝试尝试一下这个.. 编辑:我注意到我刚刚回答了一个 4 岁的问题。希望它在 future 对其他人仍然有用。
你的一般理解是正确的。我不会详细介绍整个过程,但会尝试提供一些一般性的见解。 Johansen 过程做的第一件事是从 VAR 模型中创建一个与数据最相符的 VECM(这就是为什么您还需要 VAR 的滞后长度作为过程的输入)。然后,该过程将通过查看其秩来研究 VECM 的非滞后分量矩阵:如果变量未协整,则矩阵的秩将不会与 0 显着不同。 理解 johansen VECM 方程的更直观方式是注意模型的每个不同行与 ADF 过程的可比性。
此外,矩阵的秩等于其不为零的特征值(特征根)的数量。每个特征值都与一个不同的协整向量相关联,其中
等于其对应的特征向量。因此,一个特征值显着不同
从零开始表示显着的协整向量。可以使用两个不同的统计量来测试向量的显着性:最大统计量或跟踪统计量。迹检验测试小于或等于 r 个协整向量的原假设与多于 r 个协整向量的替代。相比之下,最大特征值检验针对 r + 1 个协整向量的替代来检验 r 个协整向量的原假设。
现在举个例子,
# We fit data to a VAR to obtain the optimal VAR length. Use SC information criterion to find optimal model.
varest <- VAR(yourData,p=1,type="const",lag.max=24, ic="SC")
# obtain lag length of VAR that best fits the data
lagLength <- max(2,varest$p)
# Perform Johansen procedure for cointegration
# Allow intercepts in the cointegrating vector: data without zero mean
# Use trace statistic (null hypothesis: number of cointegrating vectors <= r)
res <- ca.jo(yourData,type="trace",ecdet="const",K=lagLength,spec="longrun")
testStatistics <- res@teststat
criticalValues <- res@criticalValues
# chi^2. If testStatic for r<= 0 is greater than the corresponding criticalValue, then r<=0 is rejected and we have at least one cointegrating vector
# We use 90% confidence level to make our decision
if(testStatistics[length(testStatistics)] >= criticalValues[dim(criticalValues)[1],1])
{
# Return eigenvector that has maximum eigenvalue. Note: we throw away the constant!!
return(res@V[1:ncol(yourData),which.max(res@lambda)])
}
这段代码检查是否至少存在一个协整向量 (r
关于您的问题:该程序不会“强制”任何事情。它检查所有组合,这就是为什么你有 3 个不同的向量。我的理解是该方法只是将向量缩放/归一化为第一个变量。
关于您的另一个问题:该程序将计算残差具有最强均值回复/平稳性属性的向量。如果您的一个或多个变量对这些属性没有进一步贡献,则向量中该变量的分量确实为 0。但是,如果分量值不为 0,则意味着通过包含模型中的额外变量。
此外,您可以测试组件的测试重要性。 Johansen 允许研究人员测试关于一个或多个的假设
通过将假设视为协整关系中的系数
对 VECM 中非滞后分量矩阵的限制。如果存在r个协整向量,则只有这些线性组合或它们的线性变换,或协整向量的组合才是平稳的。但是,我不知道如何在 R 中执行这些额外的检查。
可能,您继续的最佳方法是首先测试包含较少数量变量的组合。如果您不想,您可以选择不向这些协整子集添加额外变量。但如前所述,添加其他变量可能会增加残差的协整属性/平稳性。这是否是您想要的行为取决于您的要求。
关于R,协整,多元,co.ja(),johansen,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5762128/