循环更改变量数量的glm模型

KKL234

我有一个包含1-3个因变量版本和10-15个独立变量的数据集。我想为模型运行glm命令,但希望它为自变量的所有可能组合循环。我从未编写过用于循环的代码,并且想确保正确设置了它。

以下是我的数据框的一小部分。实际数据框为每个变量都有一个明确的名称;不只是“ DepVar1”或“ IndVar1”。

dfPRAC <- structure(list(DepVar1 = c(0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 
1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1), DepVar2 = c(0, 1, 0, 0, 
1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1), 
    IndVar1 = c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 
    0, 0, 0, 1, 0, 0, 0, 1, 0), IndVar2 = c(1, 3, 9, 1, 5, 1, 
    1, 8, 4, 6, 3, 15, 4, 1, 1, 3, 2, 1, 10, 1, 9, 9, 11, 5), 
    IndVar3 = c(0.500100322564443, 1.64241601558441, 0.622735778490702, 
    2.42429812749226, 5.10055213237027, 1.38479786027561, 7.24663629203007, 
    0.5102348706939, 2.91566510995229, 3.73356170379198, 5.42003495939846, 
    1.29312896116503, 3.33753833987496, 0.91783513806083, 4.7735736131668, 
    1.17609362602233, 5.58010703426296, 5.6668754863739, 1.4377813063642, 
    5.07724130837643, 2.4791994535923, 2.55100067348583, 2.41043629522981, 
    2.14411703944206)), .Names = c("DepVar1", "DepVar2", "IndVar1", 
"IndVar2", "IndVar3"), row.names = c(NA, 24L), class = "data.frame")

我当前用于运行单个glm模型的代码是:

RegPRAC <- glm(DepVar1 ~ IndVar1, data=dfPRAC, family=binomial("logit"))
summary(RegPRAC)

我想针对自变量的所有可能组合以及因变量的所有组合运行模型,但是我不确定从哪里开始。我在想类似的东西:

for (i in dfPRAC$IndVar1:dfPRAC$IndVar3) {glm(DepVar1 ~ i, data=dfPRAC, family=binomial("logit")) }

我尝试运行它,但是遇到了几个错误。任何建议,将不胜感激。

卑鄙的

也许是这样的:

dep_vars <- c("DepVar1", "DepVar2") 
ind_vars <- c("IndVar1", "IndVar2", "IndVar3")

# create all combinations of ind_vars
ind_vars_comb <- 
  unlist( sapply( seq_len(length(ind_vars)), 
          function(i) {
               apply( combn(ind_vars,i), 2, function(x) paste(x, collapse = "+"))
          }))

# pair with dep_vars:
var_comb <- expand.grid(dep_vars, ind_vars_comb ) 

# formulas for all combinations
formula_vec <- sprintf("%s ~ %s", var_comb$Var1, var_comb$Var2)

# create models
glm_res <- lapply( formula_vec, function(f)   {
    fit1 <- glm( f, data = dfPRAC, family = binomial("logit"))
    fit1$coefficients <- coef( summary(fit1))
    return(fit1)
})
names(glm_res) <- formula_vec

# get model for specific formula
glm_res[["DepVar1 ~ IndVar1"]] 

# coefficients for var1 ~ var1
coef(glm_res[["DepVar1 ~ IndVar1"]])

# p-values for var1 ~ var2
coef(glm_res[["DepVar1 ~ IndVar2"]])[,"Pr(>|z|)"]

# p-values in a data.frame
p_values <- 
  cbind(formula_vec, as.data.frame ( do.call(rbind,
        lapply(glm_res, function(x) {
          coefs <- coef(x)
          rbind(c(coefs[,4] , rep(NA, length(ind_vars) - length(coefs[,4]) + 1)))
        })
  )))

结果:

                         formula_vec (Intercept)    IndVar1         V3        V4
1                  DepVar1 ~ IndVar1  1.00000000 1.00000000         NA        NA
2                  DepVar2 ~ IndVar1  0.65526203 0.29437334         NA        NA
3                  DepVar1 ~ IndVar2  0.29307777 0.19121066         NA        NA
4                  DepVar2 ~ IndVar2  0.07298241 0.03858791         NA        NA
5                  DepVar1 ~ IndVar3  0.99950535 0.99940963         NA        NA
6                  DepVar2 ~ IndVar3  0.52105212 0.44715614         NA        NA
7          DepVar1 ~ IndVar1+IndVar2  0.31112860 0.76310468 0.18416266        NA
8          DepVar2 ~ IndVar1+IndVar2  0.06488501 0.08833369 0.03031766        NA
9          DepVar1 ~ IndVar1+IndVar3  0.99952006 0.99999188 0.99940957        NA
10         DepVar2 ~ IndVar1+IndVar3  0.38508258 0.29593637 0.45010697        NA
11         DepVar1 ~ IndVar2+IndVar3  0.28167430 0.15753070 0.54363164        NA
12         DepVar2 ~ IndVar2+IndVar3  0.22644873 0.04654188 0.84059019        NA
13 DepVar1 ~ IndVar1+IndVar2+IndVar3  0.27858393 0.71600105 0.14812808 0.5222330
14 DepVar2 ~ IndVar1+IndVar2+IndVar3  0.15634739 0.08611677 0.02889574 0.7449513

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

For循环不更改变量

来自分类Dev

每次循环更改变量

来自分类Dev

Bash for循环-更改变量名称

来自分类Dev

在while循环内更改变量

来自分类Dev

每次循环更改变量数据

来自分类Dev

用循环更改变量值

来自分类Dev

在 shell 脚本循环中更改变量

来自分类Dev

在Java中根据循环顺序更改变量

来自分类Dev

通过for循环在UNIX中动态更改变量名

来自分类Dev

更改变量值并在循环后将其推送

来自分类Dev

在While循环中更改变量值

来自分类Dev

在for-next的每个循环中更改变量?

来自分类Dev

Excel VBA,用于更改变量并粘贴其结果的for循环

来自分类Dev

在while循环中更改变量的整数部分jQuery

来自分类Dev

Javascript在foreach循环中更改变量名称

来自分类Dev

UiAutomator更改变量

来自分类Dev

更改变量的值

来自分类Dev

如何在每次循环时更改变量的函数进行循环,直到使用所有变量?

来自分类Dev

为什么我在 Javascript 中的 for 循环没有改变变量数量?

来自分类Dev

循环变量的bash不改变

来自分类Dev

根据其数量改变 nummrec 变量

来自分类Dev

更改变量onclick的值

来自分类Dev

跨方法更改变量

来自分类Dev

在类中更改变量

来自分类Dev

JS无法更改变量

来自分类Dev

如何更改变量onclick

来自分类Dev

根据断点更改变量

来自分类Dev

复制对象,更改变量

来自分类Dev

更改变量onclick的值