【问题标题】:Exclude one fixed variable in "for" loop在“for”循环中排除一个固定变量
【发布时间】:2016-07-19 15:47:21
【问题描述】:

例如,我有 1 个响应变量 Y 和 5 个预测变量 X1-X5。 我正在尝试拟合 glm 模型并计算与模型中固定的X5 的偏差差异,如下所示

ind_var <- names(dat)[substr(names(dat),1,1)=="X"]
results <- data.frame()
for (i in ind_var)
{
glm1 <- glm(as.formula(paste("Y~X5+",i)), family=binomial, data=dat)
dDeviance <- with(glm1,(null.deviance-deviance))
df <- data.frame(ind_var=i, diff=dDeviance)
results <- rbind(results, df)
}

问题:

1) 循环选择i时如何排除X5

2) 如何在模型中插入固定变量(这里是X5)。我注意到当我将X5 粘贴到上面的模型中时,结果不正确。在这里,我手动检查带有粘贴功能的模型,您可以看到只有 1 个系数为 99 df。我相信Y~X5+X1 的正常模型我应该有 3 个系数(包括截距)和 97 df

mod1 <- glm(as.formula(paste("Y~X5+",X1)), family=binomial, data=dat)
mod1 

Call:  glm(formula = as.formula(paste("Y~X5+", X1)), family = binomial, 
data = dat)

Coefficients:
 X5  
0.02581  

Degrees of Freedom: 100 Total (i.e. Null);  99 Residual
Null Deviance:      138.6 
Residual Deviance: 138.6        AIC: 140.6

非常感谢任何建议。

【问题讨论】:

  • 这对我来说并不完全清楚。 ind_var 是包含变量名的变量吗?如果是这样,回答问题 1,你不能通过从向量中删除 X5 来解决这个问题吗?对于问题2,为什么它是错误的?你能在这里展示一下结果和预期的结果吗?
  • 感谢 @Laterow 的 cmets。我在上一篇文章中添加了一些信息。关于 ind_var,我实际上也需要对其他变量重复此操作(其他 X1/X2/X3/X4 作为固定变量)。但是,如果我找不到解决方案,我只能手动删除它。

标签: r for-loop


【解决方案1】:

for loop 的开头添加if 条件怎么样?

for(i in 1:10){
    if(i == 5) next

    print(i)
}

如果i == 5,则跳到下一个i

在您的情况下,将其替换为 X5

或者,为什么不使用:

ind_var <- 1:10

for(i in ind_var[-5]){
            print(i)
        }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多