2016-12-07 7 views
0

私は、線形回帰のようなループ処理のためのStataのよく知られたパターンに相当するものを探していました。ここで私は、再作成した構造全体を必要としませんが、この機能にRアナログがあるかどうかを知りたいDehejiaとWahba(1999)Stataの回帰ループを再作成する最良の方法R

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') " 
     } 
    } 
}' 

からの例です:

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) 
} 

+2

各仕様を文字ベクトルとしてリストに格納します。次に、式を構築するために「再定式化」を使用してリストを「適用」します。結果として生じる回帰モデルは、簡単で組織的なアクセスのためのリストに格納されます。必要に応じて、リストに名前を追加し、 'paste0'を使用して' for'ループ内のリスト要素を呼び出すことができます(結果をリストに保存します)。これはStataメソッドに似ています。 – lmo

答えて

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)) 
} 
関連する問題