【问题标题】:Is there an easier way to write a function like this to calculate the confidence interval?有没有更简单的方法来编写这样的函数来计算置信区间?
【发布时间】:2025-12-20 02:50:16
【问题描述】:

在编写一个小函数来计算某个样本的99%置信区间时,

我得到的答案与 R t.test 公式不同。 这是我的功能:

confinterval <- function(x,alpha){
  alpha = 0.01
  df = length(x)-1
  pos_confinterval = mean(x) + qt((1 - alpha/2),df)*(var(x)/length(x))
  neg_confinterval = mean(x) - qt((1 - alpha/2),df)*(var(x)/length(x))

  cut_points <- c(neg_confinterval,pos_confinterval)
  return(cut_points)
}

confinterval(data) 给了我以下切点向量 (4.469488 4.598704) 尽管 : t.test(data,conf.level=.995) 产量 (4.064382 5.003810)

有没有更简单的方法来获得这样的函数来计算置信区间?

【问题讨论】:

  • qt((1 - alpha/2),df) 更改为qt(1 - ((1 - alpha) / 2), df)(var(x)/length(x)) 更改为sd(x) / sqrt(length(x)-1) 应该会让您非常接近
  • 谢谢,我忘了用 sd() 代替 var()
  • 但是 qt() 采用切点或百分位数,在这里我需要 qt(.995, df) 对吗?而你的会产生: qt(0.505,df)
  • 您原来的qt 是正确的,但正如@duckmayr 所说,您需要标准差而不是方差样本大小的平方根。
  • 是的,你说的很对,对不起。正在考虑您的 t.test() 调用并希望匹配参数和输出!刚刚转过身来

标签: r


【解决方案1】:

(旁白:您的意思是将alpha = 0.01 行作为函数的一部分吗?我假设在调用函数时应该将0.01 作为参数值传入,对吧?)

您得到的答案与 t.test 不同,因为您需要乘以 t 分布临界值的对象的平方根。如果将var(x) / length(x) 包裹在sqrt 中,您将得到与t.test 相同的结果。

您也可以使用as.numeric(t.test(x, conf.level = 0.99)$conf.int) 直接访问t.test 函数的结果。

【讨论】:

  • t.test(data,conf.level=.995) 是罪魁祸首之一。我不得不使用 0.99 而不是 0.995。谢谢!
最近更新 更多