嗨,我开始使用r并一直在分析我的数据。我有一个具有157列的数据框。第1列是因变量,从第2列到第157列是自变量,但是从第2列到第79列则是自变量类型(n = 78),从80到157是另一类型(n = 78)。我想执行(78 x 78 = 6084)多个线性回归,一次将模型的第一个独立变量固定为2列至79列。我可以固定独立变量并像这样单独进行回归]
lm(Grassland$column1 ~ Grassland$column2 + x)
lm(Grassland$column1 ~ Grassland$column3 + x)
lm(Grassland$column1 ~ Grassland$column79 + x)
我的问题是如何执行3064回归,编写单个代码并仅提取p值<0.05的回归,消除不显着的回归?
这是我的代码
library(data.table)
Regressions <-
data.table(Grassland)[,
.(Lm = lapply(.SD, function(x) summary(lm(Grassland$column1 ~ Grassland$column2 + x)))), .SDcols = 80:157]
Regressions[, lapply(Lm, function(x) coef(x)[, "Pr(>|t|)"])] [2:3] < 0.05
一个,data.table
不一定会在这里为您提供帮助,它在外部lapply
中可以正常工作。首先,我们以编程方式生成公式(此处将使用mtcars
的大部分内容),然后将公式应用于数据。
paste("mpg ~", setdiff(names(mtcars), "mpg"))
# [1] "mpg ~ cyl" "mpg ~ disp" "mpg ~ hp" "mpg ~ drat" "mpg ~ wt" "mpg ~ qsec" "mpg ~ vs"
# [8] "mpg ~ am" "mpg ~ gear" "mpg ~ carb"
regressions <- lapply(paste("mpg ~", setdiff(names(mtcars), "mpg")),
function(frm) lm(as.formula(frm), data=mtcars))
regressions[1:2]
# [[1]]
# Call:
# lm(formula = as.formula(frm), data = mtcars)
# Coefficients:
# (Intercept) cyl
# 37.885 -2.876
# [[2]]
# Call:
# lm(formula = as.formula(frm), data = mtcars)
# Coefficients:
# (Intercept) disp
# 29.59985 -0.04122