趁着没睡意,趁着周末的小尾巴,写一篇关于R遍历文件并进行回归分析的案例。
先插播一小段:周五的面试经历。一边坐在电脑前敲代码,一边越想着面试不太对劲。面试的是河北广电无线传播公司,一家国企。环境优美,员工热情,面试官也很温柔。在经历职场千百炼的面试官面前不敢造次,自认为还表现不错,面试官也说还可以,过后电话联系。今天周日了,没有消息,莫非是因为不是工作日,那我再期待一下明天好了。
正文开始
今天要呈现的是:对2014年1月2日到2018年12月28日,5只股票进行多元回归分析。因变量:个股当日日收益率,自变量:前两日市场收益率,前1日市场收益率,当日日市场收益率,未来1日日收益率,未来2日日收益率。看着so easy。但是做起来嘛,愣是做了一下午。数据不是很友好噢。
图1:个股存放位置 图2:具体某只个股数据 图3:市场存放位置 图4:市场具体数据注:每把个股股票数据和市场数据放在同一个文件夹下,是为了方便R程序编写。
从数据看,有这么几个特点:
股票数据是面板数据;
收益率不是直接给的;
能否遍历所有股票同时进行多元回归分析;
市场日收益率计算(相对容易)
市场日收益率=
R代码:
market = read.csv('C:/Users/Administrator/Desktop/段以沛/DiscussionClass/Market.csv',header = T) #读取市场数据
MR = (market[,5]/market[,6])-1 #计算市场日收益率
个股日收益率计算(相对麻烦)
R代码:
path = 'C:/Users/Administrator/Desktop/discussion' #设置股票存放的所在文件路径
fileNames = list.files(path) #遍历路径中的文件名,即得到5只股票文件名称
IR = sapply(fileNames,function(x){
newPath = paste(path,x,sep = '/') #设置股票的存放的具体位置
newData = read.csv(newPath) #读取某只股票数据
IReturn = (newData[,7]/newData[,8])-1 #计算读取的该只股票的日收益率
})
5个自变量的数据获取过程
因为5个自变量都是关于市场收益率的,只是选取的时间点不同。
MRbefore2————前2日市场收益率
MRbefore1————前1日市场收益率
MRToday————当日日市场收益率
MRafter1————未来1日日市场收益率
MRafter2————未来2日日市场收益率
R代码:
modelData = as.data.frame(IR)
modelData = modelData[c(-1,-2),]
MRbefore2 = head(MR,-4) #去掉MR后4个数据
MRbefore1 = head(MR,-3) #去掉MR后3个数据得到MRbefore1
MRbefore1 = tail(MRbefore1,-1) #再去掉MRbefore1 前1个数据得到MRbefore1(建模用)
MRToday = head(MR,-2)
MRToday = tail(MRToday,-2)
MRafter1 = tail(MR,-3)
MRafter1 = head(MRafter1,-1)
MRafter2 = MR[c(-1:-4)] #=tail(MR,-4)
INdependentV = data.frame(MRbefore2,MRbefore1,MRToday,MRafter1,MRafter2) #把这5个变量建一个数据框方便回归使用
多元回归分析
R代码:
myfunction = function(x){
lm = lm(x~MRbefore2 + MRbefore1 + MRToday + MRafter1 + MRafter2, data = INdependentV)
}
model = apply(modelData,2,myfunction)
这样就完成了对股票的多元回归建模,使用遍历思想使得我们在面对多只股票数据时可以较快的得到结果。而不用分别对每只股票进行回归。
网友评论