Sparklyr中ml_generalized_linear_regression的tidy()函数报错排查
问题分析与解决方案
核心问题
使用sparklyr的ml_generalized_linear_regression()训练二分类模型后,调用tidy()函数报错,提示行数不匹配(38 vs 0),但ml_logistic_regression()可正常通过tidy()获取系数结果。
可能原因
sparklyr与broom适配问题:tidy()函数对ml_generalized_linear_regression模型的参数解析逻辑存在缺陷,无法正确识别模型输出的参数结构,导致拼接数据框时出现行数不匹配的错误。- 变量名潜在笔误:你的独热编码代码生成的变量是
var_1/var_2,但建模公式中写的是var1,若实际代码存在该差异,可能导致模型参数数量异常;不过你提到模型能运行,大概率是输入时的笔误。
解决办法
方法1:手动提取模型参数与标准差
绕过tidy(),直接从模型摘要中提取所需信息:
# 训练广义线性模型 glm_model <- dataset %>% ml_generalized_linear_regression(binaryoutcome ~ var_1 + continuousvar, family = "binomial") # 获取模型摘要 glm_summary <- summary(glm_model) # 提取系数、标准差等信息并转换为tibble coefficients_df <- tibble( term = names(glm_model$coefficients), estimate = glm_model$coefficients, std.error = glm_summary$coefficients[, "Std. Error"], statistic = glm_summary$coefficients[, "z value"], p.value = glm_summary$coefficients[, "Pr(>|z|)"] ) print(coefficients_df)
方法2:直接解析模型内置参数矩阵
通过模型对象的内部属性提取参数:
# 从模型摘要中获取系数矩阵 coef_matrix <- glm_model$summary$coefficients # 转换为标准tibble格式 coef_tibble <- as_tibble(coef_matrix, rownames = "term") colnames(coef_tibble) <- c("term", "estimate", "std.error", "statistic", "p.value") print(coef_tibble)
方法3:修正变量名一致性
确保建模公式中的变量名与独热编码生成的变量完全匹配:
# 修正变量引用,保证公式中的变量名和数据集中的一致 glm_model <- dataset %>% ml_generalized_linear_regression(binaryoutcome ~ var_1 + continuousvar, family = "binomial")
内容的提问来源于stack exchange,提问作者RoSull92
相关产品推荐
相关产品推荐

