我的数据如下。
year<-rep(2001:2010,each=100)
Y1<-rnorm(1000)
Y2<-rnorm(1000)
X1<-rnorm(1000)
X2<-rnorm(1000)
我希望按年进行回归分析。
模型如下
lm(Y1~X1+X2) # 2000
lm(Y1~X1+X2) # 2001
#....
lm(Y1~X1+X2) # 2010
lm(Y2~X1+X2) # 2000
lm(Y2~X1+X2) # 2001
#....
lm(Y2~X1+X2) # 2010
我的数据是从2000年到2013年,有Y1,Y2 ...... Y1800。
我希望一次处理代码。
我想写出调整后的R平方和每个模型的残差(平方)之和。
答案 0 :(得分:0)
你会以不同的方式组织它吗?
year<-rep(2001:2010,each=100)
d <- data.frame(year = rep(2001:2010,each=100, times = 10), yval = rnorm(10000),
xval1 = rnorm(10000),
xval2 = rnorm(10000),
y = rep(paste('y',1:10), each = 100, times = 10))
head(d)
year yval xval1 xval2 y
1 2001 -0.9317559 0.6435350 0.29772839 y 1
2 2001 1.0659423 -0.9244871 1.59511267 y 1
3 2001 0.5304943 -1.7047387 2.67113367 y 1
4 2001 -0.5401647 0.2125337 0.06930514 y 1
5 2001 0.8132301 -1.2269802 0.45345832 y 1
6 2001 0.8256614 -1.6228756 -0.30481758 y 1
ddply(d, .(year, y), summarise, intercept=lm(yval~xval1+xval2)$coefficients[1],
adj.r.sq = summary(lm(yval~xval1+xval2))$adj.r.sq)
year y intercept adj.r.sq
1 2001 y 1 -0.027267374 0.0006350922
2 2002 y 2 -0.007104610 0.0035883522
3 2003 y 3 0.015234001 -0.0008837168
4 2004 y 4 0.010327471 -0.0013589311
5 2005 y 5 0.059149459 0.0012124013
6 2006 y 6 0.086763752 0.0001895389
7 2007 y 7 0.044359016 -0.0019987028
8 2008 y 8 0.005336840 -0.0015952540
9 2009 y 9 -0.025781738 0.0023403859
10 2010 y 10 -0.005402567 -0.0014873828
答案 1 :(得分:0)
对于每年的部分,我会使用dplyr
:
library(dplyr)
df = data.frame(year, X1, Y1, X2, Y2)
get_adj_r_sq = function(dat) {
summary(lm(Y2~X1+X2, data = dat))$adj.r.sq
}
df_grouped = group_by(df, year)
adj_rsq_vector = do(df_grouped, get_adj_r_sq)
data.frame(adj_r_sq = as.numeric(adj_rsq_vector), year = unique(df_grouped$year))
adj_r_sq year
1 0.046308199 2001
2 -0.005116814 2002
3 -0.018591583 2003
4 -0.014183950 2004
5 -0.003552023 2005
6 0.011221766 2006
7 -0.003398615 2007
8 0.004806429 2008
9 0.030205402 2009
10 -0.013241886 2010