【问题标题】:How to use sapply to perform a linear regression on a dataset如何使用 sapply 对数据集执行线性回归
【发布时间】:2016-01-17 22:06:57
【问题描述】:

我正在尝试使用 sapply 来简化我的代码,以运行一个执行线性回归的函数,在我导入为 .csv 的数据集的所有列上绘制图像并将图像另存为 .pdf。基本上我有一列包含数字,我想针对第一列运行所有其他列的线性回归。到目前为止,这是我的代码:

library(readr)
library(ggplot2)

data <- read_csv("~/Desktop/tertileandvolume.csv", col_name = TRUE)
data <- na.omit(data)

run_all <- function(x){
    lm(data[,1] ~ x)
    summary(lm(data[,1] ~ x))
    ggplot(data, aes(x=names(data)[1], y=names(data)[x])) +
    geom_point(shape=1) + geom_smooth(method=lm, se=FALSE) + ggtitle("x") + labs(x=names(data)[1],y=names(data)[x])
    ggsave(path="~/Desktop/")
}

sapply(data, 2, run_all)

另外,我如何使用列名来生成绘图的轴标签?然后使用相同的标签将其保存在 ggsave 中?我不太熟悉使用 sapply 或完成这项工作所需的语法。

【问题讨论】:

  • 你试过lapply(data[,-1], run_all) 吗? -1 是为了防止您的响应变量被用于自身。不知道y=names(data)[x] 是什么意思。
  • 我想使用列名作为轴标签。

标签: r ggplot2 statistics linear-regression sapply


【解决方案1】:

Sapply 没有三个参数——你把它和 apply 混淆了。无论如何,在这里你不应该使用 (s)apply 而只是一个 for 循环:

for (col_name in names(data)[,-1]) run_all (data[,col_name])

如果您想知道列名,只需传递它而不是整个列:

for (col_name in names(data)[-1]) run_all (col_name)

run_all <- function(col_name){
  x <- data[, col_name]
  l <- lm (data[,1] ~ x) # please note the rest of your code has more error!!
  summary (l)
  # gg <-ggplot ... #!!
  # etc

【讨论】:

    【解决方案2】:

    我认为你可以使用lapply(names(data)[-1], run_all) 我在你的函数下面复制并粘贴,还没有尝试,因为我没有你的数据集(我评论了一些更改):

    run_all <- function(x, data){
        lm1 <- lm(data[,1] ~ data[,x]) # save the results
        summary(lm1)                   # so you don't have to do it here again
        ggplot(data, aes(x=names(data)[1], y=x)) +
               geom_point(shape=1) + geom_smooth(method=lm, se=FALSE) + 
               ggtitle("x") + labs(x=names(data)[1],y=x)
        ggsave(path=paste0("~/Desktop/",x))  # just to prevent the same filename
    }
    
    lapply(names(data)[-1], run_all, data)
    

    【讨论】:

      猜你喜欢
      • 2016-12-21
      • 2019-05-12
      • 2021-01-28
      • 2017-02-04
      • 2020-06-11
      • 2022-10-12
      • 1970-01-01
      • 2021-01-05
      • 2015-10-03
      相关资源
      最近更新 更多