我有一个庞大的数据框架,其中包含从1970年1月到2009年12月的7个不同国家(包括美国)的月度股票回报(行)(列)。我的任务是使用70年代、80年代、90年代和00年代这4个不同时期的值,将每个国家的股票收益(因变量)与美国股票收益(自变量)进行回归。
数据集(.csv)可从https://docs.google.com/file/d/0BxaWFk-EO7tjbG43Yl9iQVlvazQ/edit下载
这意味着我要单独运行24个回归并报告结果,我已经使用lm()函数完成了这项工作。然而,我目前正在尝试更智能地使用R,并创建自定义函数来实现我的目的并产生24组结果。
我已经创建子数据帧,其中包含根据时间段聚类的观察值,知道十年中有120个月。
seventies = mydata[1:120, ] # 1970s (from Jan. 1970 to Dec. 1979)
eighties = mydata[121:240, ] # 1980s (from Jan. 1980to Dec. 1989)
nineties = mydata[241:360, ] # 1990s (from Jan. 1990 to Dec. 1999)
twenties = mydata[361:480, ] # 2000s (from Jan. 2000 to Dec. 2009)注:每个新创建的变量都是120 x 7矩阵,用于7个国家/地区的120个观察值。
使用Java运行24个回归将需要使用重叠的for循环。
谁能提供我必须采取的步骤,以编写一个函数,将达到预期的结果?一些R代码的片断也会受到欢迎。我也在考虑使用mapply函数。
谢谢你,如果我的帖子需要编辑,请告诉我。
发布于 2013-01-29 13:13:00
试试这个:
install.packages('plyr')
library('plyr')
myfactors<-c(rep("seventies",120),rep("eighties",120),rep("nineties",120),rep("twenties",120))
tapply(y,myfactors,function(y,X){ fit<-lm(y~ << regressors go here>>; return (fit);},X=mydata)发布于 2013-01-30 00:29:02
lm函数将接受一个矩阵作为响应变量,并为每一列计算单独的回归,因此您可以将不同的国家(地区)组合(cbind)在一起。
如果您愿意假设不同的十年具有相同的方差,那么您可以使用一个十年的虚拟变量来拟合不同的十年(查看gl函数以获得计算十年系数的快速方法),并在一次lm调用中完成所有操作。一个简单的例子:
fit <- lm( cbind( Sepal.Width, Sepal.Length, Petal.Width ) ~ 0 + Species + Petal.Length:Species,
data=iris )这将给出与单独回归相同的系数估计,只有标准偏差和自由度(因此测试和其他依赖于这些的任何东西)将不同于单独运行回归。
如果需要分别计算每十年的标准差,那么可以使用tapply或sapply (将十年信息传递给lm的subset参数)或其他应用函数。
为了显示几个不同回归模型的结果,新的stargazer软件包可能会引起人们的兴趣。
发布于 2013-08-06 01:39:43
尝试对发布质量的文本或LaTeX回归结果表使用'stargazer‘包。
https://stackoverflow.com/questions/14575997
复制相似问题