R回归循环

问题描述:

我正在尝试编写一个R脚本,该脚本将通过每1000行数据的回归运行。R回归循环

我还想将输出存储到csv文件中。

数据链接:https://drive.google.com/open?id=0B-W2Dyw4QjoMQ0F1ZFhsdWJORHM

任何帮助将是巨大的!

z <- read.csv("Merge.csv", sep=",", header=TRUE, stringsAsFactors=FALSE) 


co<-matrix(NA, nrow=44, ncol = 7) 

## Regression for mkt returns and 7 variables 
for (i in 5:44){ 
    cat(i) 
    temp <- lm(ret~earningsyld+book2mkt+leverage+corptax+financials+Momentum+lnmktcap, na.action="na.omit", data = z[1000*(i-1)+1:1000*i,]) 
    co[i,]<- summary(temp)$coefficient [2:8,1] 
} 
+0

尝试在您的循环中使用'cat(i)'来查看您的循环所在的迭代。此外,还有一些潜在的错误:'naomit'应该被引用,并且你有'ata'而不是我想象中的'data'。你不需要在公式中的每个变量前都有'z $'。我敢打赌,发生的事情是每个回归运行整个数据集,似乎是40,000行。这将需要一段时间。 – Noah

+0

当你使用'data'参数时,你不需要'z $',因为lm()知道你正在绘制哪个数据集。因为你写了'ata','lm()'忽略那个部分,只能看到'z $ ret'等,它指的是数据集中整个'ret'列,而不仅仅是你想要分析的分区每次迭代。 – Noah

+0

谢谢你的回复。所以当我删除z $时,我得到以下消息(更新后的代码位于上方)“co [i,] Malhuneidi

# Built-in example data 
data("mtcars") 
mtcars <- rbind(mtcars,mtcars,mtcars,mtcars,mtcars,mtcars, 
       mtcars,mtcars,mtcars,mtcars,mtcars) 

# Let's pretend that instead of 1000 rows it's 10, so that I can use builtin data to show you 

co<-matrix(NA, nrow=35, ncol = 1) 

## Regressions 
for (i in 1:floor(nrow(mtcars)/10)){ 
    cat(i) 
    temp <- lm(mpg~cyl, na.action="na.omit", data = mtcars[((i-1)*10)+1:(i*10),]) 
    co[i,] <- summary(temp)$coefficients[2:2,1] 
} 

head(co) 
  [,1] 
[1,] -1.696939 
[2,] -3.461047 
[3,] -2.572180 
[4,] -2.651129 
[5,] -3.023638 
[6,] -2.712391 

我相信有您的索引问题以及摘要对象的coefficients元素的不正确的拼写。任何其他问题都将是数据问题,所以如果您在此之后仍然有问题,请务必提供数据。例如,如果数据中的问题(奇点,所有缺失值,没有识别变化等)导致系数不可测性,那么它将改变返回摘要的大小并打破循环。唯一的解决方案是清理数据或更改模型以避免使用错误的数据。

+0

谢谢。 R对我来说非常新颖(几个小时前刚刚开始编码)。根据您的反馈,我修改了代码。基本上我想有一个输出,在这里我可以得到一个表中每个独立变量的每个迭代的系数。头文件最好是独立变量系数。我在原始声明中添加了数据集的链接。感谢您的帮助! – Malhuneidi