作者:她丶无可取代 | 来源:互联网 | 2024-12-15 21:32
作为一名R语言的新手,我正逐步探索其强大的数据分析能力。最近,我遇到了一个任务,需要对Excel中的股票价格数据进行线性回归分析。为了开始这项工作,我首先使用了以下命令将数据导入R环境中:
stockPrice <- read.csv("C:/Users/Desktop/prova.csv", sep=";", header=TRUE, check.names=FALSE, stringsAsFactors=FALSE, dec=",")
导入的数据集包含了100行和多列,每一列表示一种不同的资产。下面展示了一部分数据的预览:
1 -1.8669 -1.2096 1.0358 ... 0.4397 -0.1530 -0.3123
2 -2.1469 -0.4331 -0.0891 ... 1.8105 0.8521 -1.4327
3 -1.8919 -0.6469 -0.4098 ... 2.4720 0.5230 -1.6965
...
接下来,我们的目标是对每个资产执行线性回归分析,以预测某一资产的价格变化(y)与前一时刻的价格变化(x)之间的关系。为此,我们可以采用循环方式处理每一列数据,具体实现如下:
out <- lapply(stockPrice, function(vec) {
vec <- as.numeric(gsub(",", "", vec))
y <- vec[1:(length(vec) - 1)]
x <- vec[2:length(vec)]
coef(lm(y ~ x))
})
out[[1]]
上述代码首先将数据转换为数值型,然后定义因变量y和自变量x,最后计算回归系数。若需获取所有资产的斜率值,可以通过以下代码实现:
do.call(rbind, out)[, 2]
此外,我们也可以利用nlme
包中的lmList
函数,将数据重塑为“长”格式,从而简化线性回归模型的构建过程:
library(dplyr)
library(tidyr)
library(nlme)
stockPrice %>%
mutate_all(readr::parse_number) %>%
pivot_longer(everything(), values_to = 'y') %>%
group_by(name = factor(name, levels = unique(name))) %>%
mutate(x = lead(y)) %>%
ungroup %>%
na.omit %>%
lmList(y ~ x | name, data = .)
这种方法不仅简化了代码,还提高了模型构建的效率。希望这些信息能帮助其他R语言初学者更好地理解和应用线性回归技术。