2015-05-19 2 views
0

Я хочу построить доверительные интервалы для некоторых оценок после запуска регрессионной модели.Эффективный интервал определения участка

Поскольку я работаю с очень большим набором данных, мне нужно эффективное решение: в частности, решение, которое не требует от меня sort или save данных. В следующем примере, я сюжет для оценки b1 к b6:

reg y b1 b2 b3 b4 b5 b6 

foreach i of numlist 1/6 { 
    local mean `mean' `=_b[b`i']' `i' 
    local ci `ci' /// 
    (scatteri /// 
    `=_b[b`i'] +1.96*_se[b`i']' `i' /// 
    `=_b[`i'] -1.96 * _se[b`i']' `i' /// 
    ,lpattern(shortdash) lcolor(navy)) 
} 
twoway `ci' (scatteri `mean', mcolor(navy)), legend(off) yline(0) 

Хотя scatteri эффективно участки оценки, я не могу получить границы для доверительного интервала аналогично rcap.

Есть ли лучший способ сделать это?

+0

Я бы посмотрел прямо на 'coefplot' (_Stata Journal_), а затем решил, писать ли самостоятельно. –

+0

Это деталь, но 'foreach i of numlist 1/6' гораздо менее прямая (и для чего она менее эффективна), чем' forval i = 1/6'. –

+0

Вы не можете переделать 'scatteri' в' rcap': см. 'Help twoway'. –

ответ

0

Вот точный код для того, что вам кажется. Пример смехотворный. Это мое личное мнение, что уточнение этого было бы бессмысленным, учитывая очень успешную предыдущую работу за coefplot. Множитель 1,96 применяется только в очень больших выборках.

sysuse auto, clear 
set scheme s1color 

reg mpg weight length displ 

gen coeff = . 
gen upper = . 
gen lower = . 
gen which = . 

local i = 0 
quietly foreach v in weight length displ { 
    local ++i 
    replace coeff = _b[`v'] in `i' 
    replace upper = _b[`v'] + 1.96 * _se[`v'] in `i' 
    replace lower = _b[`v'] - 1.96 * _se[`v'] in `i' 
    replace which = `i' in `i' 
    label def which `i' "`v'", modify 
} 

label val which which 

twoway scatter coeff which, mcolor(navy) xsc(r(0.5, `i'.5)) xla(1/`i', val) /// 
|| rcap upper lower which, lcolor(navy) xtitle("") legend(off) 
+0

Я думал, что рассеяние было быстрее, чем разброс/раска. Однако, используя набор данных наблюдений 1e8, оба наших кода занимают около 30 секунд, поэтому на самом деле нет увеличения скорости для использования рассеяния вместо разброса/rcast. благодаря – Matthew

Смежные вопросы