clear
set seed 1
set obs 1000
// Generate random variable y
generate y = rnormal()
// Generate 50 random variables x
forvalues i = 01/50 {
generate x`i' = rnormal()
}
// Model 1: Regress y on the x's
quietly regress y x1-x50
estimates store model1
coefplot model1, xline(0) xscale(alt) ylabel(, labsize(*.7)) ///
xtitle("Regression weights and 90% CI's", size(*.8)) levels(90) ///
xlabel(, format(%6.2f) labsize(*.8)) ///
title("Model 1") ysize(8) xsize(3) ///
drop(_cons) msymbol(o) name(model1, replace)
// Identify variables significant at 10% level
forvalues i = 1/50 {
local t = _b[x`i'] / _se[x`i']
local p = 2 * ttail(e(df_r), abs(`t'))
if `p' <= .10 {
local significant10 `significant10' x`i'
}
di "x`i'" _skip(5) `t' _skip(5) `p' _skip(5) "`significant10'"
}
// Model 2: Regress y on the x's significant at the 10 per cent level
quietly regress y `significant10'
estimates store model2
coefplot model2, xline(0) xscale(alt) ylabel(, labsize(*.7)) ///
xtitle("Regression weights and 90% CI's", size(*.8)) levels(90) ///
xlabel(, format(%6.2f) labsize(*.8)) ///
title("Model 2") ysize(8) xsize(3) ///
drop(_cons) msymbol(o) name(model2, replace)
// Identify variables significant at 25% level
estimates restore model1
forvalues i = 1/50 {
local t = _b[x`i'] / _se[x`i']
local p = 2 * ttail(e(df_r), abs(`t'))
if `p' <= .25 {
local significant25 `significant25' x`i'
}
di "x`i'" _skip(5) `t' _skip(5) `p' _skip(5) "`significant25'"
}
// Model 3: Regress y on the x's significant at the 25 per cent level
quietly regress y `significant25'
estimates store model3
coefplot model3, xline(0) xscale(alt) ylabel(, labsize(*.7)) ///
xtitle("Regression weights and 90% CI's", size(*.8)) levels(90) ///
xlabel(, format(%6.2f) labsize(*.8)) ///
title("Model 3") ysize(8) xsize(3) ///
drop(_cons) msymbol(o) name(model3, replace)
graph combine model1 model2 model3, row(1) xcommon
Mar 16, 2016
Selection of regression predictors
Labels:
coefplot,
estimates restore,
forvalues,
local,
p-values,
rnormal(),
Simulation,
ttail()
