proc glm
可以轻松添加固定效果,而无需为类变量的每个可能值创建虚拟变量。
proc reg
能够计算稳健(白色)标准误差,但它需要您创建单独的虚拟变量。
有什么方法可以将这些功能结合起来吗?我希望能够添加许多类变量并在输出中接收白色标准错误。例如:
有了
proc glm
,我可以做这个回归。无论类变量中包含多少个级别,这都会给出正确的结果,但它不会计算稳健的标准误差。
proc glm data=ds1;
class class1 class2 class3;
weight n;
model y = c class1 class2 class3 / solution;
run;
有了
proc reg
,我可以做到:
proc reg data=ds2;
weight n;
model y = x / white;
run;
具有白色标准误差,但不包含固定效应。 为此,我可能需要 50 个或更多虚拟变量和像
model y = x class1_d1 class1_d2 ... class3_dn /white;
这样的模型语句。如果我开始添加交互项,就会变成一个疯狂的数字或虚拟变量。
显然我可以编写一个宏来创建虚拟变量,但这似乎是一个基本函数,我不禁认为我错过了一些明显的东西(STATA 和 R 都有办法轻松做到这一点)。为什么我不能在
class
中使用 proc reg
语句或从 proc glm
中获得可靠的标准错误?
我想我找到了部分答案,尽管我对其他解决方案或对此解决方案的调整感兴趣。
proc glmmod
可用于创建 proc reg
的数据集:
proc glmmod noprint outdesign=ds2 data=ds1;
class class1 class2 class3;
weight n;
model y = c class1 class2 class3;
run;
proc reg data=ds2;
weight n;
model y = col2-col50 / white;
run;
proc glmmod
使用 GLM 语法并输出包含 proc reg
需要的所有虚拟变量的回归数据集。
不像单 PROC 解决方案那么干净(并且您必须跟踪标签才能查看 ColXX 所指的内容),但它似乎工作得很好。
我认为你可以: (1) 删除缺失变量的观测值 (2) 使用proc标准贬低自变量 (3) 将因变量回归到贬低的自变量上
http://pages.stern.nyu.edu/~adesouza/sasfinphd/index/node60.html http://pages.stern.nyu.edu/~adesouza/sasfinphd/index/node61.html
上述过程中的系数与 proc glm(弗里施-沃定理)中的系数完全相同。但是,您不必创建假人(这是您的主要问题)。要获得可靠的标准错误,您可以简单地在步骤(3)上使用 proc reg 并使用白色标准错误。
希望有帮助。
我想我对此有一个答案(或者至少,如果我没有,我可能会通过在此处发布我的解决方案来找到答案)。
根据本页,可以通过对数据进行聚类,使用 proc Surveyreg 计算稳健的标准误差,以便每个观测值都是其自己的聚类。像这样:
data mydata;
set mydata;
counter=_n_;
run;
proc surveyreg data=mydata;
cluster counter;
model y=x;
run;
但是 proc Surveyreg 采用类声明,以便可以运行例如
proc surveyreg data=mydata;
class t;
cluster counter;
model y= t x*t / solution;
run;
尝试使用 method= m (wf=huber) 进行 procRobustreg ...这将使您获得强大的标准错误,尽管严格来说不是“White's”。我发现它非常消耗资源,因此在每个人 64 个观测点上进行大约 10 万次观测是不可行的。