【问题标题】:How to properly compare numbers in scientific notation using R? [duplicate]如何使用 R 正确比较科学计数法中的数字? [复制]
【发布时间】:2022-01-22 11:20:06
【问题描述】:

我正在阅读 following tutorial 以测试两个人群的比例。运行后

prop.test(x=c(342,290), n=c(400,400))

我收到了 9.558674e-06 的 p 值,教程说它大于 0.05 的 alpha 水平。我认为这是一个错字,只是将 p 值与其十进制值 0.000009558674 进行比较,但收到“False”。我什至关闭了科学记数法使用

options(scipen=999)

当从 prop.test 返回的对象中打印出 p 值时,在将 p 值与 0.000009558674 进行比较时,我仍然收到“False”,它认为 p 值小于。为什么会这样?

【问题讨论】:

  • 我对您的问题的理解是,您将 9.559e-06(四舍五入)与 9.558674e-06 进行比较,这可能小于或大于取决于未四舍五入的值?
  • 浮点相等(尤其是高精度数字)应该小心测试;更好的比较是查看绝对差异是否低于阈值。例如,abs(9.559e-06 - 0.000009558674) < 1e-9 为真,表示这些数字非常相似。对于浮点相等,请参阅stackoverflow.com/q/9508518stackoverflow.com/q/588004en.wikipedia.org/wiki/IEEE_754
  • 抱歉,原帖有错别字。我收到的 p 值为 9.558674e-06。
  • 见 r2evans 的回答。浮点数的相等性永远无法真正正确地测试。
  • 这是一个常见问题。请参阅 R 常见问题解答:cran.r-project.org/doc/FAQ/…

标签: r p-value proportions


【解决方案1】:

您可能需要考虑使用all.equal() 函数。可以使用tolerance 参数设置值之间的容差。

isTRUE(all.equal(2, 2.00000001))
##  [1] TRUE
isTRUE(all.equal(2, 2.00000001, tolerance = 0.0000000001))
##  [1] FALSE

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-27
    • 1970-01-01
    • 1970-01-01
    • 2021-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多