gpt4 book ai didi

r - 从保存为 r 中列表列的模型中提取模型信息

转载 作者:行者123 更新时间:2023-12-03 04:52:12 25 4
gpt4 key购买 nike

我正在尝试从列表列中的模型中提取模型信息。使用 mtcars 来说明我的问题:

mtcars %>%  
nest(-cyl) %>%
mutate(model= map(data, ~lm(mpg~wt, data=.))) %>%
mutate(aic=AIC(model))

我得到的是错误消息:

Error in mutate_impl(.data, dots) : 
Evaluation error: no applicable method for 'logLik' applied to an object of class "list".

但是当我这样做时,它就起作用了。

mtcars %>%  
group_by(cyl) %>%
do(model= lm(mpg~wt, data=.)) %>%
mutate(aic=AIC(model))

谁能解释一下为什么吗?为什么第二种方法有效?我不明白。在这两种情况下,列表列“model”都包含 model info 。但可能会有一些差异...非常感谢。

最佳答案

让我们比较一下这两种方法之间的差异。除了最后一个 AIC 调用之外,我们还可以运行您的整个代码,并将结果保存到 ab

a <- mtcars %>%  
nest(-cyl) %>%
mutate(model= map(data, ~lm(mpg~wt, data=.)))

b <- mtcars %>%
group_by(cyl) %>%
do(model= lm(mpg~wt, data=.))

现在我们可以在控制台中打印结果。

a
# A tibble: 3 x 3
cyl data model
<dbl> <list> <list>
1 6 <tibble [7 x 10]> <S3: lm>
2 4 <tibble [11 x 10]> <S3: lm>
3 8 <tibble [14 x 10]> <S3: lm>

b
Source: local data frame [3 x 2]
Groups: <by row>

# A tibble: 3 x 2
cyl model
* <dbl> <list>
1 4 <S3: lm>
2 6 <S3: lm>
3 8 <S3: lm>

现在我们可以看到数据帧b按行分组,而数据帧a则不是。这是关键。

要提取数据帧a中的AIC,我们可以使用rowwise函数按每一行对数据帧进行分组。

mtcars %>%  
nest(-cyl) %>%
mutate(model= map(data, ~lm(mpg~wt, data=.))) %>%
rowwise() %>%
mutate(aic=AIC(model))

Source: local data frame [3 x 4]
Groups: <by row>

# A tibble: 3 x 4
cyl data model aic
<dbl> <list> <list> <dbl>
1 6 <tibble [7 x 10]> <S3: lm> 25.65036
2 4 <tibble [11 x 10]> <S3: lm> 61.48974
3 8 <tibble [14 x 10]> <S3: lm> 63.31555

或者我们可以使用 map_dbl 函数,因为我们知道每个 AIC 都是数字。

mtcars %>%  
nest(-cyl) %>%
mutate(model= map(data, ~lm(mpg~wt, data=.))) %>%
mutate(aic = map_dbl(model, AIC))

# A tibble: 3 x 4
cyl data model aic
<dbl> <list> <list> <dbl>
1 6 <tibble [7 x 10]> <S3: lm> 25.65036
2 4 <tibble [11 x 10]> <S3: lm> 61.48974
3 8 <tibble [14 x 10]> <S3: lm> 63.31555

关于r - 从保存为 r 中列表列的模型中提取模型信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45646430/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com