0

我使用两个分类变量和一个数值变量拟合线性模型,如下所示:

data(iris)

iris2 <- iris %>%
  mutate(petal_type= if_else(Petal.Length > 4, "petal_long", "petal_short"),
         sepal_type = if_else(Sepal.Length > 6, "flower_long", "flower_short")
         )

lm(Sepal.Width ~ sepal_type*petal_type + petal_type*Petal.Width, data = iris2)

# Coefficients:
#                         (Intercept)                        sepal_typeflower_short                          petal_typepetal_short  
#                                    2.48793                                      -0.08721                                       1.51070  
#                                 Petal.Width  sepal_typeflower_short:petal_typepetal_short             petal_typepetal_short:Petal.Width  
#                                     0.27131                                      -0.28965                                      -1.19334  

我想将这两个分类变量分开,以获得每个虚拟变量的截距和斜率的估计值。我想创建一个这样的表来描述sepal.width和petal.width之间的关系:

sepal_type     petal_type        Intercept_estimate          Slope_estimate 
flower_short   petal_short
flower_short   petal_long
flower_long    petal_short
flower_long    petal_long

我可以使用不同的对比度手动做到这一点,但有没有简单的方法?谢谢!

4

1 回答 1

1
iris2 %>%
  group_by(petal_type, sepal_type) %>%
  summarise(model = list(coef(lm(Sepal.Width~Petal.Width))),
            .groups = 'drop')%>%
  unnest_wider(model)

 petal_type  sepal_type   `(Intercept)` Petal.Width
  <chr>       <chr>                <dbl>       <dbl>
1 petal_long  flower_long           2.33      0.355 
2 petal_long  flower_short          2.86     -0.0186
3 petal_short flower_long           2.8      NA     
4 petal_short flower_short          3.62     -0.922 
于 2021-11-11T19:58:38.523 回答