如何在data.frame中拟合数据组并获得每个组的拟合系数?

时间:2015-08-07 08:25:38

标签: r dataframe apply lm

我试图在我的数据帧的两列之间写一个多项式函数。 在这两列中,我对名为Group1Group2的行进行了分组。 我希望使用

符合这些组RV
fit_all <- summary(lm(R ~ poly(V,2,raw=TRUE), data = df, subset = state))

但是我收到了警告信息

  

总结.lm(lm(R~poly(V,2,raw = TRUE),data = df_rep,subset = state)):     基本上完美契合:总结可能不可靠

我检查了这个可能与NA值有关的错误。由于我的实际数据和df数据中都没有NA值,因此我陷入困境。

最后为每个Group1Group2我想为每个组配件提取coefficients

请看一下我可重复的例子

set.seed(1)
No <- rep(seq(1,4,1),each=21)
AC <- rep(rep(c(78,110),each=1),times=length(No)/2)
state <- rep(rep(c("Group 1","Group 2"),2),each=21)
V <- rep(seq(100,2100,100),times=4)
R = sort(replicate(4, sample(5000:6000,21)))

df <- data.frame(No,AC,V,R,state)
  

头(DF)

   No  AC   V    R   state
 1  1  78 100 5004 Group 1
 2  1 110 200 5014 Group 1
 3  1  78 300 5030 Group 1
 4  1 110 400 5039 Group 1
 5  1  78 500 5057 Group 1
 6  1 110 600 5068 Group 1

1 个答案:

答案 0 :(得分:2)

检查此示例使用dplyr和扫帚包。

library(dplyr)
library(broom)

set.seed(1)
No <- rep(seq(1,4,1),each=21)
AC <- rep(rep(c(78,110),each=1),times=length(No)/2)
state <- rep(rep(c("Group 1","Group 2"),2),each=21)
V <- rep(seq(100,2100,100),times=4)
R = sort(replicate(4, sample(5000:6000,21)))

df <- data.frame(No,AC,V,R,state)


df2 = df %>% 
  group_by(state) %>% # group by variable state
  do(data.frame(model = tidy(lm(R~poly(V,2,raw=TRUE), data=.)))) %>% # for each group run a linear fit and save the output as a date table
  ungroup # forget about your initial grouping

现在你有了一个数据集(dt2),它为每个类别的线性模型输出提供了一些信息作为列。然后你可以像任何其他数据集一样处理dt2。 例如:

df2 %>% filter(state=="Group 1") # get info only for Group 1
df2 %>% filter(state=="Group 1") %>% select(model.term, model.estimate) # get only variables and coefficients for Group 1