【问题标题】:Stata: DFL Decomposition and Bootstrapping with Complex Survey designStata:具有复杂调查设计的 DFL 分解和引导
【发布时间】:2015-09-14 17:55:34
【问题描述】:

您好,我正在尝试使用引导权重和 SE 进行 DFL 风格的重新加权。我有一个超过 5 轮的 2 阶段分层样本(重复横截面)。

我们的想法是为参考人群创建反事实权重,然后找出两组平均结果的差异。这种差异可以分为三个部分 总差异(第 1 组 - 第 2 组,均使用调查权重) 解释差异(第 2 组使用反事实权重 - 第 2 组使用调查权重) 无法解释的差异(第 1 组使用调查权重 - 第 2 组使用反事实权重)

我已经为此编写了以下程序

代码:

///to make sure there is no singleton strata
egen cluster_id= group(sector state region strat fsu)
egen stratum_id= group(sector state region strat)

foreach r in 1 2 3 4 5 {
preserve
qui keep if round==`r'
qui svyset cluster_id [pw=hhwt] , strata (startum_id)
qui unique cluster_id, by (startum_id) gen (dup)
qui by startum_id, sort: egen temp= total(dup)
count if temp==1
drop if temp==1  
drop temp dup
save "C:\Users\Round 2 Data\bs_round`r'", replace
restore
}

代码:

///final data we will use
use "C:\Users\Round 2 Data\bs_round1"
foreach r in 2 3 4 5 {
qui merge m:m round using "C:\Users\Round 2 Data\bs_round`r'"
drop _merge
sort round
tab round
}
save "C:\Users\Round 2 Data\bs_all"

代码:

///constructing bootstrap weights
egen pooled_cid= group (cluster_id round)
egen pooled_sid= group (stratum_id round)

svyset  pooled_cid [pw=hhwt], strata( pooled_sid)
bsweights bsw, reps(100) n(-1)  
svyset  pooled_cid [pw=hhwt], strata( pooled_sid) bsrweight(bsw*) vce(bootstrap)

代码:

///writing the program
#delimit ;

capture program drop mydfl;
program define mydfl, eclass properties (svyb);
version 13;
args wgtname xvars outcome;

    gen groupref=(group==1);
    egen countg1=sum(group==1);
    egen countg2=sum(group==2);
    logit groupref `xvars';
    predict phatref;
    gen `wgtname'2=(phatref/(1-phatref))*(countg2/countg1) if group==2;
    replace `wgtname'2=1 if group==1;
    gen `wgtname'1=((1-phatref)/phatref)*(countg1/countg2) if group==1;
    replace `wgtname'1=1 if group==2;
    drop phatref groupref countg*;
                forvalues i=1/2 {;
                                sum `wgtname'`i' if group==`i';
                                  replace `wgtname'`i' = `wgtname'`i' / r(mean) if group==`i';
                  };

    mean `outcome' if group==1 ;
    mat diff_1=e(b) ;
    mean `outcome' if group==2  ;
    mat diff_2=e(b) ;
    mean `outcome' if group==2 [pw=`wgtname'2] ;
    mat diff_3=e(b) ;

    mat dd_t = diff_1-diff_2 ;
    mat dd_e= diff_3-diff_2 ;
    mat dd_u= diff_1-diff_3 ;

    ereturn scalar dd_tot=e1(dd_t,1,1) ;
    ereturn scalar dd_exp=e1(dd_e,1,1) ;
    ereturn scalar dd_unex=e1(dd_u,1,1) ;

end;

代码:

///running the program
local xvars age i.state fhead yrs_ed marital rural
local outcome wage

svy bootstrap e(dd_tot) e(dd_exp) e(dd_unex): mydfl wtid "`xvars'" `outcome'

我想找到结果中平均差距、解释的平均差距和无法解释的平均差距的标准误——在这种情况下是两组的工资。

我不断收到以下错误(在程序创建 wtid1 和 wtid2 之后)

    Bootstrap replications (100)
----+--- 1 ---+--- 2 ---+--- 3 ---+--- 4 ---+--- 5 
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    50
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx   100
insufficient observations to compute bootstrap standard errors
no results will be saved

我做错了什么?

也发布在http://www.statalist.org/forums/forum/general-stata-discussion/general/1309830-dfl-decomposition-and-bootstrapping-with-complex-survey-design

【问题讨论】:

  • 当你调用mydfl 时,为什么wgtname 用双引号括起来?另外,我认为通过将包含多个元素的本地作为参数传递给使用args 的程序,您会遇到更大的问题(尽管我可能是错的)。我怀疑这不会按照您的意愿将参数传递给程序。
  • wgtname 是我想给程序将创建的变量的名称。这不是预定义的变量,而是将要创建的变量。
  • 好吧,不管怎样,我认为当你执行mydfl "'wgtname'" 'xvars' 'outcome' Stata 将通过mydfl wtid age i.state2 ... rural wage。而你的程序只需要 3 个args,所以只有wtid agei.state2 会被使用。所以在程序中当你运行logit groupref 'xvars'时,实际执行的命令将是logit groupref age
  • 当您调用mydfl 时,您需要将'xvars' 括在双引号中,以便xvars 的所有元素作为单个参数传递给程序。
  • 谢谢。这确实是问题之一。然而,即使是现在,该程序仍在产生错误。我已经更新了问题以反映它产生的新错误。

标签: stata statistics-bootstrap


【解决方案1】:

引导失败的一个原因是程序创建了永久变量。

这是第一个generate 声明:

  gen groupref=(group==1);

bootstrap首先在整个数据集上运行程序,并添加了变量groupref。接下来,绘制第一个引导副本,并在该副本上运行程序。 generate 语句现在将静默失败,因为变量已经存在。因此,整个程序将失败,唯一的指示将是 Stata 结果中的“X”。

解决方案是将generateegenpredict 创建的所有变量指定为临时 变量。在分析每个复制后,这些将被删除。用法如下:

tempvar groupref;
gen `groupref' = (group==1);

tempvar 是一个本地宏,可以获取名称列表。类似的宏是tempnametempfile

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-14
    • 1970-01-01
    • 2016-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-22
    相关资源
    最近更新 更多