在不使用 tidy 的情况下提取受限制的回归系数

Extract restricted regression coefficients without using tidy

我正在使用 restriktor 包来执行受限回归;然而,与此同时,我正在使用 dplyr 按组进行受限回归。为了提取系数并将它们格式化为漂亮的面板格式,我使用了 tidy 和 broom,但是 tidy 包在限制器上不起作用,所以我不确定如何提取系数:

library(restriktor)
library(dplyr)
reg = 
  mtcars %>%
  group_by(cyl) %>%
  do(model = restriktor(lm(mpg ~ wt + hp, data =.), constraints = ' wt  < -4 '))

我想要b.restr,它是要为每个组提取的受限模型系数,并且通常一起格式化成一个面板我会使用以下内容:

reg = 
  mtcars %>%
  group_by(cyl) %>%
  do({model = restriktor(lm(mpg ~ wt + hp, data =.), constraints = ' wt  < -4 ')    # create your model
  data.frame(tidy(model),              # get coefficient info
             glance(model))})

但我收到以下错误:

Error: No tidy method for objects of class restriktor

我只想从列表中提取以下元素,并将它们与它们的组标识符一起放在一个面板格式中:

reg[[2]][[1]][["b.restr"]]

group_modify(现在优于 do)与 coef/as.list/as_tibble.

一起使用
library(dplyr)
library(restriktor)

# coefficients and R2's or NAs if too few rows for restriktor
co <- function(fo, data) {
   fm <- lm(fo, data)
   coef_lm <- coef(fm)
   min_rows <- length(coef_lm)
   if (nrow(data) <= min_rows) NA * c(coef_lm, R2.org = NA, R2.reduced = NA)
   else {
    r <- restriktor(fm, constraints = ' wt  < -4 ')
    c(coef(r), R2.org = r$R2.org, R2.reduced = r$R2.reduced)
   }
}


mtcars %>%
  group_by(cyl) %>%
  group_modify(~ {
    .x %>%
      co(mpg ~ wt + hp, .) %>%
      as.list %>%
      as_tibble
  }) %>%
  ungroup

给予:

 tibble: 3 x 6
    cyl `(Intercept)`    wt      hp R2.org R2.reduced
  <dbl>         <dbl> <dbl>   <dbl>  <dbl>      <dbl>
1     4          45.8 -5.12 -0.0905  0.681      0.681
2     6          35.3 -4    -0.0256  0.589      0.667
3     8          33.9 -4    -0.0132  0.497      0.652