楼主: 天狮
6464 11

[有偿编程] 请教一个bootstrap问题 [推广有奖]

  • 1关注
  • 10粉丝

教授

34%

还不是VIP/贵宾

-

威望
1
论坛币
6236 个
通用积分
351.6122
学术水平
20 点
热心指数
35 点
信用等级
13 点
经验
18410 点
帖子
1404
精华
0
在线时间
529 小时
注册时间
2008-10-10
最后登录
2024-11-5

5论坛币
我在一本书上看到这样一个例子:
#给出15个观测值5,4,9,6,21,17,11,20,7,10,21,15,13,16,8
#求var(x)和var(s^2)的bootstrap估计,其中s^2是样本方差

书上是用bootstrap的定义去直接计算的,得到结果分别是32.925和53.957

但我想用bootstrap的boot 包去计算,我只会计算var(x)的bootstrap估计,过程如下:

library(boot)#当然要先下载安装boot包
set.seed(200)
x=c(5,4,9,6,21,17,11,20,7,10,21,15,13,16,8)
x.boot <- boot(x,function(x,i)var(x[i]),R=999)
x.boot

得到结果是34.31429,和直接计算结果差不多

但我不会用boot包去计算var(s^2), 希望老师和同学们能予以帮助,先行谢过!

最佳答案

epoh 查看完整内容

x=c(5,4,9,6,21,17,11,20,7,10,21,15,13,16,8) n=length(x) boot=10000 s2=NA*seq(1:boot) for(i in 1:boot) { xsamp=sample(x,n,replace = T) s2=sum((xsamp-mean(xsamp))^2)/(n-1) } var(s2) #[1] 57.49942
关键词:Bootstrap Bootstra boots boot Trap 请教 Bootstrap
沙发
epoh 发表于 2011-7-27 16:47:41 |只看作者 |坛友微信交流群
x=c(5,4,9,6,21,17,11,20,7,10,21,15,13,16,8)
n=length(x)
boot=10000
s2=NA*seq(1:boot)
for(i in 1:boot)
{
xsamp=sample(x,n,replace = T)
s2[i]=sum((xsamp-mean(xsamp))^2)/(n-1)
}
var(s2)
#[1] 57.49942
已有 2 人评分学术水平 热心指数 信用等级 收起 理由
zhangtao + 5 + 5 + 5 感谢epoh大师!
ywh19860616 + 5 + 5 + 5 非常热心

总评分: 学术水平 + 10  热心指数 + 10  信用等级 + 10   查看全部评分

使用道具

藤椅
zhangtao 发表于 2011-7-29 17:46:23 |只看作者 |坛友微信交流群
2# epoh

s2=NA*seq(1:boot)     epoh老师,您好!这一行是什么意思?NA并没有赋值,NA乘以seq序列是做什么用的?
非常感谢!
数学好就是要天天学

使用道具

板凳
天狮 发表于 2011-8-6 20:12:38 |只看作者 |坛友微信交流群
不好意思,最近出去玩了,才致许久没有回帖,对不起哈。毫无疑问,最佳答案是epoh大师。看来bootstrap方法我还没有领会精神,得要加油了。谨再谢!

使用道具

报纸
天狮 发表于 2011-8-6 20:16:10 |只看作者 |坛友微信交流群
但是epoh大师也是直接手工计算的,并没有用boot package来计算

使用道具

地板
天狮 发表于 2011-8-6 20:28:27 |只看作者 |坛友微信交流群
后来我在cos统计之都上找到了答案,现在贴出来供大家分享和讨论:
> library(boot)#当然要先下载安装boot包
> set.seed(200)
> x=c(5,4,9,6,21,17,11,20,7,10,21,15,13,16,8)
> x.boot <- boot(x,function(x,i)var(x[i]),R=999)
> x.boot

ORDINARY NONPARAMETRIC BOOTSTRAP


Call:
boot(data = x, statistic = function(x, i) var(x[i]), R = 999)


Bootstrap Statistics :
    original    bias    std. error
t1* 34.31429 -2.203737     7.32227
大家看到了std.error 下面对应的7.32227吗
var(x)的bootstrap估计就是7.32227的平方 53.61564


已有 1 人评分学术水平 热心指数 信用等级 收起 理由
zhangtao + 1 + 5 + 5 非常感谢你的分享!

总评分: 学术水平 + 1  热心指数 + 5  信用等级 + 5   查看全部评分

使用道具

7
天狮 发表于 2011-8-6 20:30:52 |只看作者 |坛友微信交流群
更正一个地方:var(S^2)的bootstrap估计就是7.32227的平方 53.61564

使用道具

8
天狮 发表于 2011-8-6 20:37:18 |只看作者 |坛友微信交流群
后来仔细一想,确是如此。我们记Y=S^2, 按照我的程序有999个Y, 即Y1,Y2,..., Y999
结果中original下面对应的34.31429 是999个Y的均值,而std. error的999个Y的标准差(注意不是标准误)
那么std. error的平方就是999个Y的方差了。
但是我不知道该如何提取出std.error, 好像 x.boot$std.error不行,只能复制粘贴了

使用道具

9
epoh 发表于 2011-8-7 16:16:19 |只看作者 |坛友微信交流群

请注意std.error是每次不同的

Bootstrap Statistics :
    original    bias    std. error
t1* 34.31429 -2.465542    7.545234
####################################
Bootstrap Statistics :
    original    bias    std. error
t1* 34.31429 -2.098413    7.791326
####################################
Bootstrap Statistics :
    original    bias    std. error
t1* 34.31429 -2.266037    7.826279

std.error=sqrt(var(x.boot$t))
         [,1]
[1,] 7.826279

使用道具

10
天狮 发表于 2011-8-30 10:34:06 |只看作者 |坛友微信交流群
std.error=sqrt(var(x.boot$t))
终于知道怎么提取了
谢谢epoh老师

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-11-5 20:48