首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >优化代码以计算coef和r的平方每个模型在R中生成

优化代码以计算coef和r的平方每个模型在R中生成
EN

Stack Overflow用户
提问于 2019-04-22 01:46:11
回答 1查看 25关注 0票数 0

基于 this stackoverflow topic,我想提取系数。

在“钻石”数据集中,我使用nest()函数将钻石数据集分成两个分类变量: color和cut。然后,对于每个模型,计算系数和r_square,并将它们存储为数据帧。

我通过以下代码成功地做到了这一点:

代码语言:javascript
复制
df_dia <- diamonds %>%
  group_by(color, cut) %>% nest() %>% 

  # generate summary
  mutate(fit = map(data, ~lm(price ~ carat, data=.)), summary= map(fit, glance)) %>%
  unnest(summary) %>%

  # generate coef
  mutate(fit = map(data, ~lm(price ~ carat, data=.) %>%coef %>% 
                                        as.list %>% as_tibble)) %>%
  unnest(fit) %>% unnest(data) %>%
  select(color, cut, `(Intercept)`, carat, r.squared)

然而,它的效率并不高,因为它必须进行2次回归。有没有更好的办法?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-22 06:35:16

为什么不使用sapply:

代码语言:javascript
复制
fa = split(diamonds,f = list(diamonds$color,diamonds$cut) )
df_d=data.frame(t(sapply(fa,function(dft){  ## dft=fa[[1]]
  m1=lm(price ~ carat,dft)
  c(coef(m1),r.squared=summary(m1)$r.squared)
  })))
df_dn=do.call("rbind",strsplit(row.names(df_d),".",fixed = T))
df_d = cbind(df_dn,df_d)
colnames(df_d)[1:2]= c("color", "cut")
head(df_d)

# head(df_d)
#        color  cut  X.Intercept.  carat r.squared
# D.Fair     D Fair    -2255.690 7115.086 0.7705523
# E.Fair     E Fair    -2612.316 7348.326 0.8100614
# F.Fair     F Fair    -2214.511 6677.834 0.7531280
# G.Fair     G Fair    -2199.924 6289.356 0.7370402
# H.Fair     H Fair    -2297.343 6096.767 0.7396489
# I.Fair     I Fair    -3097.742 6496.508 0.8263858
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55785211

复制
相关文章

相似问题

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