-1

ロジスティック回帰の従属変数 (私のデータ セットでは: dat$admit) を、使用可能なすべての変数、ペア、およびトリオ (3 つの独立変数) で実行したいと思います。各回帰は、異なる独立変数と従属変数で行われます。私が取得したい結果は、各回帰要約のリストです: coeff,p-value ,AUC,CI 95%. 以下に提出されたデータセットを使用すると、7 つの回帰があるはずです。

dat$admit vs dat$female
dat$admit vs dat$apcalc
dat$admit vs dat$num
dat$admit vs dat$female + dat$apcalc
dat$admit vs dat$female + dat$num
dat$admit vs dat$apcalc + dat$num
dat$admit vs dat$female + dat$apcalc + dat$num

サンプル データ セットを次に示します (dat$admit はロジスティック回帰従属変数です)。

dat <- read.table(text = " female  apcalc    admit       num
0        0        0         7
0        0        1         1
0        1        0         3
0        1        1         7
1        0        0         5
1        0        1         1
1        1        0         0
1        1        1         6",header = TRUE)

@marek のコメントによると、出力は次のようになります (女性のみの場合、および female & apcalc から): # Intercept Estimate P-Value (Intercept) P-Value (Estimate) AUC 0.5

女性+apcalc 0.000000e+00 0.000000e+00 1 1 0.5

@David Arenburg が書いた、統計を生成する良いコードがありますが、ペアとトリオのモデル作成はありません。そのため、モデル作成を追加する方法を知りたいです。ここに David Arenburg のコードがありますか?

library(caTools)
ResFunc <- function(x) {
  temp <- glm(reformulate(x,response="admit"), data=dat,family=binomial)
  c(summary(temp)$coefficients[,1], 
    summary(temp)$coefficients[,4],
    colAUC(predict(temp, type = "response"), dat$admit))
}

temp <- as.data.frame(t(sapply(setdiff(names(dat),"admit"), ResFunc)))
colnames(temp) <- c("Intercept", "Estimate", "P-Value (Intercept)", "P-Value (Estimate)", "AUC")
temp

#          Intercept      Estimate P-Value (Intercept) P-Value (Estimate) AUC
# female 0.000000e+00  0.000000e+00                   1                  1 0.5
# apcalc 0.000000e+00  0.000000e+00                   1                  1 0.5
# num    5.177403e-16 -1.171295e-16                   1                  1 0.5

このリストを作成する方法はありますか? ありがとう、ロン

4

1 に答える 1

1

簡単な解決策は、モデルのリストを手動で作成することです。

results <- list(
    "female"           = glm(admit~female         , family=binomial, dat)
    ,"apcalc"          = glm(admit~apcalc         , family=binomial, dat)
    ,"num"             = glm(admit~num            , family=binomial, dat)
    ,"female + apcalc" = glm(admit~female + apcalc, family=binomial, dat)
    ,"female + num"    = glm(admit~female + num   , family=binomial, dat)
    ,"apcalc + num"    = glm(admit~apcalc + num   , family=binomial, dat)
    ,"all"             = glm(admit~female + apcalc + num, family=binomial, dat)
)

lapply次に、モデルのリストを ing してモデルを確認できます。

lapply(results, summary)

またはより高度な (係数統計):

require(plyr)
ldply(results, function(m) {
    name_rows(as.data.frame(summary(m)$coefficients))
})

同様の方法で、必要なすべての情報を抽出できます。必要な統計を抽出する関数を作成するだけで、glm モデルを引数として取ります。

get_everything_i_want <- function(model) {
    #... do what i want ...
    # eg:
    list(AIC = AIC(model))
}

次に、各モデルに適用します。

lapply(results, get_everything_i_want)
# $female
# $female$AIC
# [1] 15.0904
# $apcalc
# $apcalc$AIC
# [1] 15.0904
# $num
# $num$AIC
# [1] 15.0904
# $`female + apcalc`
# $`female + apcalc`$AIC
# [1] 17.0904
# $`female + num`
# $`female + num`$AIC
# [1] 17.0904
# $`apcalc + num`
# $`apcalc + num`$AIC
# [1] 17.0904
# $all
# $all$AIC
# [1] 19.0904
于 2014-05-13T19:54:50.127 に答える