在R中重建Stata回归循环的最佳途径

时间:2016-12-07 20:56:00

标签: r stata

我一直在寻找与Stata中众所周知的模式等效的循环过程,如线性回归。以下是Dehejia和Wahba(1999)的一个例子

local data "nswre74 cps1re74 cps3re74 "
local datashort "cps1re74 cps3re74"

local spec1 ""
local spec2 "age age2 ed black hisp nodeg"
local spec3 "re75"
local spec4 "re75 age age2 ed black hisp nodeg"
local spec5 "re74 re75 age age2 ed black hisp nodeg"
local spec2a "age age2 ed black hisp nodeg married"
local spec4a "re75 age age2 ed black hisp nodeg married"
local spec5a "re74 re75 age age2 ed black hisp nodeg married"

foreach set in `data' {
    local lctr = 0
    u `path'/`set', clear
    forvalues t = 1/5 {
        local ++lctr
        reg re78 treat `spec`t''
            local b = _b[treat]
            local se = _se[treat]
            local b = round(`b',1)
            local se = round(`se',1)
            local line`lctr' "`line`lctr''&    `b' &   (`se')  "
        if `t' == 2 | `t' == 4 | `t' == 5 {
            local ++lctr
            reg re78 treat `spec`t'a'
            local b = _b[treat]
            local se = _se[treat]
            local b = round(`b',1)
            local se = round(`se',1)
            local line`lctr' "`line`lctr''&    `b' &   (`se')  "
        }
    }
}'

我不需要重新创建整个结构,但想知道这个功能是否有R模拟:

  reg re78 treat `spec`t'' 

在这里,Stata运行一个线性回归,使用't'在for循环中使用编程可互换的一组共变量。我如何在R中复制这样的东西?我试过这样的事情:

spec1 <- ""
spec2 <- "age+age2+ed+black+hisp+nodeg"
spec3 <- "re75"
spec4 <- "re75+age+age2+ed+black+hisp+nodeg"
spec5 <-"re74+re75+age+age2+ed+black+hisp+nodeg"
spec2a <- "age+age2+ed+black+hisp+nodeg+married"
spec4a <- "re75+age+age2+ed+black+hisp+nodeg+married"
spec5a <- "re74+re75+age+age2+ed+black+hisp+nodeg+married"

for(i in 1:5){
fla <- as.formula(paste("y ~", as.formula(paste0("spec", as.character(i))), collapse=""))
lm(fla, data = data)
}

但是由于显而易见的原因无济于事。

1 个答案:

答案 0 :(得分:1)

specs  = list("1",
              "age+age2+ed+black+hisp+nodeg",
              "re75",
              "re75+age+age2+ed+black+hisp+nodeg",
              "re74+re75+age+age2+ed+black+hisp+nodeg",
              "age+age2+ed+black+hisp+nodeg+married",
              "re75+age+age2+ed+black+hisp+nodeg+married",
              "re74+re75+age+age2+ed+black+hisp+nodeg+married"
)

for(each in specs){
    fla = as.formula(paste0("y ~", each))
    print(lm(fla, data = data))
}