R语言函数与模型学习笔记:残差相关性零均值检验及跨期相关系数(图)

R语言函数与模型学习笔记:残差相关性零均值检验及跨期相关系数(图)
使用极大似然估计模型参数的假设包括:残差正态性、包含截距时的零均值、以及联合正态分布。如果我们更进一步假设待估计方程矩阵的方差-协方差矩阵为对称矩阵,那么就需要进行残差独立性检验。正态性检验方法很多,包括偏度、峰度和样本分布等参数检验,在normtest、nortest和normwhn包中有许多进行进行正态检验的方法,且函数使用简单。我们今天推送的代码就是为了方便解决残差零均值和相关性检验的——cor.test()函数不能直接对残差矩阵进行。因此我们今天提供这样一个函数,可以将其直接嵌套进ML估计的模型之中,对残差矩阵进行检验。

R语言函数与模型学习笔记:残差相关性零均值检验及跨期相关系数(图)


1. 原始代码
residual.test=function(x){
library(psych)
library(psych)
colnames(x)=c(1:ncol(x))
rownames(x)=c(1:nrow(x))
cor.test.hommel=corr.test(x,adjust="hommel")
cor.test.BH=corr.test(x,adjust="BH")
residual.zero.p=c(NA)
for(i in 1:ncol(x)){
residual.zero.p[i]=t.test(x[,i])$p.value
}
result=list(cor.test.hommel,cor.test.BH,residual.zero.p)
names(result)=c("cor.test.hommel###correlation test,controlling family-wise error rate",
"cor.test.BH###correlation test,controlling false discovery rate",
"residual.zero.p###zero-mean test,t test for zero mean in residuals")
return(result)
}
2. 使用说明
直接将上述函数在R console中运行,然后就可以使用residual.test(x)函数对残差矩阵进行相关性检验和零均值t检验(极大似然估计结果可使用该函数对残差矩阵进行分析)。在使用中x为矩阵,列为变量,行为个体或时间。核心函数corr.test()来自于psych包(因此需要加载该包),相关性检验分别对Family-wise error rate和False discovery rate进行调整。在返还的相关系数矩阵和伴随概率矩阵中,上三角部分为调整后的值,下三角为调整前的值。
3. 案例
返回结果包含三部分:(1)控制FWER的相关性检验结果,见第一个数值矩阵(相关系数)和第二个数值矩阵(概率值);(2)控制FDR的相关性检验结果,见第三个数值矩阵(相关系数)和第四个数值矩阵(概率值);(3)零均值检验结果,最后一行的数值向量。
R语言 函数与模型:跨期相关系数
前言
在研究和学习过程中,我们总是需要不断的调用各类函数,R软件的强大就在于集成了大量的包可供用户使用。然而,困难在于对于数据清洗和简单的统计分析,我们很难从Task Views中寻找到想要的函数——Task Views对包的分类管理很有效。比如我们今天推送的“跨期相关系数矩阵”。因此,我们会根据自身的实践经验,分享自己写出来的R语言函数,以解决这些简单却繁琐的问题。由于经验有限,我们将从自己研究领域的时间出发,不定期更新,并公布代码和运行结果。若在使用过程中遇到bugs,也可直接发送留言或发送邮件给代码作者,帮助改善自定义函数。此外,R语言需要调用许多函数完成模型的估计和假设检验,我们也会推送一些自定义函数,使模型估计及假设一次性呈现,使大家能更加方便快捷的使用R软件。
1. 跨期相关系数计算原始代码
cor.time=function(x,y,n){
###x is matrix and y is vector,and the lag term is y###
###n is total periods of lag, while first half is the LAG###
###row of x must be variates, column of x must be time###
###n must be odd number###
###based on fBasics package###
cor.time.cross=matrix(NA,nrow(x),n)
rowname=c(NA)
colname=c(NA)
for(j in 1:nrow(x)){
for(i in 1:n){
cor.time.cross[j,i]=cor(x[j,],tslag(y,k=(n-1)/2-i),use="na.or.complete")
colname[i]=paste("periods","(",-(n+1)/2+i,")",sep="")
}
rowname[j]=paste("variate","-",j,sep="")
}
rownames(cor.time.cross)=rowname
colnames(cor.time.cross)=colname
return(cor.time.cross)
}
2. 使用说明
直接将上述函数在R console中运行,然后就可以使用cor.time(x,y,n)函数计算跨期相关系数,其中x为变量矩阵,列为时间(个体),行为变量,n为领先滞后期。运行前需要加载fBasics包,因为使用了tslag()函数。

在使用前,必须将x定义为矩阵,并按照row为不同变量,col为不同个体或者时间的方式排列。骆驼祥子读后感(http://www.simayi.net/duhougan/6676.html)400字心得体会,如果有使用者习惯于col为变量,row为时间或者个体,那么可以在定义了矩阵后,使用t()函数将其转置,y为向量,其为进行领先滞后操作的向量,n为单个数值,需要定义为奇数,因为cor.time(x,y,n)函数自动计算对称型的领先滞后相关系数。

3. 例子
fluc[1:2,1:10]为2*10矩阵
fluc.west.t[1:10]为长度为10的向量
领先滞后期为3
cor.time()函数返回了滞后1期、当期、领先1期的相关系数,总共为3期;
fluc.west.t为长度为36的向量,因此使用matrix()函数将其定义为1*36的矩阵
fluc.nonwest.t为长度为36的向量
领先滞后期为共为5
cor.time()函数返回了滞后2期、滞后1期、当期、领先1期和领先2期的相关系数,总共为5期;
特别提醒:
在使用上面的代码时,一定要将哪个是进行滞后操作的变量铭记于心,因为跨期相关分析中,领先滞后变量不同,实际分析(如顺周期/逆周期分析,经济周期中领先和滞后关系)的结果将完全相反。

猜你喜欢

转载自blog.csdn.net/minemi/article/details/81221380