如何在R中循环/重复线性回归

JHa*_*020 7 loops r repeat linear-regression

我已经弄清楚如何在R中创建一个包含4个变量的表,我将其用于多个线性回归.每个回归的因变量(Lung)取自22,000列的csv表的一列.其中一个独立变量(血液)取自相似表格的相应列.每列代表特定基因的水平,这就是为什么有这么多基因的原因.还有两个额外的变量(每个患者的年龄和性别).当我输入线性回归方程时,我使用lm(肺[,1]〜血[,1] +年龄+性别),这适用于一个基因.我正在寻找一种输入这个等式的方法,让R计算肺和血的所有剩余列,并希望将系数输出到表中.任何帮助,将不胜感激!

arv*_*000 11

您想运行22,000个线性回归并提取系数?从编码的角度来看,这很简单.

set.seed(1)

# number of columns in the Lung and Blood data.frames. 22,000 for you?
n <- 5 

# dummy data
obs <- 50 # observations
Lung <- data.frame(matrix(rnorm(obs*n), ncol=n))
Blood <- data.frame(matrix(rnorm(obs*n), ncol=n))
Age <- sample(20:80, obs)
Gender  <- factor(rbinom(obs, 1, .5))

# run n regressions
my_lms <- lapply(1:n, function(x) lm(Lung[,x] ~ Blood[,x] + Age + Gender))

# extract just coefficients
sapply(my_lms, coef)

# if you need more info, get full summary call. now you can get whatever, like:
summaries <- lapply(my_lms, summary)
# ...coefficents with p values:
lapply(summaries, function(x) x$coefficients[, c(1,4)])
# ...or r-squared values
sapply(summaries, function(x) c(r_sq = x$r.squared, 
                                adj_r_sq = x$adj.r.squared))
Run Code Online (Sandbox Code Playgroud)

模型存储在列表中,其中模型3(具有DV Lung [,3]和IVs Blood [,3] + Age + Gender)my_lms[[3]]等等.您可以使用列表中的应用功能来执行摘要,从中可以提取所需的数字.