помогите мне улучшить свою начальную загрузку

Рассмотрите следующий код:

require(Hmisc)
num.boots <- 10
data <- rchisq(500, df = 5) #generate fake data

#create bins
binx <- cut(data, breaks = 10)
binx <- levels(binx)
binx <- sub("^.*\\,", "", binx)
binx <- as.numeric(substr(binx, 1, nchar(binx) - 1))

#pre-allocate a matrix to be filled with samples
output <- matrix(NA, nrow = num.boots, ncol = length(binx)) 

#do random sampling from the vector and calculate percent
# of values equal or smaller to the bin number (i)
for (i in 1:num.boots) {
    walk.pair.sample <- sample(data, size = length(data), replace = TRUE)
    data.cut <- cut2(x = walk.pair.sample, cuts = binx)
    data.cut <- table(data.cut)/sum(table(data.cut))
    output[i, ] <- data.cut
}

#do some plotting
plot(1:10, seq(0, max(output), length.out = nrow(output)), type = "n", xlab = "", ylab = "")

for (i in 1:nrow(output)) {
    lines(1:10, output[i, 1:nrow(output)])
}

#mean values by columns
output.mean <- apply(output, 2, mean)
lines(output.mean, col="red", lwd = 3)
legend(x = 8, y = 0.25, legend = "mean", col = "red", lty = "solid", lwd = 3)

Я задавался вопросом, могу ли я предоставить boot:boot () функция функция, которая имеет как ее вывод вектор длины n> 1? Это вообще возможно?

Вот мои слабые попытки, но я должен делать что-то не так.

require(boot)
bootstrapDistances <- function(data, binx) {
    data.cut <- cut2(x = data, cuts = binx)
    data.cut <- table(data.cut)/sum(table(data.cut))
    return(data.cut)
}

> x <- boot(data = data, statistic = bootstrapDistances, R = 100)
Error in cut.default(x, k2) : 'breaks' are not unique

Я действительно не понимаю почему Hmisc::cut2() не работает правильно в boot() звоните, но работы, когда я назову его в a for() цикл (см. код выше). Логика моего bootstrapDistances() функция, выполнимая с boot()? Любые указатели очень ценятся.

Править:.

Aniko предложил, чтобы я изменил свою функцию таким способом, для включения индекса. При чтении документации для начальной загрузки (), это не было ясно мне, как она работает, который объясняет, почему функция не может работать. Вот является новая функция предложенным Aniko:

bootstrapDistances2 <- function(data, idx, binx) { 
  data.cut <- cut2(x = data[idx], cuts = binx) 
  data.cut <- table(data.cut)/sum(table(data.cut)) 
  return(data.cut) 
} 

Однако мне удалось произвести ошибку, и я все еще работаю, как удалить ее.

> x <- boot(data = data, statistic = bootstrapDistances2, R = 100, binx = binx)
Error in t.star[r, ] <- statistic(data, i[r, ], ...) : 
  number of items to replace is not a multiple of replacement length

После того, как я перезапустил свою сессию R (также попробовал другую версию, 2.10.1), это, кажется, хорошо работает.

1
задан Roman Luštrik 29 July 2010 в 09:12
поделиться

2 ответа

Из справочного файла для функции boot :

Во всех остальных случаях статистика должна принимать как минимум два аргумента. Первым переданным аргументом всегда будут исходные данные. Второй будет вектором индексов, частот или весов, которые определяют выборку начальной загрузки.

Итак, вам нужно добавить второй параметр к вашей функции bootstrapDistances , который сообщит ей, какие элементы данных выбраны:

bootstrapDistances2 <- function(data, idx, binx) { 
  data.cut <- cut2(x = data[idx], cuts = binx) 
  data.cut <- table(data.cut)/sum(table(data.cut)) 
  return(data.cut) 
} 

И результаты:

x <- boot(data = data, statistic = bootstrapDistances2, R = 100, binx=binx)
x

ORDINARY NONPARAMETRIC BOOTSTRAP


Call:
boot(data = data, statistic = bootstrapDistances2, R = 100, binx = binx)


Bootstrap Statistics :
     original   bias    std. error
t1*     0.208  0.00134 0.017342783
t2*     0.322  0.00062 0.021700803
t3*     0.190 -0.00034 0.018873433
t4*     0.136 -0.00116 0.016206197
t5*     0.078 -0.00120 0.011413265
t6*     0.036  0.00070 0.008510837
t7*     0.016  0.00074 0.005816417
t8*     0.006  0.00024 0.003654581
t9*     0.000  0.00000 0.000000000
t10*    0.008 -0.00094 0.003368961
2
ответ дан 2 September 2019 в 22:39
поделиться

Хороший ответ, Анико.

Кроме того, на странице справки для «загрузки» указано, что статистическая функция начальной загрузки может возвращать вектор, а не просто скаляр.

0
ответ дан 2 September 2019 в 22:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: