У меня есть панель данных, т.е. t
строки для каждой из n
наблюдений (nxt
), такие, какБлок выборки по индексу в панельных данных
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
. Как я мог это сделать? Есть ли другая более эффективная альтернатива?
EDIT. Мне не обязательно нужна новая функция boot.function. Мне просто нужен (возможно быстрый) код, который позволяет перепробовать с заменой, тогда я поставлю его внутри аргумента boot
как ran.gen=code.which.works
. Результат должен быть образцом того же размера оригинала, хотя фирмы могут быть случайным образом выбраны дважды или более (или не выбраны). Например результат может быть
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 появляется один раз в каждый из трех лет, и вы хотите, чтобы все эти три года назад. Для чего нужна загрузка? Или вы хотите, чтобы случайные фирмы были выбраны (по некоторому числу, предоставленному в качестве входных данных, например, как 5 фирм?) И в зависимости от того, какие из них будут выбраны, все годы, которые будут отображаться? – LyzandeR
Кроме того, если это делается путем замены и предполагается, что вы хотите, чтобы все годы для конкретной фирмы, что произойдет, если одна и та же компания будет выбрана дважды? Тебе нужны все годы два раза? И как выбирается количество фирм? Вы хотите сделать функцию, чтобы иметь возможность указать ее самостоятельно? – LyzandeR
Привет. Мне нужно, чтобы фирмы были выбраны случайным образом. Если фирма собирается дважды, то она появляется дважды со всеми соответствующими годами. Количество фирм в исходном образце - 'N', каждый из которых наблюдается для' T' лет: сбалансированная панель с наблюдениями NxT. Поэтому мне нужна передискретизация с заменой, которая дает образец размера «NxT», – Bob