逻辑回归模型DataFrame创建与类SAS格式结果导出问题求助
问题解决:生成完整的地点-性别-剂量组合DataFrame
原代码问题分析
你当前的new_data代码里,location和gender各仅2个元素,而dose是400个元素(100个剂量重复4次)。R会自动循环短向量匹配长向量长度,最终只会得到locationA-Male、locationB-Female这两种组合循环重复,无法覆盖所有4种预期组合(locationA-Male、locationA-Female、locationB-Male、locationB-Female)。
解决方法:生成全组合数据
以下两种方法都能生成每个剂量对应4组地点-性别组合的完整数据集:
方法1:Base R的expand.grid
直接用expand.grid生成三个变量的全笛卡尔积:
# 生成所有变量的全组合 new_data <- expand.grid( location = c('locationA', 'locationB'), gender = c('Male', 'Female'), dose = seq(9, 24, length.out = 100) )
执行后new_data会包含100*4=400行数据,每个剂量值对应4种地点-性别组合。
方法2:tidyverse的tidyr::crossing
如果习惯tidyverse语法,crossing函数更直观,且结果默认按变量排序:
library(tidyr) new_data <- crossing( location = c('locationA', 'locationB'), gender = c('Male', 'Female'), dose = seq(9, 24, length.out = 100) )
后续预测与导出(类SAS格式Excel)
生成完整数据集后,可直接用模型预测概率:
# 预测Damage的概率 new_data$pred_prob <- predict(Model, newdata = new_data, type = "response")
导出类SAS格式的Excel时,可使用openxlsx包设置符合SAS习惯的数值格式:
library(openxlsx) # 创建SAS风格的数值格式(保留6位小数) sas_style <- createStyle(numFmt = "0.000000") # 导出Excel,应用格式 write.xlsx( x = new_data, file = "logistic_regression_results.xlsx", colNames = TRUE, rowNames = FALSE, styles = list(pred_prob = sas_style) # 给预测概率列应用格式 )
内容的提问来源于stack exchange,提问作者user21288402
相关产品推荐
相关产品推荐

