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

如何在R语言boot包的bootstrap样本直方图中添加密度曲线?

解决Bootstrap抽样结果的密度曲线绘制问题

你可以通过两种方式实现需求:在现有直方图上叠加密度曲线,或者直接绘制密度曲线,核心是提取boot对象中存储的所有Bootstrap抽样结果(存在bootsample$t中)。

方法1:在直方图上叠加密度曲线

修改原有的plot()调用,先绘制直方图,再用lines()叠加密度曲线:

library(boot)
library(ISLR2)

# 加载ISLR2中的Portfolio数据集(你的alpha.fn针对该数据集设计)
data(Portfolio)

alpha.fn = function(data,index)
{
  X = data$X[index]
  Y = data$Y[index]
  (var(Y) - cov(X, Y)) / ( var(X) + var(Y) - 2 * cov(X, Y))
}

bootsample = boot(Portfolio, alpha.fn, R= 500)

# 绘制直方图,设置freq=FALSE让纵轴为密度(与密度曲线匹配)
plot(bootsample, index= 1, freq=FALSE, col="lightblue", 
     main="Bootstrap抽样结果:直方图+密度曲线")
# 计算并叠加密度曲线
lines(density(bootsample$t[,1]), col="darkred", lwd=2)

方法2:直接绘制密度曲线

如果只需要密度曲线,可直接对bootsample$t中的抽样结果调用density():

# 绘制密度曲线
plot(density(bootsample$t[,1]), col="darkred", lwd=2, 
     main="Bootstrap抽样结果的密度曲线", xlab="Alpha值")
# 可选:添加抽样点的rug图,更直观展示数据分布
rug(bootsample$t[,1], col="gray")

关键说明:

  • bootsample$t是一个矩阵,每一行对应一次Bootstrap抽样的结果,这里[,1]是因为你的alpha.fn仅返回单个值。
  • freq=FALSE参数让直方图纵轴切换为密度刻度,确保和密度曲线的纵轴比例一致,避免视觉上的不匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 19:03:08