Stata _b []中的估计后命令用于分类变量

时间:2017-02-10 17:14:29

标签: stata

编辑:进一步提供了一个工作示例

ORIGINAL:后估计命令可用于预测因变量的值。下面是一个示例,您可以在其中键入_b [_cons] + _b [x1] * 1 + _b [x2]以获得Y的实际值。对于Stata上的大多数在线示例,这些值可以是假人或连续的。如果我有一个难以手动转换为多个虚拟变量(如52周)的分类变量怎么办?我是否可以保留所有分类变量并仍然通过告诉Stata选择正确的值来运行如下所示的后估计命令?

regress write female read

      Source |       SS       df       MS              Number of obs =     200
-------------+------------------------------           F(  2,   197) =   77.21
       Model |  7856.32118     2  3928.16059           Prob > F      =  0.0000
    Residual |  10022.5538   197  50.8759077           R-squared     =  0.4394
-------------+------------------------------           Adj R-squared =  0.4337
       Total |   17878.875   199   89.843593           Root MSE      =  7.1327

------------------------------------------------------------------------------
       write |      Coef.   Std. Err.      t    P>|t|     [95% Conf. Interval]
-------------+----------------------------------------------------------------
      female |   5.486894   1.014261     5.41   0.000      3.48669    7.487098
        read |   .5658869   .0493849    11.46   0.000      .468496    .6632778
       _cons |   20.22837   2.713756     7.45   0.000     14.87663    25.58011
------------------------------------------------------------------------------
and then ask

gen _b[_cons] + _b[female]*1 + _b[read]*52   

display _b[_cons] + _b[female]*1 + _b[read]*52
55.141383

工作示例:为了说明我的观点,这里有一个小数据样本,其中包含一个分类变量(pack),一个连续变量(price)和一个二分指示符({{1} })。运行回归后,我想运行一个可以生成预测值的后估计命令(如type或简单predict)。为此目的,到目前为止我发现的唯一Stata代码只能使用连续变量和二进制变量来预测y,而不能使用连续变量和二进制变量。您是否知道一个代码可以解决在不将gen转换为多个二进制变量的情况下包含pack的问题?

pack

1 个答案:

答案 0 :(得分:2)

“正确”值并不能立即明确您的意思。 predict使用数据中当前的任何值,并将其乘以相应的系数(假设您使用因子变量表示法)。

但是,margins有一个半文档generate()选项,可以灵活选择协变量值,为您提供个人预测。它可能会给你任何你想要的东西。

以下是使用您的数据的示例:

clear
input  units price pack type
32 4 6 1
2 20 18 1
34 5 6 1
32 8 6 0
29 5 6 0
5 10 12 0
7 10 12 0
1 10 18 0
end

reg units price type i.pack, coefl
predict double yhat1
margins, predict(xb) gen(yhat2) // match predict #1
margins, predict(xb) gen(yhat3) at((asobserved) price type pack) // match predict #2
gen double yhat4=_b[_cons] + _b[price]*price + _b[type]*type + _b[12.pack]*12.pack + _b[18.pack]*18.pack //match predict #3
margins, predict(xb) gen(yhat5) at(price = 5 type=1 pack=6) // choose some values
gen double yhat6=_b[_cons] + _b[price]*5 + _b[type]*1 + _b[12.pack]*0 + _b[18.pack]*0 // yhat5 by hand 
list yhat*, clean noobs

前四种方法的预测都是相同的;第五和第六个将与前四个不同,因为我们正在修改特定值的所有协变量:

. list yhat*, clean noobs

        yhat1      yhat21      yhat31       yhat4      yhat51       yhat6  
    32.773585   32.773585   32.773585   32.773585   32.764151   32.764151  
    2.4622642   2.4622642   2.4622642   2.4622642   32.764151   32.764151  
    32.764151   32.764151   32.764151   32.764151   32.764151   32.764151  
    30.716981   30.716981   30.716981   30.716981   32.764151   32.764151  
    30.745283   30.745283   30.745283   30.745283   32.764151   32.764151  
            6           6           6           6   32.764151   32.764151  
            6           6           6           6   32.764151   32.764151  
    .53773585   .53773585   .53773585   .53773585   32.764151   32.764151  

请参阅help margins generatehelp undocumented了解详情。