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

绘制Bootstrapped数据的置信区间宽度与样本量关系图

问题根源分析

你代码里的核心错误是计算了同一个变量与自身的相关系数:cor.test(baseRan$Ranpopsize[r], baseRan$Ranpopsize[r])。这种情况下,两个变量完全一致,相关系数必然是1,对应的置信区间宽度会趋近于0(也就是你看到的极小值),完全偏离了你原本的分析目标。

修正方案

首先明确你的核心需求:基于已有的1000个Bootstrap种群估计值,分析不同样本量下某个统计量(比如均值、或者真正的双变量相关)的置信区间宽度变化。以下针对两种常见场景给出修正代码:

场景1:估计Ranpopsize均值的置信区间宽度

这是最符合你“种群估计值”描述的场景,代码调整如下:

set.seed(144)
# 定义样本量序列,按你的需求设置步长
sample_sizes <- seq(10, 1000, 20)

# 循环计算每个样本量对应的平均置信区间宽度
ci.widths <- sapply(sample_sizes, function(n) {
  mean(replicate(1000, {
    # 从1000个Bootstrap估计值中抽取n个样本(有放回抽样符合Bootstrap逻辑)
    boot_sample <- sample(baseRan$Ranpopsize, n, replace = TRUE)
    # 计算均值的95%置信区间
    ci <- t.test(boot_sample)$conf.int
    # 计算区间宽度
    diff(ci)
  }))
})

# 绘制折线图(比散点图更直观展示趋势)
plot(sample_sizes, ci.widths, 
     xlab = "样本量", 
     ylab = "置信区间宽度",
     type = "l",
     main = "置信区间宽度随样本量变化趋势")

场景2:估计两个变量的相关系数置信区间宽度

如果你原本的目标是分析两个变量的相关性,只需确保传入cor.test的是两个不同变量即可:

set.seed(144)
sample_sizes <- seq(10, 1000, 20)

ci.widths <- sapply(sample_sizes, function(n) {
  mean(replicate(1000, {
    # 抽取行索引,同时获取两个变量的样本
    r <- sample(nrow(baseRan), n, replace = TRUE)
    ci <- cor.test(baseRan$VarA[r], baseRan$VarB[r])$conf.int
    diff(ci)
  }))
})

plot(sample_sizes, ci.widths, 
     xlab = "样本量", 
     ylab = "相关系数置信区间宽度",
     type = "l")
额外注意点

如果你的baseRan是从原始n=30样本生成的1000个Bootstrap估计值,若想模拟“从原始总体中抽取不同大小样本”的场景,应该基于原始30个样本重新进行Bootstrap抽样,而非从已有的1000个估计值中抽取——这取决于你的实验设计逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 21:55:20