我如何使用lapply函数进行3064回归

问题描述 投票:0回答:1

嗨,我开始使用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       
r linear-regression lapply
1个回答
0
投票

一个,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  
© www.soinside.com 2019 - 2024. All rights reserved.