我有一个excel / csv形式的数据集。我希望运行许多简单的线性回归/相关(每个都有一个p值)。
我有几个自变量(x' s)和一个因变量(y)。 变量是数据的所有列,而不是行。每列都包含第一个单元格中数据类型的名称,以及较低单元格中的所有数值数据。
我想创建一个循环而不是手动运行每个测试,但我不熟悉R
中的循环。如果有人可以提供帮助,我将非常感谢。谢谢!
答案 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