我在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
的原因。如果您有开发可以使用而不考虑缺失变量的通用代码的建议,请提供建议。
答案 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
应该吃错误。