1 Star 0 Fork 11

dingxiuhao/Stata-Event_Study

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
rolling_rho.ado 3.48 KB
一键复制 编辑 原始数据 按行查看 历史
Richard Herron 提交于 2017-07-05 10:52 . Minor changes
*! Date : 2016-07-22
*! version : 0.1
*! Author : Richard Herron
*! Email : richard.c.herron@gmail.com
*! fast rolling correlations
/*
2016-07-22 v0.1 fork of rolling_beta
*/
program rolling_rho
version 11.2
syntax varlist(min=2 max=2 numeric) [ , short(integer 36) long(integer 36) faster ]
// dependent and indpendent vars from varlist
tempvar x y
tokenize `varlist'
generate `y' = `1'
generate `x' = `2'
// faster version uses constant window and lag operators
if ("`faster'" == "") {
local l = `long'
local s = `short'
// check logical windows
if (`s' > `l') display as error "long must be >= short"
// tsfill to use simple subscripting, flag will me missing for fill observations
tempvar flag
generate `flag' = 1
tsfill
}
else {
display "faster option: long window = short window = `long'"
local w = `long'
}
// first round of temporary variables (more below)
tempvar xs ys xys x2s y2s
// cumulative sums
generate `xs' = sum(`x')
generate `ys' = sum(`y')
generate `xys' = sum(`x' * `y')
generate `x2s' = sum(`x' * `x')
generate `y2s' = sum(`y' * `y')
if ("`faster'" == "") {
// SLOW -- allows growing window
// index lags
/*
ida is absolute id (row number)
idf is first absolute id for each panel
idr is relative id (or ida - idf)
idl is absolute id of correct lag
*/
tempvar ida idf idr idl
generate `ida' = _n
xtset
bysort `r(panelvar)' (`r(timevar)') : generate `idf' = `ida'[1]
generate `idr' = `ida' - `idf' + 1
generate `idl' = cond(`idr' > `l', `ida' - `l', `idf') if (`idr' > `s')
generate len = `ida' - `idl'
// observations used
tempvar ms
generate `ms' = sum(missing(`y', `x'))
generate obs = len - (`ms' - `ms'[`idl'])
// variances and covariances
tempvar covxy varx vary
generate `covxy' = (`xys' - `xys'[`idl'])/(obs - 1) - ((`xs' - `xs'[`idl'])/obs)*((`ys' - `ys'[`idl'])/obs)*obs/(obs - 1)
generate `varx' = (`x2s' - `x2s'[`idl'])/(obs - 1) - ((`xs' - `xs'[`idl'])/obs)*((`xs' - `xs'[`idl'])/obs)*obs/(obs - 1)
generate `vary' = (`y2s' - `y2s'[`idl'])/(obs - 1) - ((`ys' - `ys'[`idl'])/obs)*((`ys' - `ys'[`idl'])/obs)*obs/(obs - 1)
// rho
generate rho = `covxy' / sqrt(`varx' * `vary')
// labels
label variable rho "Rolling rho"
label variable obs "Observations used"
label variable len "Window length"
// return to original state
drop if missing(`flag')
}
else {
// FAST -- requires constant window
// observations used
tempvar ms
generate `ms' = sum(missing(`y', `x'))
generate obs = `w' - s`w'.`ms'
generate len = `w'
// generate variances and covariances
tempvar covxy varx vary
generate `covxy' = s`w'.`xys'/(obs - 1) - (s`w'.`xs'/obs)*(s`w'.`ys'/obs)*obs/(obs - 1)
generate `varx' = s`w'.`x2s'/(obs - 1) - (s`w'.`xs'/obs)*(s`w'.`xs'/obs)*obs/(obs - 1)
generate `vary' = s`w'.`y2s'/(obs - 1) - (s`w'.`ys'/obs)*(s`w'.`ys'/obs)*obs/(obs - 1)
// rho
generate rho = `covxy' / sqrt(`varx' * `vary')
// labels
label variable rho "Rolling rho"
label variable obs "Observations used"
label variable len "Window length"
}
end
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/dingxiuhao/Stata-Event_Study.git
git@gitee.com:dingxiuhao/Stata-Event_Study.git
dingxiuhao
Stata-Event_Study
Stata-Event_Study
master

搜索帮助