1

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

数据集 (.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功能将被使用。

谢谢,如果我的帖子需要编辑,请告诉我。

4

3 回答 3

1

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

如果您愿意假设不同的十年具有相同的方差,那么您可以使用十年的虚拟变量来拟合不同的十年(查看该gl函数以快速计算十年因子)并在一次调用中完成所有操作lm。一个简单的例子:

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

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

如果您需要为每个十年单独计算标准偏差,那么您可以使用tapplysapply(将十年信息传递给 的subset参数lm)或其他应用函数。

为了显示来自几个不同回归模型的结果,新的 stargazer 包可能很有趣。

于 2013-01-29T16:29:02.437 回答
1

尝试将“stargazer”包用于出版质量的文本或 LaTeX 回归结果表。

于 2013-08-05T17:39:42.500 回答
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)
于 2013-01-29T05:12:59.680 回答