(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);
答案 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