2014-08-30 89 views
3

Boxcox模型我想用在Stata manual(第5页)中描述的步骤,我的代码boxcox后的预测选项匹配在Stata 13。预测在Stata

以下是我使用的样例代码:

sysuse auto,clear 
local indepvar weight foreign length 
qui boxcox price `indepvar' ,model(lhsonly)lrtest 
qui predict yhat1 
qui predict resid1, residuals 


//yhat2 and resid2 computed using the procedure described in Stata manual 
set more off 
set type double 
mat coef=e(b) 
local nosvar=colsof(coef)-2 

qui gen constant=1 
local varname weight foreign length constant 
local coefname weight foreign length _cons 

//step 1: compute residuals first 
forvalues k = 1/`nosvar'{ 
local varname1 : word `k' of `varname' 
local coefname1 : word `k' of `coefname' 
qui gen xb`varname1'=`varname1'*_b[`coefname1'] 
} 
qui egen xb=rowtotal(xb*) 
qui gen resid=(price^(_b[theta:_cons]))-xb 

//step 2: compute predicted value 

qui gen yhat2=. 
local noobs=_N 
local theta=_b[theta:_cons] 
forvalues j=1/`noobs'{ 
qui gen temp`j'=. 
forvalues i=1/`noobs'{ 
qui replace temp`j'=((`theta'*(xb[`j']+resid[`i']))+1)^(1/`theta') if _n==`i' 
} 
qui sum temp`j' 
local tempmean`j'=r(mean) 
qui replace yhat2=`tempmean`j'' if _n==`j' 
drop temp`j' 
} 
drop resid 
qui gen double resid2=price-yhat2 



sum yhat* resid* 

    Variable |  Obs  Mean Std. Dev.  Min  Max 
-------------+-------------------------------------------------------- 
     yhat1 |  74 6254.224 2705.175 3428.361 21982.45 
     yhat2 |  74 1.000035 8.13e-06 1.000015 1.000054 
     resid1 |  74 -88.96723 2094.162 -10485.45 6980.013 
     resid2 |  74 6164.257 2949.496  3290  15905 

注:yhat1和resid1基于塔塔predict,而yhat2和resid2是基于我的示例代码。需要进行比较以确保我计算的边际效应是正确的(margins不会计算boxcox后的边际效应)。

回答

4

您对第一个残差的定义是错误的,因为您错过了本手册第3页上y ^(\ lambda)的定义。请参阅boxcox本身的手册条目中的方法和公式部分。

翻译成你的问题,在该行

qui gen resid=(price^(_b[theta:_cons]))-xb 

术语

price^(_b[theta:_cons]) 

应该是:

(price^(_b[theta:_cons])-1)/_b[theta:_cons] 
+0

非常感谢你。它现在有效。 – Metrics 2014-08-31 13:21:43