R语言中按性别因子水平计算鸟类检测率95%置信区间的方法
问题原因
你得到不符合预期的结果是两个错误导致的:
- 调用
Hmisc::binconf时参数传错:该函数第一个参数是对应性别分组中outcome取值为1的总个数,第二个参数是对应性别分组的总调查次数。你之前传入的1475是雄性的总调查次数、2204是全数据集总记录数,计算出的是雄性样本占总样本的比例,和检测率完全无关。 - 你贴出的检测率计算代码存在笔误:
summarise(dr = mean(sex))应该写为mean(outcome),否则计算的是sex变量的均值,和检测率逻辑不符,你得到的59%、56%的结果应该是实际运行时写对了代码,粘贴时出现手误。
正确计算方法
方法1:基于已知数值直接计算
你已经知道雌性总调查次数为729、检测率56%,雄性总调查次数为1475、检测率59%,先算出对应分组的阳性数(outcome=1的数量)后直接传入函数即可:
# 计算雌性95%置信区间,729*0.56≈408为雌性阳性数 Hmisc::binconf(x = 408, n = 729) # 计算雄性95%置信区间,1475*0.59≈870为雄性阳性数 Hmisc::binconf(x = 870, n = 1475)
方法2:dplyr流水线自动计算
如果不想手动计算阳性数,可以直接在分组汇总逻辑中一次性输出检测率和95%置信区间:
library(dplyr) library(Hmisc) detection_sex_result <- df %>% group_by(sex) %>% summarise( total_n = n(), # 对应性别总调查次数 pos_n = sum(outcome == 1), # 对应性别outcome=1的总数量 detection_rate = pos_n / total_n, # 检测率点估计 ci_lower = binconf(pos_n, total_n)[, "Lower"], # 95%置信区间下限 ci_upper = binconf(pos_n, total_n)[, "Upper"] # 95%置信区间上限 )
运行上述代码后,detection_sex_result中会直接存储雌性、雄性对应的检测率和置信区间结果,和你之前得到的56%、59%的点估计完全匹配。
内容的提问来源于stack exchange,提问作者user17047272
相关产品推荐
相关产品推荐

