2014-08-30 130 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