Извлеките размеры выборки модели, используя `метлу` в R - PullRequest
0 голосов
/ 24 апреля 2020

Пакет broom очень удобен для извлечения практически всего, что вы хотите от модели. Но есть ли способ получить размер выборки (количество наблюдений)? Возьмем следующий пример:

library(tidyverse)
library(broom)

data(iris)

iris %>% 
  as_tibble() %>% 
  nest(data = c(-Species)) %>% 
  mutate(
    model = map(data, ~ lm(Petal.Width ~ Petal.Length, data = .x)),
    tidied = map(model, tidy),
    fit = map(model, glance)
  ) %>% 
  select(Species, tidied, fit) %>% 
  unnest(tidied) %>% 
  rename(t.statistic = statistic,
         t.p = p.value) %>% 
  unnest(fit) %>% 
  rename(f.statistic = statistic,
         f.p = p.value)
# A tibble: 6 x 17
  Species term  estimate std.error t.statistic      t.p r.squared adj.r.squared sigma
  <fct>   <chr>    <dbl>     <dbl>       <dbl>    <dbl>     <dbl>         <dbl> <dbl>
1 setosa  (Int~  -0.0482    0.122       -0.396 6.94e- 1     0.110        0.0914 0.100
2 setosa  Peta~   0.201     0.0826       2.44  1.86e- 2     0.110        0.0914 0.100
3 versic~ (Int~  -0.0843    0.161       -0.525 6.02e- 1     0.619        0.611  0.123
4 versic~ Peta~   0.331     0.0375       8.83  1.27e-11     0.619        0.611  0.123
5 virgin~ (Int~   1.14      0.379        2.99  4.34e- 3     0.104        0.0851 0.263
6 virgin~ Peta~   0.160     0.0680       2.36  2.25e- 2     0.104        0.0851 0.263
# ... with 8 more variables: f.statistic <dbl>, f.p <dbl>, df <int>, logLik <dbl>,
#   AIC <dbl>, BIC <dbl>, deviance <dbl>, df.residual <int>

Строка кода (1) объединяет данные по видам, (2) запускает модель, используя map для каждого вида, и (3) выводит результирующие данные.

Есть ли простой способ также получить здесь количество наблюдений для каждой модели? Я не хочу полагаться на вычисления с использованием степеней свободы.

1 Ответ

0 голосов
/ 25 апреля 2020

Степени свободы и остаточные степени свободы доступны от объекта, созданного broom::glance().

library(broom)

aModel <- lm(Petal.Width ~ Petal.Length, data = iris)
aGlance <- glance(aModel)
aGlance$df
aGlance$df.residual

... и выходные данные:

> aGlance$df
[1] 2
> aGlance$df.residual
[1] 148
> 

Мы можем проверить точность, сравнив эти числа со сводными данными стандартной модели.

> summary(aModel)

Call:
lm(formula = Petal.Width ~ Petal.Length, data = iris)

Residuals:
     Min       1Q   Median       3Q      Max 
-0.56515 -0.12358 -0.01898  0.13288  0.64272 

Coefficients:
              Estimate Std. Error t value Pr(>|t|)    
(Intercept)  -0.363076   0.039762  -9.131  4.7e-16 ***
Petal.Length  0.415755   0.009582  43.387  < 2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.2065 on 148 degrees of freedom
Multiple R-squared:  0.9271,    Adjusted R-squared:  0.9266 
F-statistic:  1882 on 1 and 148 DF,  p-value: < 2.2e-16

> 

Модель использует 2 степени свободы из-за перехвата и Petal.Length, оставляя 148 степеней свободы в кадре данных, который начинается с 150 наблюдений.

...