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]
}
答
# 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
尝试在您的循环中使用'cat(i)'来查看您的循环所在的迭代。此外,还有一些潜在的错误:'naomit'应该被引用,并且你有'ata'而不是我想象中的'data'。你不需要在公式中的每个变量前都有'z $'。我敢打赌,发生的事情是每个回归运行整个数据集,似乎是40,000行。这将需要一段时间。 – Noah
当你使用'data'参数时,你不需要'z $',因为lm()知道你正在绘制哪个数据集。因为你写了'ata','lm()'忽略那个部分,只能看到'z $ ret'等,它指的是数据集中整个'ret'列,而不仅仅是你想要分析的分区每次迭代。 – Noah
谢谢你的回复。所以当我删除z $时,我得到以下消息(更新后的代码位于上方)“co [i,] Malhuneidi