【发布时间】:2015-01-26 12:52:35
【问题描述】:
我有一个面板数据,即n 的每个观察值 (nxt) 的 t 行,例如
data("Grunfeld", package="plm")
head(Grunfeld)
firm year inv value capital
1 1935 317.6 3078.5 2.8
1 1936 391.8 4661.7 52.6
1 1937 410.6 5387.1 156.9
2 1935 257.7 2792.2 209.2
2 1936 330.8 4313.2 203.4
2 1937 461.2 4643.9 207.2
我想进行块引导,即我想用替换重新采样,在观察到它的所有年份取一个公司 [i]。例如,如果year=1935:1937 和公司 1 是随机抽取的,我希望公司 [1] 将在新样本中出现 3 次,对应于year=1935:1937。如果重新绘制,则必须再次绘制 3 次。此外,我需要将我自己的函数应用到新的引导样本中,并且我需要这样做 500 次。
我当前的代码是这样的:
library(boot)
boot.fun <- function(data) {
est.boot = myfunction(y=Grunfeld$v1, x=Grunfeld$v2, other parameters)
return(est.boot)
}
boot.sim <- function(data, mle) {
data = sample(data, ?? ) #
return(data)
}
start.time = Sys.time()
result.boot <- boot(Grunfeld, myfunction( ... ), R=500, sim = "parametric",
ran.gen = boot.sim)
Sys.time() - start.time
我正在考虑通过以正确的方式指定 data = sample(data, ?? ) 来重新采样,因为它工作平稳且干净,使用列 firm 作为索引。我怎么能那样做?还有其他更有效的选择吗?
编辑。
我不一定需要新的 boot.function。我只需要一个(可能是快速的)代码,它允许通过替换重新采样,然后我将它作为ran.gen=code.which.works 放在boot 参数中。
输出应该是与原始样本相同维度的样本,即使公司可以被随机挑选两次或更多次(或不被挑选)。例如结果可能是
head(GrunfeldResampled)
firm year inv value capital
2 1935 257.7 2792.2 209.2
2 1936 330.8 4313.2 203.4
2 1937 461.2 4643.9 207.2
1 1935 317.6 3078.5 2.8
1 1936 391.8 4661.7 52.6
1 1937 410.6 5387.1 156.9
2 1935 257.7 2792.2 209.2
2 1936 330.8 4313.2 203.4
2 1937 461.2 4643.9 207.2
9 1935 317.6 3078.5 122.8
9 1936 391.8 4661.7 342.6
9 1937 410.6 5387.1 156.9
基本上,我需要将每个公司视为block,因此重采样应适用于整个区块。希望这可以澄清
【问题讨论】:
-
但是在这种情况下没有随机性元素。公司 1 在 3 年内每年出现一次,您希望所有这 3 年都返回。引导需要什么?还是您希望随机选择公司(通过作为输入提供的某个数字,例如 5 家公司?),无论选择哪一个,都显示所有年份?
-
另外,如果这是通过替换来完成的,并且假设您想要一家特定公司的所有年份,如果同一家公司被选中两次会发生什么?那么你需要所有年份两次吗?以及如何选择公司的数量?你想制作一个函数以便能够自己指定它吗?
-
你好。我需要的确实是随机挑选的公司。如果一家公司被选中两次,那么它会在所有或对应的年份出现两次。原始样本中的公司数量为
N,每家公司的观察时间为T年:具有NxT观察结果的平衡面板。因此,我需要一个带替换的重采样,它给出一个尺寸为NxT的样本, -
为了获得相同的维度
NxT,是否可以从最后挑选的公司中删除年份?否则应根据确切的年数选择最后一家公司,以使维度NxT保持稳定... -
在我的样本中,每家公司都观察了 T=8 年,不多也不少。
标签: r random statistics-bootstrap