Gracias José Luis, y también a Carlos y a Juan. Respecto a lo que dices,
José Luis, de usar un random forest, es que es eso lo que estoy
programando, un RF. Tenía ya hecho el programa del bootstrap con árboles, y
a partir de él he programado un RF. He solucionado el problema que tenía
con lo que me ha dicho Carlos. Funciona bien, aunque me extraña que la
correlación sobre las muestras OOB no mejore respecto al bootstrap,
mientras que hecho con el paquete randomForest mejoraba sustancialmente.
Os lo pongo aquí, tal cual, por si queréis echarle un ojo.
Un saludo
set.seed(5)
data <- read.table(file="Data.csv",header=T,sep=",")
colnames(data)
p=19
nreps<- 1000
# Creamos una matriz vacía para guardar las predicciones de cada árbol:
OOBpreds<- matrix(NA, nrow=nrow(data),
ncol=nreps,dimnames=list(rownames(data)))
target <- c('IFd')
vars <- setdiff(names(data), target)
for (i in 1:nreps){
selected<-sample(1:nrow(data),size=floor((2/3)*nrow(data)),replace=T)
training<- data[selected,]
OOB<-data[-selected,] # El out of bag incluye las que no están en
el training data set
num_vars <- floor(p/3)
vars_samp <- vars[ sample(1:length(vars), num_vars)]
fmla <- as.formula(paste(target, " ~ ", paste(vars_samp,
collapse= "+")))
fit <- rpart(fmla, data = training)
OOBpreds[-selected, i]<-predict(fit, OOB)
if(i%%10==0){print(paste("Iteración ",i))} # i%%10==0 significa: el
resto
de dividir i entre 10 es 0
}
ResOOB<-rowMeans(OOBpreds, na.rm=T) # se obtiene la media de todas las
predicciones para cada muestra
OOBBagging<-lm(data$IFd ~ ResOOB) # para calcular la correlación entre la
predicción y la observación
rsqOOBRT<-summary(OOBBagging)$adj.r.squared# R2
windows();plot(data$IFd ~
ResOOB,main=paste("R2=",round(rsqOOBRT,2)));abline(0,1,lty=2,col=2)
El jue, 7 ene 2021 a las 11:03, José Luis Cañadas (<canadasreche en
gmail.com>)
escribió:
> Hola Manuel.
> ¿No has pensado en hacer un randomforest, poniendo qeu use todos los datos
> en cada muestra bootstrap y un porcentaje de las variables?
>
> El jue, 7 ene 2021 a las 1:42, Carlos Ortega (<cof en
qualityexcellence.es>)
> escribió:
>
>> Hola Manuel,
>>
>> Esta es una forma, uso el conjunto de datos "car90" que viene
incluido en
>> "rpart".
>>
>> #-----------------
>> library(rpart)
>>
>> data(car90)
>> target <- c('Mileage')
>> vars <- setdiff(names(car90), target)
>>
>> num_loops <- 10
>> for( i in 1:num_loops) {
>> num_vars <- 6
>> vars_samp <- vars[ sample(1:length(vars), num_vars)]
>> fmla <- as.formula(paste(target, " ~ ",
paste(vars_samp, collapse>> "+")))
>> fit <- rpart(fmla, data = car90)
>> print(fit)
>> }
>>
>> #-----------------
>>
>> Se puede sofisticar esto, para capturar incluso la salida de cada
>> iteración... :-).
>>
>> Gracias,
>> Carlos Ortega
>> www.qualityexcellence.es
>>
>> El mié, 6 ene 2021 a las 22:44, Manuel Mendoza (<
>> mmendoza en fulbrightmail.org>)
>> escribió:
>>
>> > Muy buenas, hago un árbol de regresión (aunque podría ser
cualquier otro
>> > análisis) dentro de un loop y quiero que en cada vuelta coja un
conjunto
>> > distinto de variables. En la df hay 19 predictores pero quiero que
>> utilice
>> > solo 6 de ellos, al azar, cada vez. ¿Qué debería poner donde hay
un
>> > interrogante?
>> >
>> > fit<- rpart(IFd ~ ? , data=training)
>> >
>> > Gracias, como siempre,
>> > Manuel
>> >
>> > [[alternative HTML version deleted]]
>> >
>> > _______________________________________________
>> > R-help-es mailing list
>> > R-help-es en r-project.org
>> > https://stat.ethz.ch/mailman/listinfo/r-help-es
>> >
>>
>>
>> --
>> Saludos,
>> Carlos Ortega
>> www.qualityexcellence.es
>>
>> [[alternative HTML version deleted]]
>>
>> _______________________________________________
>> R-help-es mailing list
>> R-help-es en r-project.org
>> https://stat.ethz.ch/mailman/listinfo/r-help-es
>>
>
[[alternative HTML version deleted]]