在tidymodels中如何执行F检验比较两个拟合的线性回归模型?
方法1:直接提取底层模型对象传入anova()
你只需要用tidymodels自带的extract_fit_engine()函数,从拟合完成的workflow对象中提取出底层的lm模型对象,就可以直接传入anova()做F检验,和base R的效果完全一致:
# 提取底层lm模型做F检验 anova( extract_fit_engine(the_workflow_fit1a), extract_fit_engine(the_workflow_fit1) )
方法2:tidymodels生态的更优雅实现(多模型比较场景)
如果你需要批量比较多个嵌套模型,推荐用workflowsets包统一管理不同配方/模型的工作流,不需要手动逐个更新拟合:
library(workflowsets) # 先定义两个不同的配方 rec_full <- recipe(medv ~ ., data = Boston) rec_no_age_black <- rec_full %>% step_rm(age, black) # 构建工作流集,把要比较的配方都放进去 wflow_set <- workflow_set( preproc = list(full = rec_full, drop_age_black = rec_no_age_black), models = list(lm = lm_spec) ) # 批量拟合所有工作流 wflow_set_fit <- wflow_set %>% workflow_map("fit", data = Boston) # 提取所有模型的底层lm对象,做方差分析 wflow_set_fit %>% pull(result) %>% map(extract_fit_engine) %>% do.call(anova, .)
这种方式在需要比较3个及以上模型的时候,代码会更简洁易维护,也方便后续统一提取其他模型统计量做分析。
内容的提问来源于stack exchange,提问作者itsMeInMiami
相关产品推荐
相关产品推荐

