如何在一个数据集中运行许多线性回归/相关

时间:2017-01-26 03:29:55

标签: r loops regression linear-regression correlation

我有一个excel / csv形式的数据集。我希望运行许多简单的线性回归/相关(每个都有一个p值)。

我有几个自变量(x' s)和一个因变量(y)。 变量是数据的所有列,而不是行。每列都包含第一个单元格中数据类型的名称,以及较低单元格中的所有数值数据。

我想创建一个循环而不是手动运行每个测试,但我不熟悉R中的循环。如果有人可以提供帮助,我将非常感谢。谢谢!

2 个答案:

答案 0 :(得分:0)

如果没有更多细节,很难确定,但使用dplyr和扫帚可能会让你到达你需要去的地方。

例如,这会为每个组运行一个线性模型:

library(broom)
library(dplyr)

mtcars %>% 
  group_by(cyl) %>% 
  do(tidy(lm(mpg ~ wt, data = .)))

有关详情,请与我建议:http://r4ds.had.co.nz/many-models.html

答案 1 :(得分:0)

这是我尝试使用模拟数据集来演示1)“手动”计算相关性,2)通过R中的for循环迭代计算相关性:

首先,使用2个独立变量x1(正态分布)和x2(指数分布)以及因变量y生成数据模拟(与x1相同的分布):

set.seed(1) #reproducibility
## The first column is your DEPENDENT variable
## The rest are independent variables
data <- data.frame(y=rnorm(100,0.5,1), x1=rnorm(100,0,1), x2= rexp(100,0.5))

“手动”计算相关性:

cor_x1_y <- cor.test(data$x1, data$y)
cor_x2_y <- cor.test(data$x2, data$y)

c(cor_x1_y$estimate, cor_x2_y$estimate) #corr. coefficients

##           cor           cor 
## -0.0009943199 -0.0404557828 

c(cor_x1_y$p.value, cor_x2_y$p.value) #p values
## [1] 0.9921663 0.6894252

迭代计算相关性并将结果存储在名为 results的矩阵中:

results <- NULL # placeholder
for(i in 2:ncol(data)) {
  ## Perform i^th test:
  one_test <- cor.test(data[,i], data$y) 
  test_cor <- one_test$estimate
  p_value <- one_test$p.value
  ## Add any other parameters you'd like to include

  ##update results vector
  results <- rbind(results, c(test_cor , p_value))
}
colnames(results) <- c("correlation", "p_value")
results

##        correlation   p_value
## [1,] -0.0009943199 0.9921663
## [2,] -0.0404557828 0.6894252