滚动周期的成对相关忽略了双重计算

时间:2015-06-11 17:15:14

标签: matrix stata correlation

我正在尝试计算n = 40个变量的滚动窗口的成对相关性,其中2个给定变量的所有滚动成对相关性都保存在一个新变量中。

我的数据集具有以下结构:

Date        V1   V2   V3  . . .
01/01/2009  0.3  0.6  0.5
02/01/2009  0.1  0.5  0.2 
03/01/2009  0.7  0.1  0.1
.
.
.

以下代码可以解决问题。 然而,它无法忽略相关矩阵的下对角线(它估计vars之间的相关性的两倍+对角线上的1s):

ds (Date), not
gl vars `r(varlist)'

local i = 0
local j = 0

foreach current_variable1 in $vars {
local i = `i'+1 
 foreach current_variable2 in $vars {
local j = `j'+1 
    if (`j' > `i') {
     mvcorr `current_variable1' `current_variable2', ///
     generate(corr_`current_variable1'_`current_variable2') window(60) force

}
}
} 

特别是(if)上的j > i条件旨在捕获每个成对相关的加倍计算,但未能这样做。在if中加入mvcorr条件只会产生错误消息'no observations'

这个问题的解决方案是什么?

2 个答案:

答案 0 :(得分:0)

@William Lisowski在评论中调试了您的代码,但您可以简化整个过程。

使用用户编写的命令tuplesssc install tuples)预先创建元组。

clear
set more off

*----- example data -----

sysuse auto
keep mpg weight price

gen time = _n
tsset time

*----- what you want -----

tuples price mpg weight, min(2) max(2)

forvalues i = 1/`ntuples' {

    local v1 : word 1 of `tuple`i''
    local v2 : word 2 of `tuple`i''

    mvcorr `tuple`i'', generate(`v1'_`v2') window(10) force
} 

describe

@ William的建议导致相同的结果:

local i = 0
local j = 0

foreach v1 of varlist `vars' {

    local i = `i' + 1 
    foreach v2 of varlist `vars' {

        local j = `j' + 1 
        if (`j' > `i') {
            mvcorr `v1' `v2', ///
            generate(`v1'_`v2') window(10) force

        }
    }

    local j = 0
} 

describe

答案 1 :(得分:0)

我已经将元组添加到我的保留曲目中,但是,原始的嵌套循环方法可以简化为以下示例的行。

local vars a b c
local n : word count `vars'
forvalues i=1/`n' {
    forvalues j=`i'/`n' {
    local v1 : word `i' of `vars'
        local v2 : word `j' of `vars'
        display "`i' `v1' `j' `v2'"
        }
    }