序数逻辑回归代码中with语句作用、结果含义及简化实现问询
序数逻辑回归教程代码与结果解析
一、代码with(dat, summary(as.numeric(apply) ~ pared + public + gpa, fun=sf))的作用
首先明确教程中自定义的sf函数逻辑:它用于计算两个统计量——分组内因变量的均值,以及因变量取最高水平(即apply=3,代表录取)的样本比例的logit变换值(qlogis(mean(x==3)))。
这段代码的完整功能:
with(dat, ...):在数据集dat的环境中执行代码,避免重复输入dat$前缀as.numeric(apply):将有序分类因变量apply(对应申请结果:1=不录取、2=等待、3=录取)转换为数值型as.numeric(apply) ~ pared + public + gpa:以pared(父母是否上过大学)、public(是否公立高中)为分组变量(gpa是连续变量,summary.formula仅按分类变量分组),对每组的数值型apply应用自定义函数sf- 最终输出各分组的样本量、因变量均值、录取概率的logit值等统计摘要
简言之:按父母学历、高中类型交叉分组,计算每组申请结果的数值均值与录取概率的logit变换值,并输出分组统计摘要。
二、结果第一行中-0.378336441和-2.4407354的含义
这两个值是自定义函数sf返回的两个统计量:
- -0.378336441:该分组内申请结果的数值均值(即
mean(as.numeric(apply))),反映组内整体申请结果的平均水平 - -2.4407354:该分组中获得录取(
apply=3)的样本比例的logit变换值(即qlogis(录取人数/组内总人数)),logit变换将0-1之间的概率转换为整个实数域的数值,是序数逻辑回归中常用的变换方式
三、获取这些值的简化代码
方法1:使用dplyr(直观易读)
library(dplyr) dat %>% group_by(pared, public) %>% summarize( mean_apply = mean(as.numeric(apply)), logit_admit = qlogis(mean(apply == 3)), .groups = "drop" )
方法2:使用基础R的aggregate(无需额外包)
aggregate( cbind(mean_apply = as.numeric(apply), admit_flag = I(apply == 3)) ~ pared + public, data = dat, FUN = function(x) if (is.logical(x)) qlogis(mean(x)) else mean(x) )
内容的提问来源于stack exchange,提问作者li jiaqi
相关产品推荐
相关产品推荐

