如何从 R 中的引导导出结果?
How to export results from bootstrapping in R?
我有一个包含 540 个观测值的时间序列,我使用以下代码对其进行了 999 次重采样:
boot.mean = function(x,i){boot.mean = mean(x[i])}
z1 = boot(x1, boot.mean, R=999)
z1
ORDINARY NONPARAMETRIC BOOTSTRAP
Call:
boot(data = x1, statistic = boot.mean, R = 999)
Bootstrap Statistics :
original bias std. error
t1* -0.009381397 -5.903801e-05 0.002524366
尝试导出结果时出现以下错误:
write.csv(z1, "z1.csv")
Error in as.data.frame.default(x[[i]], optional = TRUE, stringsAsFactors = stringsAsFactors) :
cannot coerce class ""boot"" to a data.frame
如何将结果导出到 .csv 文件?
我希望获得一个包含 540 个观测值 999 次的文件,目标是应用 pracma
包中的 approx_entropy
函数,以获得近似熵的 999 个值并绘制在乳胶中分布。
首先,请确保您的示例可重现。你可以通过生成一个小的 x1
对象,或者生成一个随机的 x1
向量来实现:
> x1 <- rnorm(540)
现在,根据你的问题:
I am expecting to obtain a file with 540 observations 999 times
但是,这不是您将得到的。您正在生成重采样数据的 mean 的 999 次重复。这意味着每个 bootstrap 复制实际上是一个数字。
来自 Heroka 的评论:
Hint: look at str(z1).
函数 str
显示了 z1 对象中的实际数据,没有漂亮的格式。
> str(z1)
List of 11
$ t0 : num 0.0899
$ t : num [1:999, 1] 0.1068 0.1071 0.0827 0.1413 0.0914 ...
$ R : num 999
$ data : num [1:540] 1.02 1.27 1.82 -2.92 0.68 ...
(... lots of irrelevant stuff here ...)
- attr(*, "class")= chr "boot"
因此您的原始数据存储为 z1$data
,而您 bootstraped 的数据,即每次重采样的 mean,是存储在 z1$t
中。请注意它是如何告诉您每个插槽的尺寸的:z1$t
是 999 x 1。
现在,您可能想要做的是通过 boot.identity
函数更改 boot.mean
函数,这只是 returns 重采样数据。它是这样的:
> boot.identity = function(x,i){x[i]}
> z1 = boot(x1, boot.identity, R=999)
> str(z1)
List of 11
$ t0 : num [1:540] 1.02 1.27 1.82 -2.92 0.68 ...
$ t : num [1:999, 1:540] -0.851 -0.434 -2.138 0.935 -0.493 ...
$ R : num 999
$ data : num [1:540] 1.02 1.27 1.82 -2.92 0.68 ...
(... etc etc etc ...)
并且您可以使用 write.csv(z1$t, "z1.csv")
保存此数据。
我有一个包含 540 个观测值的时间序列,我使用以下代码对其进行了 999 次重采样:
boot.mean = function(x,i){boot.mean = mean(x[i])}
z1 = boot(x1, boot.mean, R=999)
z1
ORDINARY NONPARAMETRIC BOOTSTRAP
Call:
boot(data = x1, statistic = boot.mean, R = 999)
Bootstrap Statistics :
original bias std. error
t1* -0.009381397 -5.903801e-05 0.002524366
尝试导出结果时出现以下错误:
write.csv(z1, "z1.csv")
Error in as.data.frame.default(x[[i]], optional = TRUE, stringsAsFactors = stringsAsFactors) :
cannot coerce class ""boot"" to a data.frame
如何将结果导出到 .csv 文件?
我希望获得一个包含 540 个观测值 999 次的文件,目标是应用 pracma
包中的 approx_entropy
函数,以获得近似熵的 999 个值并绘制在乳胶中分布。
首先,请确保您的示例可重现。你可以通过生成一个小的 x1
对象,或者生成一个随机的 x1
向量来实现:
> x1 <- rnorm(540)
现在,根据你的问题:
I am expecting to obtain a file with 540 observations 999 times
但是,这不是您将得到的。您正在生成重采样数据的 mean 的 999 次重复。这意味着每个 bootstrap 复制实际上是一个数字。
来自 Heroka 的评论:
Hint: look at str(z1).
函数 str
显示了 z1 对象中的实际数据,没有漂亮的格式。
> str(z1)
List of 11
$ t0 : num 0.0899
$ t : num [1:999, 1] 0.1068 0.1071 0.0827 0.1413 0.0914 ...
$ R : num 999
$ data : num [1:540] 1.02 1.27 1.82 -2.92 0.68 ...
(... lots of irrelevant stuff here ...)
- attr(*, "class")= chr "boot"
因此您的原始数据存储为 z1$data
,而您 bootstraped 的数据,即每次重采样的 mean,是存储在 z1$t
中。请注意它是如何告诉您每个插槽的尺寸的:z1$t
是 999 x 1。
现在,您可能想要做的是通过 boot.identity
函数更改 boot.mean
函数,这只是 returns 重采样数据。它是这样的:
> boot.identity = function(x,i){x[i]}
> z1 = boot(x1, boot.identity, R=999)
> str(z1)
List of 11
$ t0 : num [1:540] 1.02 1.27 1.82 -2.92 0.68 ...
$ t : num [1:999, 1:540] -0.851 -0.434 -2.138 0.935 -0.493 ...
$ R : num 999
$ data : num [1:540] 1.02 1.27 1.82 -2.92 0.68 ...
(... etc etc etc ...)
并且您可以使用 write.csv(z1$t, "z1.csv")
保存此数据。