首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R基与plyr回归输出

R基与plyr回归输出
EN

Stack Overflow用户
提问于 2013-09-16 16:23:27
回答 2查看 217关注 0票数 0

我使用plyr包按主题和年份运行面板数据的回归。我只想使用R plyr函数复制来自base的输出。特别是,plyr包保留主题和年份变量名,但base函数不保留。是否可以仅使用R plyr函数复制base输出?下面是我尝试过的代码示例:

代码语言:javascript
复制
data <- data.frame(SUBJECT=c(rep('FISHER',10), rep('HUNTER',10)), YEAR=c(rep(2011,5), rep(2012,5), rep(2011,5), rep(2012,5)), y=rnorm(20), x=rnorm(20))
data

只使用R base函数

代码语言:javascript
复制
with(data, t(sapply(split(data, list(SUBJECT,YEAR), drop=TRUE), function(x) { coef(lm(y ~ x, data = x)) })))

使用plyr函数

代码语言:javascript
复制
library(plyr)
ddply(data, .(SUBJECT,YEAR), function(x) { coef(lm(y ~ x, data = x)) })
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-09-16 16:46:12

试试这个(ix <- 1:2也会起作用):

代码语言:javascript
复制
ix <- c("SUBJECT", "YEAR")
reg <- function(DF) cbind(  DF[1, ix],  t(coef(lm(y ~ x, DF)))  )
do.call(rbind, by(data, data[ix], reg))

这意味着:

代码语言:javascript
复制
  SUBJECT YEAR (Intercept)           x
1  FISHER 2011   0.8665496  0.25377389
2  HUNTER 2011   0.4954567  0.05370458
3  FISHER 2012   0.5280182  0.95038956
4  HUNTER 2012  -0.8319516 -0.04778639
票数 1
EN

Stack Overflow用户

发布于 2013-09-16 16:33:35

我通常自己使用plyr来执行这类任务,所以我猜想在基本R中有一种更干净的方法可以实现这一点,但是这里有一个解决方案:

代码语言:javascript
复制
> runRegression <- function(v){
+   sub <- data[data$SUBJECT == v[1] & data$YEAR == v[2],]
+   coef(lm(y ~ x, data = sub))
+ }
> 
> cbind(unique(data[,c("SUBJECT","YEAR")]),t(apply(unique(data[,c("SUBJECT","YEAR")]),1,runRegression)))
   SUBJECT YEAR (Intercept)          x
1   FISHER 2011   0.3409430  0.2860310
6   FISHER 2012   0.1065906  0.5851614
11  HUNTER 2011  -0.3774422  0.9029407
16  HUNTER 2012   0.1697793 -0.5429523
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18832858

复制
相关文章

相似问题

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