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

R语言函数编写报错:产生NaN,请求问题排查与修正

问题分析与修正方案

错误根源

你运行代码得到NaN的直接原因是:
输入的x=60.5、y=40.3远大于1,计算z = x*(1-x)和t = y*(1-y)时结果都是负数,两者求和后还是负数,对负数执行开平方(sqrt(l))操作就会产生NaN。

公式匹配问题

从你提供的公式来看:

  1. 第一个公式要求输入的是0到1之间的比例值(比如60.5%对应0.605),但你输入的是原始计数数值,完全不符合公式的输入要求。
  2. 补充的公式是两样本比例Z检验的标准公式,针对的是原始计数数据,需要同时提供两个样本的成功数和样本总量。

修正代码

情况1:输入为比例值(0-1之间)

如果你的数据是比例(比如0.605、0.403),可以用以下代码:

z_test_prop <- function(p1, p2){
  # 计算单个比例的方差
  var_p1 <- p1 * (1 - p1)
  var_p2 <- p2 * (1 - p2)
  # 合并方差的一半(对应你原公式的逻辑)
  combined_var <- (var_p1 + var_p2) / 2
  # 计算统计量
  return((p1 - p2) / sqrt(combined_var))
}

# 正确输入比例值
z_test_prop(0.605, 0.403)

情况2:输入为原始计数数据

如果60.5、40.3是样本中的成功计数,需要补充两个样本的总量n1、n2,按照补充公式实现:

z_test_count <- function(x, y, n1, n2){
  # 计算两个样本的比例
  p1 <- x / n1
  p2 <- y / n2
  # 计算合并比例
  p_hat <- (x + y) / (n1 + n2)
  # 计算标准误
  se <- sqrt(p_hat * (1 - p_hat) * (1/n1 + 1/n2))
  # 计算Z统计量
  return((p1 - p2) / se)
}

# 示例:假设两个样本总量都是100,替换成你的实际样本量即可
z_test_count(60.5, 40.3, 100, 100)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 18:52:50