首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >R中的线性回归和分组依据

R中的线性回归和分组依据
EN

Stack Overflow用户
提问于 2009-07-23 04:00:09
回答 9查看 104.6K关注 0票数 119

我想使用lm()函数在R中进行线性回归。我的数据是一个年度时间序列,其中一个字段代表年份(22年),另一个字段代表州(50个州)。我想要拟合每个状态的回归,以便在结束时我有一个lm响应的向量。我可以想象为每个状态执行for循环,然后在循环中进行回归,并将每个回归的结果添加到一个向量中。然而,这看起来不太像R-like。在SAS中,我会执行“by”语句,而在SQL中,我会执行“group by”。做这个的R方法是什么?

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2009-07-23 04:55:41

以下是使用lme4包的一种方法。

代码语言:javascript
复制
 library(lme4)
 d <- data.frame(state=rep(c('NY', 'CA'), c(10, 10)),
                 year=rep(1:10, 2),
                 response=c(rnorm(10), rnorm(10)))

 xyplot(response ~ year, groups=state, data=d, type='l')

 fits <- lmList(response ~ year | state, data=d)
 fits
#------------
Call: lmList(formula = response ~ year | state, data = d)
Coefficients:
   (Intercept)        year
CA -1.34420990  0.17139963
NY  0.00196176 -0.01852429

Degrees of freedom: 20 total; 16 residual
Residual standard error: 0.8201316
票数 58
EN

Stack Overflow用户

发布于 2009-07-31 19:30:45

下面是一种使用plyr包的方法:

代码语言:javascript
复制
d <- data.frame(
  state = rep(c('NY', 'CA'), 10),
  year = rep(1:10, 2),
  response= rnorm(20)
)

library(plyr)
# Break up d by state, then fit the specified model to each piece and
# return a list
models <- dlply(d, "state", function(df) 
  lm(response ~ year, data = df))

# Apply coef to each model and return a data frame
ldply(models, coef)

# Print the summary of each model
l_ply(models, summary, .print = TRUE)
票数 65
EN

Stack Overflow用户

发布于 2009-07-24 11:32:36

在我看来,对于这类数据,混合线性模型是更好的方法。下面的代码给出了固定效果的整体趋势。随机效应表明每个州的趋势与全球趋势有何不同。相关结构考虑了时间自相关。看看Pinheiro & Bates (S和S-Plus的混合效果模型)。

代码语言:javascript
复制
library(nlme)
lme(response ~ year, random = ~year|state, correlation = corAR1(~year))
票数 24
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1169539

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档