【问题标题】:How can I run logistic regression loop that will run across all Independent variables , pairs and trios如何运行将跨所有自变量、对和三元组运行的逻辑回归循环
【发布时间】:2014-05-13 07:04:58
【问题描述】:

我想使用所有可用变量、对和三元组(3 个独立变量)运行逻辑回归的因变量(在我的数据集中它是:dat$admit),每个回归都有不同的自变量与因变量.我想要返回的结果是一个连续的每个回归摘要的列表:系数、p 值、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 的评论,输出应该是这样的(仅针对女性以及来自女性和 apcalc ): # Intercept Estimate P-Value (Intercept) P-Value (Estimate) AUC # 女性 0.000000e+00 0.000000e+00 1 1 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

知道如何创建此列表吗?谢谢,罗恩

【问题讨论】:

  • 你能发布你想要的结果应该是什么样子吗?说模型:femalefemale+numfemale+num+apcalc?
  • 另外:reformulate 将字符向量作为参数,因此您可以在调整后运行ResFunc(c("female","num"))

标签: r loops logistic-regression p-value auc


【解决方案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)
)

然后您可以通过lapplying 在模型列表中检查模型:

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

【讨论】:

  • 嗨 Marek,感谢您的回答,我正在寻找可以运行所有组合但不能手动运行的东西。 David Arenburg 编写的代码效果很好,但没有创建模型。这是链接:stackoverflow.com/questions/22742887/…
猜你喜欢
  • 2014-05-09
  • 2014-04-12
  • 2021-07-12
  • 1970-01-01
  • 1970-01-01
  • 2019-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多