使用Stata中的逻辑索引提取子矩阵?

时间:2017-09-18 17:15:53

标签: stata

像我这样只想打算做一些基本估算工作的Naive Stata用户通常很不熟悉Stata的矩阵功能和Mata语法。但是,在某些情况下,需要该技术。例如,最近我想使用Belloni et al.(2014)(第40页的底部段落)强加的“高维套索IV”方法,他们的方法包括“初步数据清理”:

(1)。在每个双变量变量对和许多变量的高阶项之间创建交互项。

(2)计算相关矩阵并删除具有显着高相关性的变量(在这种情况下只保留一个变量)。

(3)确定那些存在重大小标准误差的变量并将其丢弃。

最后,保留其余变量并将其用作工具变量。

原始代码是用Matlab编写的。显然,Stata内的第一步很简单(也欢迎最简单的方法)。但是对于剩下的两个步骤,它们本质上是逻辑索引的任务,并且需要一些Mata中的矩阵操作知识(我的观察结果超过800)。

在我非常有限的理解中,处理这个问题的代码大纲应该是(只需要伪代码,细节和更正)

    local varlist var_1 var_2 ······ var_n
    correlate `varlist'


   mata:
   // Import rreturn from --correlate--, need st_local()?
   corr = st_matrix("r(C")
   index= selectindex(corr:<=.99)
   corr[.,index]
   // Finally we want to tranfer the matrix back to stata memory

所以我想要的是如何调整我的代码以实现我的目标,或者有更方便的方法来完成相同的工作。潜入Mata可能是最终解决方案,但目前,我没有那么多时间。谢谢你的帮助。

除此之外,Matlab代码片段位于

之下
xxinv = inv(x'*x);
My = full(y - x*xxinv*(x'*y)); %#ok<*MINV>
Md = full(d - x*xxinv*(x'*d));
Mz = full(z - x*xxinv*(x'*z));

I = find(std(Mz) > 1e-6);
Mz = Mz(:,I);  % Identify those instruments of large enough sd. and keep them (P40)
IND_dem = IND_dem(I);
namez = namez(I);

[I,J] = find(abs(tril(corr(Mz)-eye(size(Mz,2)))) > .99); % Identify those instruments of high bivariate correlated and drop them (P40)
drop = unique(I);
Mz(:,drop) = [];
IND_dem(drop) = [];
namez(drop) = [];

n = size(Mz,1);
p = size(Mz,2);
kx = size(x,2);

1 个答案:

答案 0 :(得分:0)

这不是对你关于Stata / Mata编程的问题的直接回应,但我想我提到Belloni,Chernozhukov,Hansen等人提出的基于Lasso的估算方法可以在Stata包中找到pdslasso 。从摘要:

  

pdslasso和ivlasso是用于估算结构参数的例程   在具有许多控制和/或仪器的线性模型中。惯例   使用方法估计稀疏高维模型,   特别是套索(最小绝对收缩和选择   算子,Tibshirani 1996)和平方根套索(Belloni等人。   2011年,2014年)。这些估算器用于选择控件(pdslasso)   和/或来自大量变量的工具(ivlasso)(可能   编号超过观察数量),在一个设置中   研究人员有兴趣估计一个或多个的因果影响   更多(可能是内生的)感兴趣的因果变量。二   方法在pdslasso和ivlasso中实现:(1)   &#34;后双筛选&#34; Belloni等人的(PDS)方法。 (2012年,   2013年,2014年,2015年,2016年)。 (2)&#34;后正规化&#34; (CHS)   Chernozhukov,Hansen和Spindler的方法论(2015年)。对于   工具变量估计,ivlasso实现   弱识别 - 鲁棒假设检验和置信度集   Chernozhukov等人。 (2013)支持测试。实施   pdslasso和ivlasso中的这些方法需要Stata程序rlasso   (提供单独的Stata模块lassopack)   套索和平方根套索估计与数据驱动的惩罚。

您还需要安装pdslasso依赖的包lassopack。要安装pdslasso / lassopack,请键入

ssc install lassopack 
ssc install pdslasso