在 R 中使用“扫帚”提取模型样本大小
Extract model sample sizes using `broom` in R
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) 取消嵌套结果数据。
是否有一种简单的方法可以在此处同时获取每个模型的观测值数量?我不想依赖使用自由度的计算。
自由度和剩余自由度可从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
>
由于截距和 Petal.Length
,模型消耗了 2 个自由度,在以 150 个观测值开始的数据框中留下 148 个自由度。
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) 取消嵌套结果数据。
是否有一种简单的方法可以在此处同时获取每个模型的观测值数量?我不想依赖使用自由度的计算。
自由度和剩余自由度可从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
>
由于截距和 Petal.Length
,模型消耗了 2 个自由度,在以 150 个观测值开始的数据框中留下 148 个自由度。