[R-es] Fórmula con variables al azar

Manuel Mendoza mmendoz@ @end|ng |rom |u|br|ghtm@||@org
Jue Ene 7 22:12:12 CET 2021


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 using 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 using 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 using 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 using 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 using r-project.org
>> https://stat.ethz.ch/mailman/listinfo/r-help-es
>>
>

	[[alternative HTML version deleted]]



Más información sobre la lista de distribución R-help-es