You need to enable JavaScript to run this app. 如何用R编写循环对纳斯达克100成分股批量执行线性回归分析
优惠活动
大模型
产品
解决方案
定价
更多

如何用R编写循环对纳斯达克100成分股批量执行线性回归分析

R批量执行个股回归解决方案

前置数据预处理

首先你提供的样例数据中Sales列带有$符号为字符格式,无法直接用于回归计算,需要先转换为数值型,同时修正原始代码中lm函数的不规范写法:

library(readxl)
# 读取原始数据
Nasdaq_100 = read_xlsx("Nasdaq_100_Sales_Data.xlsx")
# 转换Sales列为数值型
Nasdaq_100$Sales <- as.numeric(gsub("\\$", "", Nasdaq_100$Sales))

实现方式1:基础R循环实现

适合偏好基础R语法的场景,代码逻辑直观:

# 提取所有唯一股票代码
tickers <- unique(Nasdaq_100$TickerSymbol)
# 初始化列表存储所有回归结果
reg_results <- vector("list", length(tickers))
names(reg_results) <- tickers

# 遍历所有股票执行回归
for (i in seq_along(tickers)) {
  # 提取单只股票的子集
  sub_df <- subset(Nasdaq_100, TickerSymbol == tickers[i])
  # 执行线性回归
  current_reg <- lm(Sales ~ Stockprice_quarterly, data = sub_df)
  # 存储回归结果
  reg_results[[i]] <- current_reg
  # 可选:打印当前股票回归摘要
  cat("\n===== ", tickers[i], " 回归结果 =====\n")
  print(summary(current_reg))
}

# 调用示例:查看AMD的回归结果
summary(reg_results[["AMD"]])

实现方式2:tidyverse分组回归实现

适合需要批量整理回归结果的场景,可直接导出结构化的统计表格:

library(dplyr)
library(purrr)
library(broom)

# 分组执行回归并整理结果
reg_result_df <- Nasdaq_100 %>%
  # 按股票代码分组
  group_by(TickerSymbol) %>%
  # 分组嵌套数据
  nest() %>%
  mutate(
    # 对每组数据执行回归
    reg_model = map(data, ~ lm(Sales ~ Stockprice_quarterly, data = .x)),
    # 提取回归整体统计量(R²、F检验p值等)
    overall_stats = map(reg_model, glance),
    # 提取回归系数详情(估计值、t值、p值等)
    coef_stats = map(reg_model, tidy)
  )

# 导出整体统计结果为CSV
write.csv(unnest(reg_result_df, overall_stats), "个股回归整体统计.csv", row.names = F)
# 导出系数详情为CSV
write.csv(unnest(reg_result_df, coef_stats), "个股回归系数详情.csv", row.names = F)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 07:54:04