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

2021-01-07 Por tema Carlos Ortega
Hola,

Las diferencias con respecto a un random forest (no sé si usaste
randomForest o ranger) pueden venir del resto de parámetros (los valores
por defecto de rpart están en rpart.control() ) son diferentes a los de
random forest (al menos para los de ranger), por ejemplo número de
elementos a considerar en el split.

Gracias,
Carlos.


El jue, 7 ene 2021 a las 22:12, Manuel Mendoza ()
escribió:

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


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

2021-01-07 Por tema Manuel Mendoza
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 ()
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 ()
> 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 (<
>> mmend...@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@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@r-project.org
>> https://stat.ethz.ch/mailman/listinfo/r-help-es
>>
>

[[alternative HTML version deleted]]

___
R-help-es mailing list
R-help-es@r-project.org
https://stat.ethz.ch/mailman/listinfo/r-help-es


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

2021-01-07 Por tema José Luis Cañadas
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 ()
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 (<
> mmend...@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@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@r-project.org
> https://stat.ethz.ch/mailman/listinfo/r-help-es
>

[[alternative HTML version deleted]]

___
R-help-es mailing list
R-help-es@r-project.org
https://stat.ethz.ch/mailman/listinfo/r-help-es


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

2021-01-06 Por tema Carlos Ortega
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 ()
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@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@r-project.org
https://stat.ethz.ch/mailman/listinfo/r-help-es


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

2021-01-06 Por tema Manuel Mendoza
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@r-project.org
https://stat.ethz.ch/mailman/listinfo/r-help-es