R中 Dataframe 中多列(一次一列)的多重线性回归[重复]

yacmzcpb  于 2023-01-22  发布在  其他
关注(0)|答案(1)|浏览(141)
    • 此问题在此处已有答案**:

How to Loop/Repeat a Linear Regression in R(4个答案)
昨天关门了。
我有一个数据集,其中列表示波数以及权重。下面给出了一个示例数据集,实际数据集几乎有3000+列与不同的波数相关。我想对每个波数执行多元线性回归(权重作为自变量,每次的每个波数作为因变量),并获得每个波数的R^2值。目的是根据这些R^2值识别最重要的波数
例如,第一波数的线性回归模型为:
X400~重量X401~重量等
我想创建一个循环来获取每个波数的R^2值,并将其存储在单独的表中,以便在进一步分析中使用。
我用下面的代码为1个波数建立了一个线性模型。但是我不明白为什么要为每一列创建一个循环,因为原始数据集有3000多个波数。

df1 = data.frame(
  weight = c(15, 18, 20, 21, 18),
  X400 = c(12.5, 9, 16.5, 9, 20),
  X401 = c(12, 19, 14.5, 9, 26),
  X402 = c(11.5, 9.6, 18.5, 19, 20),
  X403 = c(10.5, 8, 12.5, 17, 23),
  X404 = c(12.5, 9, 15, 9, 20),
  X405 = c(14.5, 19, 12.5, 8, 21.2),
  X406 = c(13.5, 7, 18.5, 12, 17),
  X407 = c(12, 3.9, 12.9, 10, 4.8))

  model <- lm(X400 ~ weight, data = df1)
  summary(model)$r.squared

输出表应如下所示。R1、R2、R3 ...表示与每个波数相关的R^2值。
| 波数|R^2值|
| - ------|- ------|
| X400|R1|
| X401|R2|
| 小行星402|R3|
| 小行星403|R4|
| 小行星404|R5|
| 小行星405|R6|
| 小行星406|R7|
| 小行星407|八国集团|
我怎么能在R中做到这一点?

w9apscun

w9apscun1#

不如这样:

library(dplyr)
library(tidyr)
df1 = data.frame(
  weight = c(15, 18, 20, 21, 18),
  X400 = c(12.5, 9, 16.5, 9, 20),
  X401 = c(12, 19, 14.5, 9, 26),
  X402 = c(11.5, 9.6, 18.5, 19, 20),
  X403 = c(10.5, 8, 12.5, 17, 23),
  X404 = c(12.5, 9, 15, 9, 20),
  X405 = c(14.5, 19, 12.5, 8, 21.2),
  X406 = c(13.5, 7, 18.5, 12, 17),
  X407 = c(12, 3.9, 12.9, 10, 4.8))

df1 %>% 
  pivot_longer(-weight, names_to="vbl", values_to = "vals") %>% 
  group_by(vbl) %>% 
  summarise(r2 = summary(lm(vals ~ weight))$r.squared)
#> # A tibble: 8 × 2
#>   vbl        r2
#>   <chr>   <dbl>
#> 1 X400  0.00941
#> 2 X401  0.0398 
#> 3 X402  0.403  
#> 4 X403  0.0871 
#> 5 X404  0.0249 
#> 6 X405  0.259  
#> 7 X406  0.0162 
#> 8 X407  0.00384

reprex package(v2.0.1)于2023年1月20日创建

相关问题