数据分享|R语言Bootstrap、百分位Bootstrap法抽样参数估计置信区间分析通勤时间和学生锻炼数据

简介: 数据分享|R语言Bootstrap、百分位Bootstrap法抽样参数估计置信区间分析通勤时间和学生锻炼数据

原文链接:http://tecdat.cn/?p=27505


本文展示了如何使用 R 构建Bootstrap自举置信区间的示例。还强调了 R 包 ggplot2 用于图形的用途。但是,在学习Bootstrap程序和 R 语言时,学习如何在没有包的情况下从头开始应用Bootstrap程序有助于更好地理解 R 的工作原理并加强对Bootstrap的概念理解。


具有标准误差的bootstrap置信区间


描述了如何通过构建一个以点估计为中心的区间来构建总体参数的置信区间,其误差幅度等于标准误差的两倍。在这里,我们将通过应用 bootstrap 并从原始样本中对许多样本进行带放回抽样来估计标准误差的大小,每个样本与原始样本的大小相同,计算每个样本的点估计值,并找到该分布的标准差引导统计。


通勤时间


关于 500 名通勤者样本查看文末了解数据获取方式的变量。

str(Cotlaa)

为了构建平均通勤时间的置信区间,我们需要从原始样本中找到点估计(样本均值)。

tiean = with(Commta, mean(Time))
tiean
## \[1\] 29.11

为了找到标准误差,我们将创建一个包含 1000 行(每个引导样本一个)和 500 列(每个采样值一个,以匹配原始样本大小)的巨大矩阵。然后我们将使用 apply() 将 mean() 应用于矩阵的每一行。这种方法不同于作者 R 指南中使用 for 循环的示例,但我们也可以稍后展示这种方法。

首先创建一个大矩阵来存储所有样本。

boot.ames = matrix(sale(Comnta$Tie, size = B * n, replace = TRUE),
B, n)

用密度图覆盖直方图来绘制不同的东西。在这里,ggplot() 需要一个带有输入数据的数据框,因此我们使用 data.frame() 创建一个带有唯一感兴趣的变量的数据框

require(ggplot2)ggplot(dtframeanT = boot.satitics),as(x=meaime)) +geom_istram(binwih=0.25,aes(y=..ensity..)) +geodnity(olor"red")

我们看到了一个不太不对称的分布,或多或少呈钟形。


点击标题查阅往期内容


R语言BOOTSTRAP(自举法,自抽样法)估计回归模型置信区间分析股票收益


01

02

03

04


该分布的标准差如下

tie.s= sd(bo.sattics)
tie.s
## \[1\] 0.9414

最后,构建置信区间。在这里,我将误差范围向上舍入到小数点后一位,使其具有两位有效数字,并且在四舍五入时要小心不要使间隔太小。

me= cilig(10 * 2 * tim.se)/10rond(tme.an, 1) + c(-1, 1) * me## \[1\] 27.2 31.0

现在在上下文中解释。

我们有 95% 的信心认为,不在家工作的通勤者在平均通勤时间在 27.2 到 31 分钟之间。

编写函数


由于有几个复杂的步骤,所以有一个函数来完成所有这些步骤会很有用,这样将来我们可以在函数中获取源代码,然后调用它。这是一个示例函数,它接受一个参数 x,该参数假定为一个数字样本并执行 B 次引导。该函数会将有用的信息输出到控制台,绘制分布图,并以列表的形式返回统计、区间、标准误差和图表。

out= with(tdens botmean(eit))

## \[1\] 66.90 69.56out$interval## \[1\] 66.90 69.56

我们需要谨慎,因为学生样本不是随机的,而是我们班的方便样本。这里有两个可能的混淆变量:性别和原籍国。


for 循环


for 循环不是一次采集所有样本,而是一次采集一个样本。通常,使用 apply() 的 R 代码比使用 for 循环的代码更有效。尝试大量的 bootstrap 复制!

n = ngth(studentseiht)B = 100reslt = re(NA, )
fo(i in 1:) f
bo.sale= smpe(, replace = TRUE)
reult\[i\]  mean(udetsHeht\[bot.mple\])with(stdnt, men(Hit) + c(-1, 1) * 2 * sd(result))## \[1\] 66.89 69.58

比例


考虑估计橙色里斯糖果的比例问题。选择了一个有 11 个橙色糖果和 19 个非橙色糖果的学生。让我们使用 bootstrap 找到橙色 Reese 比例的 95% 置信区间。最简单的方法是将样本数据表示为具有 11 个 1 和 19 个 0 的向量,并使用与样本均值相同的机器

rees.bot= bot.man(rees, 1000,nwith = 1/30)

## \[1\] 0.1947 0.5386

因此,仅基于这个单一样本,我们有 95% 的信心认为橙色的真实比例在 0.19 到 0.54 之间。如果我们将所有 48 个样本组合成一个大样本,我们可以重做这个问题。观察到的比例为 0.515,共有 741 个橙色糖果和 699 个非橙色糖果。

reeses = c(rep(1, 741), rep(0, 699))reeses.boot = boot.mean(reeses, 1000, binwidth = 0.005)

## \[1\] 0.4888 0.5404


均值差异


我将使用学生调查数据集来说明如何使用 bootstrap 来估计均值的差异。有趣的变量是联系,每周每个学生练习的小时数。

data(Stey)

 

我们从这个总结中看到,在样本中,男性每周锻炼的时间比女性多。如果我们将此学生样本视为从大学生群体中随机选择的,我们可以估计每种性别的锻炼时间差异。

在构建置信区间之前,这里是两个分布的图表。

geom_boxpot(lor=red,ouolor="ed") +


geom\_oin(poitio  osio\_jitt(h=0w=0.3)) +

我们使用 length() 来查找每个组的样本大小。请注意,女性人数为 n[1],男性人数为 n[2]。

n = withnewSt、nt, by(Ec Gende, lengh))

 

下一个代码块为样本中的男性和女性创建一个矩阵,每个样本的替换大小相同。然后我们使用 apply() 来微调每个样本的平均值并取差值(男性减去女性)来获得统计的分布。我们用图表来检查对称性。

ggplot(data.amex = oot.at), aes( = x)) + ge_ensty()

最后,取点估计(样本均值的差异)并加上和减去两倍的标准误差。查看未四舍五入的版本后,将两位有效数字四舍五入到小数点后一位。


boot包


有一个带有函数 boot() 的包 boot,它在许多情况下都可以进行boottrap。我将重温通勤时报的例子。

但是内置函数 boot.ci() 将使用多种方法计算 bootstrap confidenceintervals。

boot.ci(t.boot)

 

基本使用估计的标准误差。百分位数使用百分位数。BCa 也使用百分位数,但会根据偏差和偏度进行调整。


百分位bootstrap


使用来自 bootstrap 的百分位数的置信区间的想法是从 bootstrap 分布的中间选择与所需置信水平相对应的端点。

for ( i in 1:B ) f
te.boot\] = meanmplta,size=tea.neplTRU)
cofeebot\[i\] = eanampe(ffee,ize=cen,repla=TRUE)
gquatil(bot.tt0.025,0.975))quantie(boottac(0.005,0.995))


自测题


Below are some 1973 law school data, mean GPA and mean LSAT score for N=82 law schools. Compute approximate 95% CIs by bootstrapping for: (a) the mean GPA mean; (b) the mean LSAT mean; (c) the correlation between GPA mean and LSAT mean, at the school level.  Do all of these calculations for a sample of size n=15, and then repeat for a sample of size n=20. Note that you'll get somewhat different answers for different choices of sample, for each size (15 and 20). You can explore the importance of the particular sample chosen, of course, by repeating the process. Be careful not to conflate the bootstrap process and the repetition of sampling from the "population."  In a typical boostrap computation, you would have only a sample of size 15 (or 20) and not the "population" of 82, and the boostrap procedure does not require that you have the 82 data points (or it wouldn't be very helpful).


目录
打赏
0
0
1
0
111
分享
相关文章
R语言从数据到决策:R语言在商业分析中的实践
【9月更文挑战第1天】R语言在商业分析中的应用广泛而深入,从数据收集、预处理、分析到预测模型构建和决策支持,R语言都提供了强大的工具和功能。通过学习和掌握R语言在商业分析中的实践应用,我们可以更好地利用数据驱动企业决策,提升企业的竞争力和盈利能力。未来,随着大数据和人工智能技术的不断发展,R语言在商业分析领域的应用将更加广泛和深入,为企业带来更多的机遇和挑战。
R语言数据变换:使用tidyr包进行高效数据整形的探索
【8月更文挑战第29天】`tidyr`包为R语言的数据整形提供了强大的工具。通过`pivot_longer()`、`pivot_wider()`、`separate()`和`unite()`等函数,我们可以轻松地将数据从一种格式转换为另一种格式,以满足不同的分析需求。掌握这些函数的使用,将大大提高我们处理和分析数据的效率。
|
6月前
R语言基于表格文件的数据绘制具有多个系列的柱状图与直方图
【9月更文挑战第9天】在R语言中,利用`ggplot2`包可绘制多系列柱状图与直方图。首先读取数据文件`data.csv`,加载`ggplot2`包后,使用`ggplot`函数指定轴与填充颜色,并通过`geom_bar`或`geom_histogram`绘图。参数如`stat`, `position`, `alpha`等可根据需要调整,实现不同系列的图表展示。
107 9
R语言在金融数据分析中的深度应用:探索数据背后的市场智慧
【9月更文挑战第1天】R语言在金融数据分析中展现出了强大的功能和广泛的应用前景。通过丰富的数据处理函数、强大的统计分析功能和优秀的可视化效果,R语言能够帮助金融机构深入挖掘数据价值,洞察市场动态。未来,随着金融数据的不断积累和技术的不断进步,R语言在金融数据分析中的应用将更加广泛和深入。
R语言数据清洗:高效处理缺失值与重复数据的策略
【8月更文挑战第29天】处理缺失值和重复数据是数据清洗中的基础而重要的步骤。在R语言中,我们拥有多种工具和方法来有效地应对这些问题。通过识别、删除或插补缺失值,以及删除重复数据,我们可以提高数据集的质量和可靠性,为后续的数据分析和建模工作打下坚实的基础。 需要注意的是,处理缺失值和重复数据时,我们应根据实际情况和数据特性选择合适的方法,并在处理过程中保持谨慎,以避免引入新的偏差或错误。
R语言数据合并:掌握`merge`与`dplyr`中`join`的巧妙技巧
【8月更文挑战第29天】如果你已经在使用`dplyr`进行数据处理,那么推荐使用`dplyr::join`进行数据合并,因为它与`dplyr`的其他函数(如`filter()`、`select()`、`mutate()`等)无缝集成,能够提供更加流畅和一致的数据处理体验。如果你的代码中尚未使用`dplyr`,但想要尝试,那么`dplyr::join`将是一个很好的起点。
R语言时间序列分析:处理与建模时间序列数据的深度探索
【8月更文挑战第31天】R语言作为一款功能强大的数据分析工具,为处理时间序列数据提供了丰富的函数和包。从数据读取、预处理、建模到可视化,R语言都提供了灵活且强大的解决方案。然而,时间序列数据的处理和分析是一个复杂的过程,需要结合具体的应用场景和需求来选择合适的方法和模型。希望本文能为读者在R语言中进行时间序列分析提供一些有益的参考和启示。
Bootstrap的CSS组件
Bootstrap的CSS组件
N..
90 0
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等