# bootstrp
自举抽样
函数库: TyStatistics
# 语法
bootstat, = bootstrp([rng],nboot,bootfun,d)
bootstat, = bootstrp([rng],nboot,bootfun,d1,...dN)
bootstat, = bootstrp(___;key=value)
bootstat,bootsam = bootstrp(___)
# 描述
bootstat, = bootstrp([rng],nboot,bootfun,d) 从 d 中提取 nboot bootstrap 数据样本,使用函数 bootfun 计算每个样本的统计信息,并将结果返回到 bootstat 中。 bootstrp 函数通过从 d 的行中进行替换抽样来创建每个引导样本。 输出参数 bootstat 的每一行都包含将 bootfun 应用于一个引导样本的结果。示例
bootstat, = bootstrp([rng],nboot,bootfun,d1,...,dN) 从 dl,...,dN 中的数据中提取 nboot bootstrap 样本。 dl,...,dN 中的非标量数据参数必须具有相同的行数 n。 bootstrp 函数通过从索引 1:n 中进行放回抽样并选择非标量 dl,...,dN 的相应行来创建每个引导样本。 该函数将 dl,...,dN 中的非标量数据样本和未更改的标量数据参数传递给 bootfun。示例
bootstat, = bootstrp(___;key=value) 除了先前语法中的任何输入参数组合之外,还使用一个或多个关键字参数指定选项。 例如,您可以向数据添加观察权重或并行计算引导迭代。示例
bootstat, bootsam = bootstrp(___) 还返回 bootsam,一个 n×nboot 引导样本索引矩阵,其中 n 是原始非标量数据中的行数。 bootsam 中的每一列对应一个引导程序样本,并包含从非标量数据中提取的值的行索引以创建该样本。
要在不对样本应用函数的情况下获取引导样本索引,请将 bootfun 设置为nothing。示例
# 示例
随机样本的自举均值样本
从均值为 5 的指数分布生成 100 个随机数。
using TyBase
using TyMath
using TyStatistics
rng = MT19937ar(5489)
y = exprnd(rng,5,100);
计算从向量 y 中提取的随机样本的 100 个自举均值样本。
m, = bootstrp(rng,100,mean,y);
引导多重统计
计算并绘制 100 个 bootstrap 样本的均值和标准差。
从均值为 5 的指数分布生成 100 个随机数。
using TyPlot
using TyMath
using TyStatistics
rng = MT19937ar(5489)
y = exprnd(rng,5,100);
计算从向量 y 中提取的随机样本的 100 个自举均值和标准差样本。
stats, = bootstrp(rng,100,x->[mean(x) std(x)],y);
绘制引导估计对。
plot(stats[:,1],stats[:,2],"o")
xlabel("Mean")
ylabel("Standard Deviation")
观察的 Bootstrap 样本
获取患者数据的引导样本,计算每个数据样本的平均测量值,并可视化结果。
加载患者数据集。 创建包含年龄、体重和身高测量值的矩阵 patientData。 每行 patientData 对应一位患者。
using TyPlot
using TyMath
using TyStatistics
pkg_dir = pkgdir(TyStatistics)
source_path = pkg_dir * "/examples/ProbabilityDistributions/ResamplingTechniques/bootstrp/bootstrp_data1.jl"
include(source_path)
从 patientData 中的数据创建 200 个 bootstrap 数据样本。 要创建每个样本,请从 patientData 的行中随机选择替换 100 行(即 size(patientData,1))。 对于每个样本,计算平均年龄、体重和身高测量值。 bootstat 的每一行都包含一个 bootstrap 样本的三个平均测量值。
rng = MT19937ar(5489)
bootstat, = bootstrp(rng, 200, x -> mean(x; dims=1), patientData);
可视化所有 200 个 bootstrap 数据样本的平均测量值。 请注意,具有较大平均权重的 bootstrap 样本往往具有较大的平均身高。
scatter3(bootstat[:,1],bootstat[:,2],bootstat[:,3])
xlabel("Mean Age")
ylabel("Mean Weight")
zlabel("Mean Height")
TyPlot.ty_view([-75 10])
自举相关系数标准误差
使用样本数据的自举重采样计算相关系数标准误差。
using TyPlot
using TyMath
using TyStatistics
pkg_dir = pkgdir(TyStatistics)
source_path = pkg_dir * "/examples/ProbabilityDistributions/ResamplingTechniques/bootstrp/bootstrp_data2.jl"
include(source_path)
rng = MT19937ar(5489)
size(lsat)
(15,)
size(gpa)
(15,)
通过对 15 个数据点重新采样创建 1000 个数据样本,并计算每个数据样本的两个变量之间的相关性。
bootstat,bootsam = bootstrp(rng,1000,corr,lsat,gpa);
显示前 5 个自举相关系数。
bootstat[1:5,:]
5×1 Matrix{Float64}:
0.9874318127360321
0.49182343316828536
0.5458721014685571
0.8457742209888193
0.8958666551372716
显示为前 5 个 bootstrap 样本选择的数据的索引。
bootsam[:,1:5]
15×5 Matrix{Int64}:
13 3 11 8 12
14 7 1 7 4
2 14 5 10 8
14 12 1 11 11
10 15 2 12 14
2 10 13 5 15
5 1 11 11 9
9 13 5 10 3
15 15 15 3 3
15 11 1 2 4
3 12 7 8 13
15 12 6 15 4
15 6 12 6 13
8 10 12 9 4
13 3 3 4 14
创建一个直方图,显示所有 bootstrap 样本之间相关系数的变化。
histogram(bootstat)
样本最小值为正,表明 LSAT 分数和 GPA 之间的关系不是偶然的。
最后,为估计的相关系数计算引导误差标准。
se = std(bootstat)
se = 0.12852494511678406
比较具有不同观察权重的 Bootstrap 样本
比较具有不同观察权重的 bootstrap 样本。 创建一个自定义函数来计算每个样本的统计信息。
从数字 1 到 6 创建 50 个 bootstrap 样本。为了创建每个样本,bootstrp 从数字 1 到 6 中随机选择六次替换。 这个过程类似于掷骰子六次。 对于每个样本,自定义函数 countfun(显示在本例末尾)计算样本中 1 的数量。
using TyPlot
using TyMath
using TyStatistics
rng = MT19937ar(5489)
counts, = bootstrp(rng, 50, t -> count(isone, t; dims=1), 1:6);
从数字 1 到 6 创建 50 个 bootstrap 样本,但为数字分配不同的权重。 每次 bootstrp 从数字 1 到 6 中随机选择,选择 1 的概率为 0.5,选择 2 的概率为 0.1,以此类推。 同样,countfun 计算每个样本中 1 的数量。
weights = [0.5,0.1,0.1,0.1,0.1,0.1];
weightedCounts, = bootstrp(rng, 50, t -> count(isone, t; dims=1), 1:6; weights=weights);
使用直方图比较两组 bootstrap 样本。
histogram(counts)
hold("on")
histogram(weightedCounts)
legend(["counts", "weightedCounts"])
xlabel("Number of 1s in Sample")
ylabel("Number of Samples")
hold("off")
两组 bootstrap 样本具有不同的分布; 特别是,第二组中的样本往往包含更多的 1。 例如,在第一组的 50 个样本中,只有两个样本包含两个以上的 1。 相比之下,在第二组(具有观察权重)的 50 个样本中,12+14+4+2=32 个样本包含两个以上的 1。
# 输入参数
nboot - 自举样本数正整数标量
要绘制的引导样本数,指定为正整数标量。 为了创建每个 bootstrap 样本,bootstrp 从 d 或 d1,...,dN 中的 n 行非标量数据中随机选择替换 n。
示例: 100
数据类型: Int8 |Int16 |Int32 |Int64 |Int128 |UInt8 |UInt16 |UInt32 |UInt64 |UInt128 |Bool
bootfun - 应用于每个样本的函数函数句柄
应用于每个样本的函数,指定为函数句柄。 该函数可以是自定义函数或内置函数。
示例: mean
数据类型: Function
d - 从中抽样的数据标量 | 向量 | 矩阵
要从中采样的数据,指定为列向量或矩阵。 d 的 n 行对应于观察值。 当您使用多个数据输入参数 d1,...,dN 时,您可以将一些参数指定为标量值,但所有非标量参数必须具有相同的行数。
如果使用单个向量参数 d,则可以将其指定为行向量。 bootstrp 然后从向量的元素中采样。
数据类型: Float32 |Float64 |Int8 |Int16 |Int32 |Int64 |Int128 |UInt8 |UInt16 |UInt32 |UInt64 |UInt128 |Bool
# 关键字参数
将可选参数对指定为 Name1=Value1,...,NameN=ValueN,其中 Name 是参数名称,Value 是相应的值。 关键字参数必须出现在其他参数之后,但对的顺序无关紧要。
示例: bootstrp(4,mean,1:2,weights=[0.4,0.6]) 指定从值 1 和 2 中抽取四个 bootstrap 样本并取每个样本的平均值。 对于每次开奖,获得 1 的概率为 0.4,获得 2 的概率为 0.6。
weights - 观察权重 ones(n)/n(默认)| 非负向量
观察权重,指定为具有至少一个正元素的非负向量。 weights 中的元素数必须等于数据 d 或 d1,...,dN 中的行数 n。 为了获得一个 bootstrap 样本,bootstrp 使用这些权重作为多项式抽样概率,从 n 行数据中随机选择替换 n 行。
数据类型: Float32 |Float64 |Int8 |Int16 |Int32 |Int64 |Int128 |UInt8 |UInt16 |UInt32 |UInt64 |UInt128 |Bool
# 输出参数
bootstat - 引导统计列向量 | 矩阵
bootsam - Bootstrap样本索引数值矩阵
Bootstrap 样本索引,以 n×nboot 数值矩阵形式返回,其中 n 是原始非标量数据中的行数。 bootsam 中的每一列对应一个引导程序样本,并包含从非标量数据中提取的值的行索引以创建该样本。
例如,如果 d1,...,dN 中的每个数据输入参数包含 16 个值,并且 nboot = 4,则 bootsam 是一个 16×4 矩阵。 第一列包含第一个 bootstrap 样本从 d1,...,dN 中抽取的 16 个值的索引,第二列包含第二个 bootstrap 样本的索引,依此类推。 bootstrap 索引对于所有输入数据集 d1,...,dN 都是相同的。
# 提示
- 要在不对样本应用函数的情况下获取引导样本索引 bootsam,请将 bootfun 设置为 nothing。