我正在尝试设计一个foreach循环,它将回归两个变量time (x)和y,但是通过删除每年的当前变量来检查删除当前时间(x变量)如何影响回归的Rsq。然后,我想将每个回归的R2存储在一个新列中,这样我就可以在删除该给定时间时找到哪个回归具有最高的R2。下面是我所拥有的:
foreach x in varlist year {
quietly regress y year
gen Rsq = e(r2)
}我不习惯Stata语法,我发现它很难,谢谢!
发布于 2021-11-14 02:25:35
从你的澄清来看,我认为这会达到你的目的。请注意,foreach x of varlist year {不会访问year的不同值。这要求Stata循环遍历仅包含year的varlist;您需要的是levelsof命令。
// Create sample data
clear all
set seed 2021
set obs 5
gen year = _n + 2000
expand 200
gen y = rnormal() + 3*year
// for loop
levelsof year, local(years)
foreach yr of local years {
disp "The year omitted is `yr'"
reg y year if year != `yr'
gen Rsq_omit_`yr' = e(r2)
}如果希望值包含在一个变量中,其中R平方与省略的年份对齐,则可以执行以下操作:
gen Rsq = .
levelsof year, local(years)
foreach yr of local years {
disp "The year omitted is `yr'"
reg y year if year != `yr'
replace Rsq = e(r2) if year == `yr'
}
. tabdisp year, c(Rsq)
----------------------
year | Rsq
----------+-----------
2001 | .91367307
2002 | .95367692
2003 | .95636972
2004 | .95240147
2005 | .92448613
----------------------https://stackoverflow.com/questions/69958353
复制相似问题