You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R中fisher.test运行出现x取整警告的原因及代码修正方法

警告产生原因

Fisher精确检验的核心输入是实际观测到的样本计数列联表,所有单元格的值必须是非负整数——毕竟样本计数不可能存在0.75个花卉样本这类非整数值。
你代码中直接将原始列联表所有数值除以4的操作,生成的new.obs.tab包含大量非整数(例如47/4=11.75、1/4=0.25等)。fisher.test()函数检测到输入非整数时,会自动对所有值做四舍五入取整再运行检验,你看到的警告就是在告知这个自动取整操作,末尾的Mean relative difference: 0.07317073是取整前后数值的平均相对偏差。
额外需要注意:直接对汇总好的列联表做等比例缩放本身不符合统计逻辑——25%随机抽样是对单个花卉样本的独立抽取过程,最终得到的计数是整数结果,绝不会是原始计数等比例缩小的非整数,自动取整后的表格也无法代表真实抽样的观测结果,计算出的p值不具备实际科研解释价值。

代码修改方案

根据你的分析场景,有两种合规的修改方式:

  • 从原始个体级数据出发完成抽样,生成真实计数表
    不要对已汇总的列联表做数值缩放,而是基于Iris原始的单条样本数据,按25%比例做随机无放回抽样,再基于抽到的样本统计生成全为整数的列联表,再传入检验函数,从根源上避免非整数输入。示例代码如下:
    data(iris)
    set.seed(123) # 固定随机种子保证结果可复现
    # 按25%比例无放回抽取样本
    sampled_idx <- sample(seq_len(nrow(iris)), size = round(nrow(iris)*0.25), replace = FALSE)
    sampled_data <- iris[sampled_idx, ]
    
    # 以下部分替换为你实际使用的small/medium/large分类规则,和原始制表逻辑保持一致即可
    # 示例分类逻辑(需和你生成obs.tab的规则对齐)
    sampled_data$size_class <- cut(sampled_data$Petal.Length, breaks = c(-Inf, 2.5, 5, Inf), labels = c("small", "medium", "large"))
    
    # 生成整数计数列联表
    new.obs.tab <- table(sampled_data$Species, sampled_data$size_class)
    dimnames(new.obs.tab) <- list(c("setosa","versicolor","virginica"), c("small","medium","large"))
    
    # 运行检验,无警告
    fisher.test(new.obs.tab, alternative = "less")$p.value
    
  • 若仅为调试代码、必须基于现有汇总表运行,需显式完成整数转换
    如果你暂时拿不到原始个体数据,只是需要调试检验代码逻辑,可以显式将缩放后的数值转为整数,避免函数自动转换弹出警告。需要注意该方法会引入人为计数偏差,绝对不能用于正式科研结果输出。示例代码如下:
    obs.tab=matrix(c(47,11,1,3,36,32,0,3,17),nrow=3,
        dimnames=list(c("setosa","versicolor","virginica"),
                        c("small","medium","large")))
    # 显式做整数转换,告知函数你确认使用整数计数
    new.obs.tab <- round(obs.tab/4)
    # 运行检验无警告
    fisher.test(new.obs.tab,alternative ="less")$p.value
    

重要提示:正式科研分析中,列联表必须基于真实观测到的样本计数生成,任何对已有汇总表的缩放、取整操作都会破坏数据的真实性,导致检验结果失真。

内容的提问来源于stack exchange,提问作者Demo12

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.31 01:04:07