如何用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
相关产品推荐
相关产品推荐

