是否可以为Dplyr'中的每个组创建单独的线性模型;让我们总结一下

是否可以为Dplyr'中的每个组创建单独的线性模型;让我们总结一下,r,dplyr,R,Dplyr,我有一些这样的数据 group_name | x | y ------------------ a | 1 | 2 a | 2 | 4 a | 3 | 6 b | 1 | 4 b | 2 | 3 b | 3 | 2 c | 1 | 2 c | 2 | 5 c | 3 | 8 我想按group_名称对它进行分组,并使用Dplyr的sum

我有一些这样的数据

group_name | x | y
------------------
a          | 1 | 2
a          | 2 | 4
a          | 3 | 6
b          | 1 | 4
b          | 2 | 3
b          | 3 | 2
c          | 1 | 2
c          | 2 | 5
c          | 3 | 8
我想按group_名称对它进行分组,并使用Dplyr的summary函数为每个组创建一个包含线性模型lm(y~x)的列。有可能吗?如果没有,为每个组创建模型的备选方案是什么

提前感谢您

改编以下示例:


编辑:获取预测的一种方法是使用
broom
中的
augment

library(tidyverse); library(broom)
df %>%
  nest(-group_name) %>% 
  mutate(fit = map(data, ~lm(y ~ x, data = .x)),
         predictions = map(fit, augment)) %>%
  unnest(predictions)

   group_name y x .fitted      .se.fit        .resid      .hat .sigma .rownames .cooksd .std.resid
1 a           2 1       2 0.000000e+00  0.000000e+00 0.8333333    NaN      <NA>      NA         NA
2 a           4 2       4 0.000000e+00  0.000000e+00 0.3333333    NaN      <NA>      NA         NA
3 a           6 3       6 0.000000e+00  0.000000e+00 0.8333333    NaN      <NA>      NA         NA
4 b           4 1       4 6.080942e-16  2.719480e-16 0.8333333    NaN         4    2.50          1
5 b           3 2       3 3.845925e-16 -5.438960e-16 0.3333333    NaN         5    0.25         -1
6 b           2 3       2 6.080942e-16  2.719480e-16 0.8333333    Inf         6    2.50          1
7 c           2 1       2 8.107923e-16 -3.625973e-16 0.8333333    NaN         7    2.50         -1
8 c           5 2       5 5.127900e-16  7.251946e-16 0.3333333    NaN         8    0.25          1
9 c           8 3       8 8.107923e-16 -3.625973e-16 0.8333333    Inf         9    2.50         -1
library(tidyverse);图书馆(扫帚)
df%>%
嵌套(-group_name)%%>%
变异(拟合=映射(数据,~lm(y~x,数据=.x)),
预测=映射(拟合、增强))%>%
不耐烦(预测)
组名称y x.fitted.se.fit.resid.hat.sigma.rownames.cooksd.std.resid
1 a 2 1 200.000000 E+00 0.000000 E+00 0.8333333南那那
2 a 4 4 0.000000 E+00 0.000000 E+00 0.3333333南那那
3 a 6 3 6 0.000000 E+00 0.000000 E+00 0.8333333南那那
4 b 4 4 6.080942e-16 2.719480e-16 0.8333333 NaN 4 2.50 1
5B3233.845925e-16-5.438960e-160.3333333NAN50.25-1
6 b 2 3 2 6.080942e-16 2.719480e-16 0.8333333 Inf 6 2.50 1
7 c 2 1 2 8.107923e-16-3.625973e-16 0.8333333 NaN 7 2.50-1
8 c 5 2 5.127900e-16 7.251946e-16 0.3333333南8 0.25 1
9 c 8 8.107923e-16-3.625973e-16 0.8333333 Inf 9 2.50-1

这里有一种方法

我不得不稍微改变你的测试数据,因为我认为存在完美共线性的问题

df因变量:
#>                     ---------------------------
#>y
#> -----------------------------------------------
#>x1.579*
#>                               (0.182)          
#>                                                
#>常数0.579
#>                               (0.437)          
#>                                                
#> -----------------------------------------------
#>意见3
#>R2 0.987
#>调整后的R2 0.974
#>剩余标准误差0.324(df=1)
#>F统计数据75.000*(df=1;1)
#> ===============================================
#>注:*p===============================================
#>因变量:
#>                     ---------------------------
#>y
#> -----------------------------------------------
#>x-0.923
#>                               (0.266)          
#>                                                
#>常数5.000*
#>                               (0.620)          
#>                                                
#> -----------------------------------------------
#>意见3
#>R2 0.923
#>调整后的R2 0.846
#>剩余标准误差0.392(df=1)
#>F统计12.000(df=1;1)
#> ===============================================
#>注:*p===============================================
#>因变量:
#>                     ---------------------------
#>y
#> -----------------------------------------------
#>x 2.368*
#>                               (0.273)          
#>                                                
#>常数-0.132
#>                               (0.656)          
#>                                                
#> -----------------------------------------------
#>意见3
#>R2 0.987
#>调整后的R2 0.974
#>剩余标准误差0.487(df=1)
#>F统计数据75.000*(df=1;1)
#> ===============================================

#>注:*pYes!现在我看到了布鲁姆的答案,我同意了。当我打字的时候,我还没看到那个答案。谢谢你,先生。当我们在列中有模型时,如何使用predict函数或modeler::add_predictions函数?使用
broom::augment
编辑,这比
modeler::add_predictions
更为熟悉。
library(tidyverse); library(broom)
df %>%
  nest(-group_name) %>% 
  mutate(fit = map(data, ~lm(y ~ x, data = .x)),
         predictions = map(fit, augment)) %>%
  unnest(predictions)

   group_name y x .fitted      .se.fit        .resid      .hat .sigma .rownames .cooksd .std.resid
1 a           2 1       2 0.000000e+00  0.000000e+00 0.8333333    NaN      <NA>      NA         NA
2 a           4 2       4 0.000000e+00  0.000000e+00 0.3333333    NaN      <NA>      NA         NA
3 a           6 3       6 0.000000e+00  0.000000e+00 0.8333333    NaN      <NA>      NA         NA
4 b           4 1       4 6.080942e-16  2.719480e-16 0.8333333    NaN         4    2.50          1
5 b           3 2       3 3.845925e-16 -5.438960e-16 0.3333333    NaN         5    0.25         -1
6 b           2 3       2 6.080942e-16  2.719480e-16 0.8333333    Inf         6    2.50          1
7 c           2 1       2 8.107923e-16 -3.625973e-16 0.8333333    NaN         7    2.50         -1
8 c           5 2       5 5.127900e-16  7.251946e-16 0.3333333    NaN         8    0.25          1
9 c           8 3       8 8.107923e-16 -3.625973e-16 0.8333333    Inf         9    2.50         -1

    #> [1] "group a"
    #> 
    #> ===============================================
    #>                         Dependent variable:    
    #>                     ---------------------------
    #>                                  y             
    #> -----------------------------------------------
    #> x                             1.579*           
    #>                               (0.182)          
    #>                                                
    #> Constant                       0.579           
    #>                               (0.437)          
    #>                                                
    #> -----------------------------------------------
    #> Observations                     3             
    #> R2                             0.987           
    #> Adjusted R2                    0.974           
    #> Residual Std. Error       0.324 (df = 1)       
    #> F Statistic             75.000* (df = 1; 1)    
    #> ===============================================
    #> Note:               *p<0.1; **p<0.05; ***p<0.01
    #> [1] "group b"
    #> 
    #> ===============================================
    #>                         Dependent variable:    
    #>                     ---------------------------
    #>                                  y             
    #> -----------------------------------------------
    #> x                             -0.923           
    #>                               (0.266)          
    #>                                                
    #> Constant                      5.000*           
    #>                               (0.620)          
    #>                                                
    #> -----------------------------------------------
    #> Observations                     3             
    #> R2                             0.923           
    #> Adjusted R2                    0.846           
    #> Residual Std. Error       0.392 (df = 1)       
    #> F Statistic             12.000 (df = 1; 1)     
    #> ===============================================
    #> Note:               *p<0.1; **p<0.05; ***p<0.01
    #> [1] "group c"
    #> 
    #> ===============================================
    #>                         Dependent variable:    
    #>                     ---------------------------
    #>                                  y             
    #> -----------------------------------------------
    #> x                             2.368*           
    #>                               (0.273)          
    #>                                                
    #> Constant                      -0.132           
    #>                               (0.656)          
    #>                                                
    #> -----------------------------------------------
    #> Observations                     3             
    #> R2                             0.987           
    #> Adjusted R2                    0.974           
    #> Residual Std. Error       0.487 (df = 1)       
    #> F Statistic             75.000* (df = 1; 1)    
    #> ===============================================
    #> Note:               *p<0.1; **p<0.05; ***p<0.01