我有 383 个样本对某些常见值有很大偏差,我将如何计算平均值的 95% CI?我计算的 CI 似乎有些偏离,我认为这是因为当我制作直方图时我的数据看起来不像曲线。所以我认为我必须使用诸如引导程序之类的东西,我不太了解。
如何计算非正态分布的置信区间?
机器算法验证
置信区间
意思是
2022-02-04 01:54:23
4个回答
是的,bootstrap 是获取均值置信区间的一种替代方法(如果您想了解该方法,则必须付出一些努力)。
思路如下:
- 用替换 B 次重新采样。
- 对于这些样本中的每一个,计算样本均值。
- 计算适当的引导置信区间。
关于最后一步,有几种类型的引导置信区间 (BCI)。以下参考文献讨论了不同类型 BCI 的属性:
http://staff.ustc.edu.cn/~zwp/teach/Stat-Comp/Efron_Bootstrap_CIs.pdf
http://www.tau.ac.il/~saharon/Boot/10.1.1.133.8405.pdf
计算多个 BCI 并尝试了解它们之间可能存在的差异是一种很好的做法。
在 R 中,您可以使用 R 包 'boot' 轻松实现这个想法,如下所示:
rm(list=ls())
# Simulated data
set.seed(123)
data0 = rgamma(383,5,3)
mean(data0) # Sample mean
hist(data0) # Histogram of the data
library(boot)
# function to obtain the mean
Bmean <- function(data, indices) {
d <- data[indices] # allows boot to select sample
return(mean(d))
}
# bootstrapping with 1000 replications
results <- boot(data=data0, statistic=Bmean, R=1000)
# view results
results
plot(results)
# get 95% confidence interval
boot.ci(results, type=c("norm", "basic", "perc", "bca"))
另一种标准替代方法是使用 Wilcoxon 检验计算 CI。在 R 中
wilcox.test(your-data, conf.int = TRUE, conf.level = 0.95)
不幸的是,它为您提供了(伪)中位数周围的 CI,而不是均值,但是如果数据严重不正常,则中位数可能是一种更具信息性的度量。
对于对数正态数据,Olsson (2005)建议使用“改进的 Cox 方法”
如果是对数正态分布且的置信区间为:
其中,的样本均值是的样本方差是。对于 df,使用 n-1。
R函数如下:
ModifiedCox <- function(x){
n <- length(x)
y <- log(x)
y.m <- mean(y)
y.var <- var(y)
my.t <- qt(0.975, df = n-1)
my.mean <- mean(x)
upper <- y.m + y.var/2 + my.t*sqrt(y.var/n + y.var^2/(2*(n - 1)))
lower <- y.m + y.var/2 - my.t*sqrt(y.var/n + y.var^2/(2*(n - 1)))
return(list(upper = exp(upper), mean = my.mean, lower = exp(lower)))
}
重复 Olsson 论文中的例子
CO.level <- c(12.5, 20, 4, 20, 25, 170, 15, 20, 15)
ModifiedCox(CO.level)
$upper
[1] 78.72254
$mean
[1] 33.5
$lower
[1] 12.30929
您可以只使用平均值的标准置信区间:请记住,当我们计算平均值的置信区间时,我们可以诉诸中心极限定理并使用标准区间(使用 T 分布的临界点),即使基础数据不正常。事实上,只要数据是独立同分布且数据的分布具有有限方差,观测值的样本均值分布应该与正态分布几乎无法区分。即使数据的基础分布与正态分布极为不同,情况也会如此。
其它你可能感兴趣的问题