Stata:使用foreach(或forvalues)比较因子变量的系数

时间:2014-04-25 17:59:40

标签: stata

我在OLS回归中使用序数自变量作为分类变量,使用Stata中的因子变量技术(即i.ordinal)。变量可以取0到9之间的整数值,0表示基类。我感兴趣的是测试每个变量的系数是否大于(或小于)成功的系数(即_b[1.ordinal] >= _b[2.ordinal]_b[2.ordinal] >= _b[3.ordinal]等)。我已经开始使用基于FAQ: One-sided t-tests for coefficients的以下伪代码:

foreach i in 1 2 3 5 6 7 8 {
 test _b[`i'.ordinal] - _b[`i+'.ordinal] = 0
 gen sign_`i'`i+' = sign(_b[`i'.ordinal] - _b[`i+'.ordinal])
 display "Ho: i <= i+ p-value = " ttail(r(df_r), sign_`i'`i+'*sqrt(r(F)))
 display "Ho: i >= i+ p-value = " 1-ttail(r(df_r), sign_`i'`i+'*sqrt(r(F)))
}

我想要```i +&#39;表示序列中i的下一个值(因此,如果i为3,那么``i +&#39;为5)。这甚至可能吗?当然,如果您有任何更清晰的建议以这种方式测试系数,请告知。

注意:模型仅使用我的数据集的子样本,而4.ordinal没有观察,这就是我使用foreach而不是forvalues的原因。如果您有开发可以使用而不考虑缺失变量的通用代码的建议,请提供建议。

1 个答案:

答案 0 :(得分:2)

有多种方法可以做到这一点。请注意,创建一个新变量只是为了保持一个常量几乎没有明显的意义。代码未经测试。

forval i = 1/8 {
    local j = `i' + 1
    capture test _b[`i'.ordinal] - _b[`j'.ordinal] = 0
    if _rc == 0 { 
        local sign = sign(_b[`i'.ordinal] - _b[`j'.ordinal])
        display "Ho: `i' <= `j' p-value = " ttail(r(df_r), `sign' * sqrt(r(F)))
        display "Ho: `i' >= `j' p-value = " 1-ttail(r(df_r), `sign' * sqrt(r(F)))
    }
}

capture应该吃错误。