2

いくつかの変数を含む大規模なデータセットがあります。そのうちの 1 つは、州ごとに 1 ~ 50 でコード化された州変数です。データセットの残りの 27 個の変数 (合計 55 個の変数があります) で 28 個の変数の回帰を実行し、各州に固有のものを実行したいと思います。

つまり、state==1 の観測値に対して、共変量 1、共変量 2、...、共変量 27 で変数 1 の回帰を実行します。次に、状態 2 ~ 50 の変数 1 に対してこれを繰り返し、変数 2、変数 3、...、変数 28 に対してプロセス全体を繰り返します。

これを行うための正しい R コードを作成したと思いますが、次にやりたいことは、係数を理想的には係数行列に抽出することです。誰かがこれで私を助けてくれますか? これまでに書いたコードは次のとおりです。

for (num in 1:50) {

    #PUF is the data set I'm using

    #Subset the data by states
    PUFnum <- subset(PUF, state==num)

    #Attach data set with state specific data
    attach(PUFnum)

    #Run our prediction regression
    #the variables class1 through e19700 are the 27 covariates I want to use
    regression <- lapply(PUFnum,  function(z) lm(z ~ class1+class2+class3+class4+class5+class6+class7+
                                                     xtot+e00200+e00300+e00600+e00900+e01000+p04470+e04800+
                                                     e09600+e07180+e07220+e07260+e06500+e10300+
                                                     e59720+e11900+e18425+e18450+e18500+e19700))

    Beta <- lapply(regression, function(d) d<- coef(regression$d))


    detach(PUFnum)
}
4

2 に答える 2

5

これは、@hadley によるパッケージSplit-Apply-Combineを使用して対処できる、古典的な問題の別の例です。plyrあなたの問題では、あなたがしたい

  1. 状態ごとにデータ フレームを分割する
  2. 各サブセットに回帰を適用する
  3. 係数をデータ フレームに結合します。

Cars93ライブラリで利用可能なデータセットで説明しMASSます。horsepower国のとenginesizeに基づくの関係を理解することに関心がoriginあります。

# LOAD LIBRARIES
require(MASS); require(plyr)

# SPLIT-APPLY-COMBINE
regressions <- dlply(Cars93, .(Origin), lm, formula = Horsepower ~ EngineSize)
coefs <- ldply(regressions, coef)

   Origin (Intercept) EngineSize
1     USA    33.13666   37.29919
2 non-USA    15.68747   55.39211

編集。あなたの例では、式をPUFCars93、にstate置き換えますOriginfm

于 2012-01-26T20:35:17.047 に答える
1

コードを少しクリーンアップしました:

fm <- z ~ class1+class2+class3+class4+class5+class6+class7+
          xtot+e00200+e00300+e00600+e00900+e01000+p04470+e04800+
          e09600+e07180+e07220+e07260+e06500+e10300+
          e59720+e11900+e18425+e18450+e18500+e19700

PUFsplit <- split(PUF, PUF$state)
mod <- lapply(PUFsplit, function(z) lm(fm, data=z))

Beta <- sapply(mod, coef)

必要に応じて、これをすべて1行にまとめることもできます。

Beta <- sapply(lapply(split(PUF, PUF$state), function(z) lm(fm, data=z)), coef)
于 2012-01-26T06:47:56.077 に答える