3

複数の妥当な値を持つデータ フレームを処理する汎用関数を作成しようとしています。私が望むのは、数式を関数に渡して、次のような回帰を実行することです。

f <- MRPCM ~ DSEX + IEP + ELL3 + SDRACEM + PARED

変数はMRPCM実際にはデータ フレームに存在しません。代わりに、 、 、 、 、 の 5 つの変数MRPCM1MRPCM2存在MRPCM3MRPCM4ますMRPCM5。私がやりたいことは、数式 (fここ) を繰り返して更新し、5 つの数式を作成することです。これはできますか?このupdate.formula機能は、一度に左側または右側全体で機能するようです。また、この例では、変更したい変数が従属変数であるため、update(f, MRPCM1 ~ .)機能することにも注意してください。ただし、変数が式のどこに現れるかはわかりません。

例えば:

f <- MRPCM + DSEX ~ IEP + ELL3 + SDRACEM + PARED

update.formula(f, as.formula('MRPCM1 ~ .'))

結果は次のようになります (現在、DSEX が欠落していることに注意してください)。

MRPCM1 ~ IEP + ELL3 + SDRACEM + PARED

4

1 に答える 1

6

これは、1 つのアプローチのデモンストレーションです。より洗練された実装では、代わりに適合線形モデルを更新する場合がありますが (「参考文献」を参照?update)、それは質問の直接の範囲を超えています。

## Make a reproducible example!!
df <- 
setNames(as.data.frame(matrix(rnorm(96), ncol=8)), 
         c("MRPCM1","MRPCM2","MRPCM3","DSEX","IEP", "ELL3","SDRACEM","PARED"))

## Construct a template formula
f <- MRPCM ~ DSEX + IEP + ELL3 + SDRACEM + PARED

## Workhorse function
iterlm <- function(formula, data) {
    ## Find columns in data matching pattern on left hand side of formula
    LHSpat <- deparse(formula[[2]])
    LHSvars <- grep(LHSpat, names(data), value = TRUE)
    ## Run through matchded columns, repeatedly updating the formula,
    ## fitting linear model, and extracting whatever results you want. 
    sapply(LHSvars, FUN=function(var) {
        uf <- update.formula(f, as.formula(paste(var, "~ .")))
        coef(lm(uf, df))
    })
}

## Try it
iterlm(f, df)
##                  MRPCM1     MRPCM2      MRPCM3
## (Intercept)  0.71638942 -0.3883355  0.22202700
## DSEX        -0.07048994 -0.7478064  0.62590580
## IEP         -0.22716821 -0.2381982  0.12205780
## ELL3        -0.44492392  0.1720344  0.41251561
## SDRACEM      0.21629235  0.4800773  0.02866802
## PARED        0.07885683 -0.2582598 -0.07996121
于 2012-07-16T20:18:16.203 に答える