Considérez le code suivant:me aider à améliorer mon bootstrap
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)
Je me demandais si je peux fournir la chaussure: démarrage() fonctionner une fonction qui a pour sa sortie un vecteur de longueur n> 1? Est-ce possible?
Voici mes faibles tentatives, mais je dois faire quelque chose de mal.
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
Je ne comprends pas vraiment pourquoi Hmisc::cut2()
ne fonctionne pas correctement dans le boot()
appel, mais fonctionne quand je l'appelle dans une boucle for()
(voir code ci-dessus). La logique de ma fonction bootstrapDistances()
est-elle réalisable avec boot()
? Des pointeurs très appréciés.
.: EDIT :.
Aniko a suggéré que je modifie ma fonction de manière à inclure un index. Lors de la lecture de la documentation de boot(), cela n'a pas été clair pour moi, ce qui explique pourquoi la fonction ne fonctionne peut-être pas. Voici la nouvelle fonction Aniko suggéré:
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)
}
Cependant, je réussi à produire une erreur et je travaille encore comment l'enlever. Après avoir redémarré ma session R (j'ai également essayé une autre version, 2.10.1), cela semble fonctionner correctement.
Bravo pour essayer, mais j'obtiens cette erreur: x <- boot (données = données, statistiques = bootstrapDistances2, R = 100, binx = binx) Erreur dans t.star [r,] <- statistique (données , i [r,], ...): nombre d'éléments à remplacer n'est pas un multiple de longueur de remplacement –
Après avoir fait une nouvelle restauration de ma session R, les choses ont bien fonctionné. Pouah? Merci de votre collaboration. –