【问题标题】:Logistic Regression in R using a loop to save codeR中的逻辑回归使用循环来保存代码
【发布时间】:2021-09-26 17:34:57
【问题描述】:

使用 R 对波士顿犯罪数据集进行一些逻辑回归。 这段代码工作得很好:

#################################

library(MASS)
head(Boston)
?Boston

plot(Boston$zn, Boston$crim) #gives scatter plot
lm(formula=Boston$crim~Boston$zn, data=Boston) #gives slope and intercept of best fit line
lm.Boston <-lm(formula=Boston$crim~Boston$zn, data=Boston) #saves information as lm.Boston
abline(lm.Boston) #plots best fit line Adds on to existing plot
abline(v=mean(Boston$zn),col='red') #plots mean for crim
abline(h=mean(Boston$crim),col='red') #plots mean for zn
summary(Boston$zn)

###############################

但我必须将 $zn 替换为 13 个其他变量值,并且我试图在循环中执行此操作,以避免重复代码块 13 次!

绑定这个,但是出错了

for (i in 2:ncol(Boston)){
   clname <- colnames(Boston)[i]
   predictor <- paste('Boston$',clname,sep="")
   print(predictor)
   plot(eval(predictor), Boston$crim) #gives scatter plot
# lm(formula=Boston$crim~predictor, data=Boston) #gives slope and intercept of best fit line
# lm.Boston <-lm(formula=Boston$crim~predictor, data=Boston) #saves information as lm.Boston
# abline(lm.Boston) #plots best fit line Adds on to existing plot
# abline(v=mean(predictor),col='red') #plots mean for crim
# abline(h=mean(Boston$crim),col='red') #plots mean for clname

}

当我打印出预测变量时,它似乎是正确的,但第一个绘图语句给出了错误(注释掉其余代码以尝试修复此错误。

这是我得到的错误:

[1] xy.coords(x, y, xlabel, ylabel, log) 中的“Boston$zn”错误:“x” 和'y'长度不同

【问题讨论】:

    标签: r


    【解决方案1】:

    您可以将列名存储在单独的列表中,然后对其进行迭代。或者您可以直接在for 循环中使用它。我已将其存储在单独的列表中。

    之后,您需要使用paste0 添加正确的标签:

    library(MASS)
    columns_boston <- colnames(Boston)[2:ncol(Boston)]
    
    for (i in columns_boston){
      predictor <- Boston[,i]
      print(predictor)
      plot(predictor, Boston$crim, xlab=paste0(i), ylab=paste0('crim')) #gives scatter plot
      lm(formula=Boston$crim~predictor, data=Boston) #gives slope and intercept of best fit line
      lm.Boston <-lm(formula=Boston$crim~predictor, data=Boston) #saves information as lm.Boston
      abline(lm.Boston) #plots best fit line Adds on to existing plot
      abline(v=mean(predictor),col='red') #plots mean for crim
      abline(h=mean(Boston$crim),col='red') #plots mean for clname
    }
    
    

    最后一列的示例输出:

    您可以根据需要删除ylab

    【讨论】:

    • 太棒了!非常感谢。
    • 很高兴它有帮助。还有一件事,在 StackOverflow 中感谢的方式是如果它解决了您的问题,请接受答案。 :-)
    • 我该怎么做?
    • @BillMoran 每个答案都有一个支持和勾选选项,您可以单击它。详情:stackoverflow.com/help/someone-answers
    【解决方案2】:

    你想做什么(13个不同的图表)你可以这样做

    library(tidyverse)
    library(MASS)
    
    plotVar = function(data, name) data %>% ggplot(aes(crim, val))+
      geom_point()+
      stat_smooth(formula =y~x, method="glm")+
      ylab(name)
    
    Boston %>% pivot_longer(
      -crim, names_to = "var", values_to = "val"
    ) %>% group_by(var) %>% 
      nest() %>% 
      group_map(~plotVar(.x$data[[1]], .y))
    

    第一个情节 最后的情节 然而,这不是逻辑回归! 您必须准确指定您想要实现的目标。

    【讨论】:

    • 感谢您的帮助。你是对的,这是线性回归,我现在正在研究逻辑回归模型,也需要这种技术。
    • 好的。如果您想研究逻辑回归,请注意我使用的技巧。在nest 命令之后,您有一个tibble 和一个名为data 的内部tibble。您可以将其用作glm 函数的数据,就像我使用它来创建图表一样。但是,我认为最好使用 glm 模型的所有变量,然后使用 step 函数仅选择那些对您的因变量有显着影响的变量。
    猜你喜欢
    • 1970-01-01
    • 2012-11-05
    • 2014-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多