R语言分段回归工资预测及年龄相关性阈值求解问询
问题1:各分段模型下30岁人群的wage预测
直接构造仅包含age=30的新数据集,调用tidymodels内置的predict()方法即可完成预测,不需要额外调用extract系列函数,同时支持输出置信区间:
# 构造待预测数据集 new_data <- tibble(age = 30) # 批量生成所有模型的预测结果 model_list <- list(pw3 = pw3_wf_fit, pw4 = pw4_wf_fit, pw5 = pw5_wf_fit, pw6 = pw6_wf_fit) map_dfr(model_list, ~bind_cols(new_data, predict(.x, new_data), predict(.x, new_data, type = "conf_int")), .id = "model")
返回结果中.pred列就是对应模型下30岁人群的wage预测值,.pred_lower和.pred_upper分别为95%置信区间的上下限。
问题2:pw6_wf_fit模型下age与wage相关性最强的分界点
你用step_discretize做的是分箱阶跃回归,每个age分箱内的预测wage为固定均值,要找相关性最强的区间可以先提取分箱断点,再计算每个区间内age和wage的相关系数,取系数绝对值最大的区间左端点即可:
# 提取6断点分箱的所有分界值 pw6_breaks <- tidy(extract_recipe(pw6_wf_fit), number = 1) %>% pull(value) %>% as.numeric() %>% sort() # 给原始数据添加age分箱标签 Wage_with_bin <- Wage %>% mutate(age_bin = cut(age, breaks = c(-Inf, pw6_breaks, Inf))) # 计算每个分箱内age与wage的皮尔逊相关系数 bin_corr <- Wage_with_bin %>% group_by(age_bin) %>% summarise(corr = cor(age, wage), min_age = min(age)) %>% arrange(desc(abs(corr))) # 输出相关性最强区间的最小age值 bin_corr$min_age[1]
如果要判断相邻分箱的wage变化幅度最大的分界点,也可以直接提取模型系数,找绝对值最大的系数对应的分箱分界点:
# 提取pw6模型的回归系数 pw6_coef <- tidy(extract_fit_parsnip(pw6_wf_fit)) pw6_coef %>% arrange(desc(abs(estimate)))
内容的提问来源于stack exchange,提问作者tim
相关产品推荐
相关产品推荐

