编写一个输出几个回归结果的函数

时间:2013-01-29 05:04:35

标签: r matrix regression

我有一个大型数据框,包含1970年1月至2009年12月(行)的月度股票回报,包括美国在内的7个不同国家(列)。我的任务是使用4个不同时间段的值,即70s,80s,90s和00s,对美国股票收益(自变量)的每个国家的股票收益(因变量)进行回归。

数据集(.csv)可以在以下位置下载: https://docs.google.com/file/d/0BxaWFk-EO7tjbG43Yl9iQVlvazQ/edit

这意味着我有24个回归分开运行并报告结果,我已经使用lm()函数完成了。但是,我目前正在尝试使用R smarter并创建自定义函数,以实现我的目的并产生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函数。

谢谢你,如果我的帖子需要进行一些编辑,请告诉我。

3 个答案:

答案 0 :(得分:1)

试试这个:

 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)

答案 1 :(得分:1)

lm函数会接受一个矩阵作为响应变量并计算每个列的单独回归,因此您可以将(cbind)不同国家/地区组合在一起。

如果您愿意假设不同的十年具有相同的方差,那么您可以使用虚拟变量十年来适应不同的十年(查看gl函数以快速计算十进制因子)并通过一次致电lm完成所有事情。一个简单的例子:

fit <- lm( cbind( Sepal.Width, Sepal.Length, Petal.Width ) ~ 0 + Species + Petal.Length:Species,
    data=iris )

这将给出与单独回归相同的系数估计值,只有标准差和自由度(因此测试和其他任何依赖于这些的测试)将与单独运行回归不同。

如果您需要为每个十年单独计算的标准偏差,那么您可以使用tapplysapply(将十进制信息传递到subset的{​​{1}}参数)或其他应用功能。

为了显示来自几个不同回归模型的结果,新的观星包可能会引起关注。

答案 2 :(得分:1)

尝试将“stargazer”软件包用于发布质量的文本或LaTeX回归结果表。