在R中实现类似SAS PROC FREQ的计数加权汇总数据加载方法咨询
R实现SAS加权汇总数据处理等效方案
1. 加载汇总数据集
和SAS示例中的datalines输入逻辑完全对齐,可直接构造对应数据框:
# 构造与SAS示例一致的汇总计数数据集 q1 <- data.frame( resid = rep(c("urban", "rural"), each = 6), stress = rep(rep(c("low", "med", "high"), each = 2), 2), out = rep(c("fav", "unfav"), 6), count = c(55,34,66,64,107,89,40,25,57,47,88,60) )
2. 等效PROC FREQ的加权频数表实现
两种常用实现方案可按需选择:
- 基础包实现(无需额外安装依赖):
# 生成加权交叉表,可自行调整~后的变量匹配需求 weighted_table <- xtabs(count ~ resid + out, data = q1) print(weighted_table) # 按行/列计算百分比,margin=1为行百分比、margin=2为列百分比 prop.table(weighted_table, margin = 1)
janitor包实现(输出格式更贴合SAS PROC FREQ的频数+百分比组合展示):
# 首次使用需先安装包 # install.packages("janitor") library(janitor) q1 |> tabyl(resid, out, wt = count) |> adorn_percentages("row") |> adorn_pct_formatting(digits = 1) |> adorn_ns() # 同时展示原始计数和百分比
3. 等效PROC LOGISTIC的加权逻辑回归实现
R的广义线性回归函数原生支持计数权重,参数设置和SAS逻辑完全对齐:
# 先设置分类变量参考水平,和SAS的class ref参数完全匹配 q1$stress <- relevel(factor(q1$stress), ref = "low") q1$resid <- relevel(factor(q1$resid), ref = "urban") q1$out <- relevel(factor(q1$out), ref = "unfav") # 拟合加权逻辑回归模型 logit_model <- glm(out ~ stress + resid, data = q1, family = binomial(link = "logit"), weights = count) # 查看模型系数输出 summary(logit_model) # 输出OR值及95%置信区间 exp(cbind(OR = coef(logit_model), confint(logit_model)))
内容的提问来源于stack exchange,提问作者TimF
相关产品推荐
相关产品推荐

