我正在尝试boxcox
使用Stata手册(第5页)中介绍的步骤在Stata 13中将预测选项与我的代码进行匹配。
以下是我使用的示例代码:
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基于Stata predict
,而yhat2和resid2基于我的示例代码。需要进行比较以确保我计算的边际效应正确(margins
不计算之后的边际效应boxcox
)。
您对第一个残差的定义是错误的,因为您错过了《手册》第3页上的y ^(\ lambda)的定义。有关boxcox本身,另请参见“手册”条目中的“方法和公式”部分。
翻译成你的问题,就行
qui gen resid=(price^(_b[theta:_cons]))-xb
期限
price^(_b[theta:_cons])
应该:
(price^(_b[theta:_cons])-1)/_b[theta:_cons]
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句