You need to enable JavaScript to run this app. R语言实现数据集两两列组合应用线性回归模型的问题
优惠活动
大模型
产品
解决方案
定价
更多

R语言实现数据集两两列组合应用线性回归模型的问题

现有实现的合理性

你提供的代码是可行的,能够成功拟合所有交易对两两组合的线性回归模型,结果以列表形式返回。但存在两个可优化的空间:

  1. 输出结果仅为模型列表,没有与对应的因变量、自变量配对,后续提取R方、p值等统计量时,很难对应到具体的交易对组合
  2. 默认包含了y=x的无意义自回归结果,这类回归的R方恒为1,没有实际分析价值

原始代码报错原因

你最初尝试的代码报错有两个核心原因:

  1. lm()函数要求第一个输入为公式对象,直接传入字符串类型的公式不会被自动识别
  2. 多余的group_by操作加上结构不匹配的返回值:你试图将summary(lm(...)$r.squared)的结果存入普通列,结构不兼容导致报错

更优的嵌套列实现方案

推荐使用嵌套列的方式将所有回归相关信息(自变量、因变量、公式、模型、统计量)统一存储在同一个数据框中,方便后续批量处理:

依赖包

需要提前加载以下包:

library(tidyverse)
library(broom) # 用于将模型结果转换为结构化数据框

实现代码

reg_result <- expand.grid(y = colnames(dat), x = colnames(dat), KEEP.OUT.ATTRS = FALSE) %>%
  filter(y != x) %>% # 可选:过滤无意义的自回归组合
  rowwise() %>%
  mutate(
    # 生成公式对象存入列表列
    formula = list(as.formula(paste(y, "~", x))),
    # 拟合模型存入嵌套列
    model = list(lm(formula[[1]], data = dat)),
    # 直接提取常用统计量
    r_squared = summary(model[[1]])$r.squared,
    # 提取系数、标准误、p值等指标
    coef_details = list(tidy(model[[1]])),
    # 提取模型整体拟合指标
    fit_details = list(glance(model[[1]]))
  ) %>%
  ungroup()

常用操作示例

  • 查看所有组合的R方:
reg_result %>% select(y, x, r_squared)
  • 提取指定组合的系数与p值:
reg_result %>% 
  filter(y == "BNBBTC", x == "ETCBTC") %>% 
  pull(coef_details) %>% 
  .[[1]]
  • 将所有系数展开为普通数据框:
reg_result %>% unnest(coef_details)

内容的提问来源于stack exchange,提问作者user113156

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.20 22:54:01