[R-es] CV en R

Carlos Ortega cof en qualityexcellence.es
Sab Jun 3 21:52:49 CEST 2017


​Hola,

Puedes ver aquí un ejemplo de cómo comparar varios modelos usando "caret".

https://stackoverflow.com/questions/14800021/statistics-of-prediction-for-multiple-models-with-caret

O mejor en el propio manual de "caret", en esta sección:

https://topepo.github.io/caret/model-training-and-tuning.html#exploring-and-comparing-resampling-distributions

Y como recomendación te sugiero que usen "ranger" en vez de "randomForest",
no solo por velocidad, si no también por las mejoras y ampliaciones de
funcionalidad que incorpora.

Saludos,
Carlos Ortega
www.qualityexcellence.es
​


El 2 de junio de 2017, 19:58, Jesús Para Fernández <
j.para.fernandez en hotmail.com> escribió:

> Para el tema de los árboles necesarios se ve muy bien haciendo
> plot(modelo) y se ve en que punto se han estabilizado o si necesitas más
> árboles.
> ------------------------------
> *De:* Isidro Hidalgo Arellano <ihidalgo en jccm.es>
> *Enviado:* viernes, 2 de junio de 2017 15:01:37
> *Para:* 'Jesús Para Fernández'; 'Manuel Spínola'
> *Cc:* 'Carlos Ortega'; 'Lista R'
>
> *Asunto:* RE: [R-es] CV en R
>
>
> No, llega un momento en el que más árboles no te supone mejoría, e incluso
> funciona peor. Que funcione peor lo atribuyo al ruido, porque en teoría no
> tiene mucho sentido, la verdad... Pero no he probado a coger más árboles de
> los "necesarios". Lo probaré…
>
> Un saludo
>
>
>
> *De:* Jesús Para Fernández [mailto:j.para.fernandez en hotmail.com]
> *Enviado el:* viernes, 02 de junio de 2017 14:54
> *Para:* Isidro Hidalgo Arellano <ihidalgo en jccm.es>; 'Manuel Spínola' <
> mspinola10 en gmail.com>
> *CC:* 'Carlos Ortega' <cof en qualityexcellence.es>; 'Lista R' <
> r-help-es en r-project.org>
> *Asunto:* Re: [R-es] CV en R
>
>
>
> Si, de eso soy consciente. Normalmente cuantos más arboles cojas es mejor
> no? el problema es que se incrementa el tiempo de computación...
>
>
> ------------------------------
>
> *De:* Isidro Hidalgo Arellano <ihidalgo en jccm.es>
> *Enviado:* viernes, 2 de junio de 2017 14:50
> *Para:* 'Manuel Spínola'
> *Cc:* 'Jesús Para Fernández'; 'Carlos Ortega'; 'Lista R'
> *Asunto:* RE: [R-es] CV en R
>
>
>
> El algoritmo en sí no, pero si quieres ajustar los parámetros (número de
> árboles, tamaño del nodo, etc.) hay que hacerlo.
>
> En la práctica te puedo asegurar que hay diferencia entre usar 500 árboles
> o 100, igual que el tamaño del nodo que cojas; afinar los parámetros puede
> suponer ajustar bastante los resultados.
>
> Un saludo
>
>
>
>
>
> Isidro Hidalgo Arellano
>
> Observatorio del Mercado de Trabajo
>
> Consejería de Economía, Empresas y Empleo
>
> http://www.castillalamancha.es/
>
> Inicio | Gobierno de Castilla-La Mancha <http://www.castillalamancha.es/>
>
> www.castillalamancha.es
>
> Web oficial del gobierno autonómico de Castilla-La Mancha con información
> sobre actividad administrativa, economía, educación, sanidad, servicios
> sociales, sede ...
>
>
>
>
>
>
>
>
>
> *De:* Manuel Spínola [mailto:mspinola10 en gmail.com <mspinola10 en gmail.com>]
> *Enviado el:* viernes, 02 de junio de 2017 14:42
> *Para:* Isidro Hidalgo Arellano <ihidalgo en jccm.es>
> *CC:* Jesús Para Fernández <j.para.fernandez en hotmail.com>; Carlos Ortega <
> cof en qualityexcellence.es>; Lista R <r-help-es en r-project.org>
> *Asunto:* Re: [R-es] CV en R
>
>
>
> Hola,
>
>
>
> No soy un experto en estas técnicas, pero hasta donde yo se, el algoritmo
> Random Forest no requiere cross validation.
>
>
>
> Lo dice el mismo Leo Breiman que creo ha sido uno de los investigadores
> que más ha contribuido al desarrollo de Random Forest (
> https://www.stat.berkeley.edu/~breiman/RandomForests/cc_home.htm)
>
> Random forests - classification description
> <https://www.stat.berkeley.edu/~breiman/RandomForests/cc_home.htm>
>
> www.stat.berkeley.edu
>
> Contents. Introduction Overview Features of random forests Remarks How
> Random Forests work The oob error estimate Variable importance Gini
> importance
>
>
>
>
>
> Manuel
>
>
>
> El 2 de junio de 2017, 6:35, Isidro Hidalgo Arellano <ihidalgo en jccm.es>
> escribió:
>
> Una vez que tienes la técnica y los parámetros óptimos resultantes de la
> validación cruzada, ya tienes el modelo que necesitas, NO tienes que hacer
> nada más. Si vuelves a modelar con todos los datos todo el trabajo de
> validación que has hecho lo envías a hacer gárgaras. Estarías construyendo
> un modelo con sobreajuste.
>
>
>
> Para quedarte tranquilo, haz la prueba, coge el modelo resultante de la
> validación y ve aplicándolo a los nuevos datos. Haz lo mismo con el que
> obtengas de ése paso final que NO debes dar, y que no te he puesto en mi
> código corregido, a saber:
>
> modelo.final<-randomForest(respuesta~.,datos)
>
>
>
> Cuando los aplicas con los nuevos datos, ¿cuál funciona mejor?
>
>
>
> Un saludo
>
>
>
>
>
> Isidro Hidalgo Arellano
>
> Observatorio del Mercado de Trabajo
>
> Consejería de Economía, Empresas y Empleo
>
> http://www.castillalamancha.es/
>
>
>
>
>
>
>
> De: Jesús Para Fernández [mailto:j.para.fernandez en hotmail.com]
> Enviado el: viernes, 02 de junio de 2017 14:21
> Para: Carlos Ortega <cof en qualityexcellence.es>
> CC: Lista R <r-help-es en r-project.org>; Isidro Hidalgo Arellano
> <ihidalgo en jccm.es>
> Asunto: Re: [R-es] CV en R
>
>
>
> Pero creo que hay un concepto que no termina de aclararse.
>
>
>
> Creo que lo importante es quedarse con el modelo bueno, por ejemplo,
> imaginemos que queremos probar los siguientes algoritmos: RF, SVM, KNN,
> LDA....
>
>
>
> Entonces hacemos lo siguiente:
>
>
>
> Probamos con todos ellos, para lo que se hacen particiones:
>
>
>
> Imaginemos que tengo un datasheet llamado datos, perfectamnte balanceado,
> sin datos faltantes, ni ruido ni nada asi. Entonces:
>
>
>
> for(i in 1:10){
>
> train #saco el train de los datos
>
> test #saco el test de los datos
>
> pruebo RF, con diferentes configuaraciones (bucles j,k)
>
> pruebo SVM, con diferentes configuaraciones (bucles j,k)
>
> pruebo KNN
>
> pruebo LDA
>
>
>
> guardo resultados
>
>
>
> }
>
>
>
> y sobre el que mejor de, entonces ya creo el modelo definitivo, con el
> conjunto de datos global. Si fuera un randomForest
>
>
>
> randomForest(respuesta~.,ntree=500,nodesize=4,datos)
>
>
>
> Y ese es mi modelo para los proximos daots que vengan yq ue no han formado
> parte del datasheet datos
>
>
>
>   _____
>
> De: Carlos Ortega < <mailto:cof en qualityexcellence.es>
> cof en qualityexcellence.es>
> Enviado: viernes, 2 de junio de 2017 13:11
> Para: Jesús Para Fernández
> Cc: Lista R; Isidro Hidalgo Arellano
> Asunto: Re: [R-es] CV en R
>
>
>
> Hola,
>
>
>
> Eso es justamente lo que hace "caret" de una manera muy sencilla y sin que
> tú te tengas que preocupar de quedarte con el mejor bucket  (del CV) o con
> la mejor combinación en tu "grid search".
>
>
>
> Te recomiendo que uses "caret" para esto....
>
> Puedes incluso evaluar los dos algoritmos "RF" y "svm" a la vez y conocer
> realmente el nivel de precisión que ofrecen ambos.
>
> Y claro, inicialmente puedes elegir el conjunto de entrenamiento sobre el
> que haces el CV dejando el resto "test" para validar el nivel de
> predicción.
>
>
>
> Gracias,
>
> Carlos Ortega
>
>  <http://www.qualityexcellence.es> www.qualityexcellence.es
>
>
>  <http://www.qualityexcellence.es/> QualityExcellence
>
>  <http://www.qualityexcellence.es> www.qualityexcellence.es
>
> QUALITY EXCELLENCE, consultores en calidad, procesos y mejora continua
>
>
>
>
>
> El 2 de junio de 2017, 13:06, Isidro Hidalgo Arellano <
> <mailto:ihidalgo en jccm.es> ihidalgo en jccm.es> escribió:
>
>
> No me has parecido para nada borde.
>
>
>
> Ok. Centrémonos en RF y bajemos el nº de parámetros a 2: ntree y nodesize.
>
> Te haces una parrilla de ntree: 100, 200, 300, 400, 500
>
> Otra de nodesize: 3, 6, 10
>
> Con esto tienes 15 combinaciones.
>
> Vamos al código. Simplemente crea una lista donde metes los resultados (y
> tienes que añadir los parámetros, que has omitido)
>
> Después graficas usando un mapa de calor para ver qué combinación de
> parámetros te da el mejor resultado (en abscisas ntree y en ordenadas
> nodesize). Una vez que veas los intervalos de parámetros que mejor se
> comportan, afinas el resultado con otra validación cruzada:
>
>
>
> for(i in 1:15){
>
>
>
> numeros<-sample(1:1500,1500*0.7)
>
>
>
> train<-datos[numeros,]
>
>
>
> test<-datos[-numeros,]
>
>
>
>
>
> #modeloRF
>
>
>
> resultadoRF <- list()
>
>
>
> modelo.rf<-randomForest(respuesta~,train)
>
>
>
> prediccion<-predict(modelo.rf,test)
>
>
>
> fp<-table(prediccion,test$respuesta)[2,1]
>
> fn<-table(prediccion,test$respuesta)[1,2]
>
> error<-(fp+fn)/nrow(train.balanceado)
>
> resultadoRF[[i]]<-rbind(resultado,data.frame(error=error,modelo="rf"))
>
>
>
> #modelo SVM
>
>
>
> resultadoSVM <- list()
>
>
>
> modelo.svm<-svm(respuesta~,train)
>
>
>
> prediccion<-predict(modelo.svm,test)
>
>
>
> fp<-table(prediccion,test$respuesta)[2,1]
>
> fn<-table(prediccion,test$respuesta)[1,2]
>
> error<-(fp+fn)/nrow(train.balanceado)
>
> resultadoSVM[[i]]<-rbind(resultado,data.frame(error=error,modelo="svm"))
>
>
>
> }
>
>
>
> Un saludo
>
>
>
> Isidro Hidalgo Arellano
>
> Observatorio del Mercado de Trabajo
>
> Consejería de Economía, Empresas y Empleo
>
>  <http://www.castillalamancha.es/> http://www.castillalamancha.es/
>
>
>
>
>
>
>
> De: Jesús Para Fernández [mailto: <mailto:j.para.fernandez en hotmail.com>
> j.para.fernandez en hotmail.com]
> Enviado el: viernes, 02 de junio de 2017 12:50
> Para: Isidro Hidalgo Arellano < <mailto:ihidalgo en jccm.es> ihidalgo en jccm.es
> >;
> <mailto:r-help-es en r-project.org> r-help-es en r-project.org
> Asunto: Re: [R-es] CV en R
>
>
>
> Buenas,
>
>
>
> Puse los modelos lo mas simplificados, para centrar el tiro en el tema que
> me preocupa.
>
>
>
> Es una pena no poder hablar cara a cara, porque por email puedo sonar algo
> borde, pero no es así, al contrario estoy enormemente agradecido por tu
> ayuda, pero le veo un problema.
>
> Me dices que use un list para ir guardando el modelo, pero tal y como he
> propuesto en el bucle for, el modelo se crea 10 veces, es decir, que
> entiendo que si es un randomForest, tendria que entonces hacer una
> combinacion de esos 10 modelos con la funcion combine de RF para unir esos
> modelos, verdad?? Porque sino estaria en el mismo problema, generando un
> modelo generalista de una simple submuestra de los datos.
>
>
>
> Gracias por todo!!!
>
> Jesús
>
>
>
>   _____
>
> De: Isidro Hidalgo Arellano < <mailto:ihidalgo en jccm.es> ihidalgo en jccm.es
> <mailto: <mailto:ihidalgo en jccm.es> ihidalgo en jccm.es> >
> Enviado: viernes, 2 de junio de 2017 12:28
> Para: 'Jesús Para Fernández';  <mailto:r-help-es en r-project.org>
> r-help-es en r-project.org
> <mailto: <mailto:r-help-es en r-project.org> r-help-es en r-project.org>
>
> Asunto: RE: [R-es] CV en R
>
>
>
>
> No me había fijado en el código, te había he contestado teóricamente.
>
> A ver, en ese código tienes varios problemas:
>
> -          No especificas los parámetros del modelo (para eso es la
> validación cruzada). En RF tendrías que especificar el número de árboles,
> la
> cantidad de puntos con los que acotar la regresión, etc. En SVM el tipo de
> kernel que vas a usar, la sensibilidad… NO SE TRATA SÓLO de hacer modelos
> con diferentes conjuntos de entrenamiento, sino de buscar los parámetros
> que
> mejor ajustan los datos.
>
> Te pongo un ejemplo: imagínate que tienes mucho ruido, en ese caso, en cada
> punto de regresión, tendrás que tomar un número de puntos mayor (parámetro
> "nodesize")
>
> -          Respecto a no guardar los modelos, es muy fácil con una lista.
> Cada modelo que hagas, guárdalo en un lista, junto con los datos de
> resultados que quieras (incluyendo los parámetros de especificación del
> modelo)
>
> Te recomiendo 2 cosas:
>
> -          Usa el paquete caret
>
> -          Lee este libro:
>  <https://link.springer.com/book/10.1007/978-1-4614-6849-3>
> https://link.springer.com/book/10.1007/978-1-4614-6849-3
>
> Con el libro matas varios pájaros de un tiro:
>
> -          Aprendes algo de teoría (poca), que siempre viene bien
>
> -          El autor es el creador del paquete caret
>
> Si tienes tiempo, yo buscaría un curso del MIT que es muy bueno, aunque de
> los duros, te lo tienes que programar casi todo desde 0, pero cuando
> acabas,
> la teoría (con éste sí) la has machacado bastante bien, y sabes lo que hace
> un SVM, un RF. Es éste:
>
> <https://www.edx.org/course/learning-data-introductory-
> machine-caltechx-cs11
> 56x
> <https://www.edx.org/course/learning-data-introductory-machine-caltechx-cs1156x>
> >
> https://www.edx.org/course/learning-data-introductory-
> machine-caltechx-cs115
> 6x
> <https://www.edx.org/course/learning-data-introductory-machine-caltechx-cs1156x>
>
>
>
>
> <
> <https://www.edx.org/course/learning-data-introductory-
> machine-caltechx-cs11
> 56x
> <https://www.edx.org/course/learning-data-introductory-machine-caltechx-cs1156x>
> >
> https://www.edx.org/course/learning-data-introductory-
> machine-caltechx-cs11
> 56x
> <https://www.edx.org/course/learning-data-introductory-machine-caltechx-cs1156x>
> >
>
>
> <
> <https://www.edx.org/course/learning-data-introductory-
> machine-caltechx-cs11
> >
> https://www.edx.org/course/learning-data-introductory-
> machine-caltechx-cs11
> 56x
> <https://www.edx.org/course/learning-data-introductory-machine-caltechx-cs1156x>>
> Learning From Data (Introductory Machine Learning) | edX
>
>  <http://www.edx.org> www.edx.org < <http://www.edx.org>
> http://www.edx.org>
>
> Introductory Machine Learning course covering theory, algorithms and
> applications. Our focus is on real understanding, not just "knowing."
>
>
>
> Tiene un libro asociado que está muy bien también.
>
> Si te da miedito, hay otro más suave, de los clásicos Hastie y Tibshirani:
>
> <https://lagunita.stanford.edu/courses/HumanitiesSciences/
> StatLearning/Winte
> r2016/about
> <https://lagunita.stanford.edu/courses/HumanitiesSciences/StatLearning/Winter2016/about>
> >
> https://lagunita.stanford.edu/courses/HumanitiesSciences/
> StatLearning/Winter
> 2016/about
> <https://lagunita.stanford.edu/courses/HumanitiesSciences/StatLearning/Winter2016/about>
>
>
>
> <
> <https://lagunita.stanford.edu/courses/HumanitiesSciences/
> StatLearning/Winte
> r2016/about
> <https://lagunita.stanford.edu/courses/HumanitiesSciences/StatLearning/Winter2016/about>
> >
> https://lagunita.stanford.edu/courses/HumanitiesSciences/
> StatLearning/Winte
> r2016/about
> <https://lagunita.stanford.edu/courses/HumanitiesSciences/StatLearning/Winter2016/about>>
> Statistical Learning | Stanford Lagunita
>
>  <http://lagunita.stanford.edu> lagunita.stanford.edu
>
> StatLearning now self paced! The active course run for Statistical Learning
> has ended, but the course is now available in a self paced mode. You are
> welcome to join ...
>
>
>
> Éstos también tienen 2 libros muy buenos. El resumido es en el que se basa
> el curso anterior.
>
>
>
> De: Jesús Para Fernández [mailto: <mailto:j.para.fernandez en hotmail.com>
> j.para.fernandez en hotmail.com]
> Enviado el: viernes, 02 de junio de 2017 12:04
> Para: Isidro Hidalgo Arellano < <mailto:ihidalgo en jccm.es> ihidalgo en jccm.es
> <mailto: <mailto:ihidalgo en jccm.es> ihidalgo en jccm.es> >;
>  <mailto:r-help-es en r-project.org> r-help-es en r-project.org <mailto:
> <mailto:r-help-es en r-project.org> r-help-es en r-project.org>
> Asunto: Re: [R-es] CV en R
>
>
>
> Es que es justo ahi donde no se como hacerlo.
>
> Es decir, dentro del bucle for hago las comprobaciones train test, y me da
> que de media el mejor es randomForest, pero claro, no me estoy quedando con
> el modelo, ya que no se va guardando....Entonces es cuando no se como
> seguir
> para quedarme con ese modelo....
>
>
>
>
>
>
>
>
>
>   _____
>
> De: Isidro Hidalgo Arellano < <mailto: <mailto:ihidalgo en jccm.es>
> ihidalgo en jccm.es>  <mailto:ihidalgo en jccm.es> ihidalgo en jccm.es>
> Enviado: viernes, 2 de junio de 2017 11:59
> Para: 'Jesús Para Fernández';  <mailto: <mailto:r-help-es en r-project.org>
> r-help-es en r-project.org>
>  <mailto:r-help-es en r-project.org> r-help-es en r-project.org
> Asunto: RE: [R-es] CV en R
>
>
>
> No, no. Si construyes el modelo con todos los datos, explícame para qué te
> ha servido la validación cruzada... ¿Sólo para saber si funciona mejor SVM
> o
> RF con ese conjunto de datos? Eso es insuficiente.
> Cuando construyes un modelo, lo haces entrenando con datos que el modelo NO
> VE, ahí está la gracia...
> Te tienes que quedar con el mejor modelo entrenado. Y después ver cómo te
> funciona en la vida real, es decir, con nuevos datos que el modelo NO HA
> VISTO.
>
> Un saludo.
>
>
> Isidro Hidalgo Arellano
> Observatorio del Mercado de Trabajo
> Consejería de Economía, Empresas y Empleo
>  < <http://www.castillalamancha.es/> http://www.castillalamancha.es/>
> <http://www.castillalamancha.es/> http://www.castillalamancha.es/
>
>
>  < <http://www.castillalamancha.es/> http://www.castillalamancha.es/>
> Inicio
> | Gobierno de Castilla-La Mancha
>
>  < <http://www.castillalamancha.es> http://www.castillalamancha.es>
> <http://www.castillalamancha.es> www.castillalamancha.es
>
> Web oficial del gobierno autonómico de Castilla-La Mancha con información
> sobre actividad administrativa, economía, educación, sanidad, servicios
> sociales, sede ...
>
>
>
>
>
>
> -----Mensaje original-----
> De: R-help-es [ <mailto: <mailto:r-help-es-bounces en r-project.org>
> r-help-es-bounces en r-project.org>
> mailto: <mailto:r-help-es-bounces en r-project.org>
> r-help-es-bounces en r-project.org] En nombre de Jesús
> Para Fernández
> Enviado el: viernes, 02 de junio de 2017 11:48
> Para:  <mailto: <mailto:r-help-es en r-project.org> r-help-es en r-project.org>
> <mailto:r-help-es en r-project.org> r-help-es en r-project.org
>
>
> Asunto: [R-es] CV en R
>
> Buenas,
>
>
> Estoy haciendo modelos y comparando cual es mejor. Para ello, uso CV de 10
> folds.
>
>
> Por ejemplo, hago la comparativa entre un svm y un randomForest para una
> serie de datos, por ello hago:
>
>
> midataset<-import.....
>
>
> #datos es un dataframe de 1500 filas y 15 variables
>
>
> for(i in 1:10){
>
> numeros<-sample(1:1500,1500*0.7)
>
> train<-datos[numeros,]
>
> test<-datos[-numeros,]
>
>
> #modeloRF
>
> modelo.rf<-randomForest(respuesta~,train)
>
> prediccion<-predict(modelo.rf,test)
>
> fp<-table(prediccion,test$respuesta)[2,1]
> fn<-table(prediccion,test$respuesta)[1,2]
> error<-(fp+fn)/nrow(train.balanceado)
> resultado<-rbind(resultado,data.frame(error=error,modelo="rf"))
>
> #modelo SVM
>
>
> modelo.svm<-svm(respuesta~,train)
>
> prediccion<-predict(modelo.svm,test)
>
> fp<-table(prediccion,test$respuesta)[2,1]
> fn<-table(prediccion,test$respuesta)[1,2]
> error<-(fp+fn)/nrow(train.balanceado)
> resultado<-rbind(resultado,data.frame(error=error,modelo="svm"))
>
> }
>
>
> Mi pregunta es la siguiente. Si el modelo de RF es mejor, como me quedo con
> el modelo final? Tengo que crear el modelo de nuevo, sin tener en cuenta el
> train?
>
>
> modelo.final<-randomForest(respuesta~.,datos)
>
>
> Gracias!!!!
>
>
>
>
>         [[alternative HTML version deleted]]
>
> _______________________________________________
> R-help-es mailing list
>
>  <mailto: <mailto:R-help-es en r-project.org> R-help-es en r-project.org>
> <mailto:R-help-es en r-project.org> R-help-es en r-project.org
>  < <https://stat.ethz.ch/mailman/listinfo/r-help-es>
> https://stat.ethz.ch/mailman/listinfo/r-help-es>
>
>  <https://stat.ethz.ch/mailman/listinfo/r-help-es>
> https://stat.ethz.ch/mailman/listinfo/r-help-es
>
>
>         [[alternative HTML version deleted]]
>
>
> _______________________________________________
> R-help-es mailing list
>  <mailto:R-help-es en r-project.org> R-help-es en r-project.org
>  <https://stat.ethz.ch/mailman/listinfo/r-help-es>
> https://stat.ethz.ch/mailman/listinfo/r-help-es
>
>
>
>
>
>
>
> --
>
> Saludos,
> Carlos Ortega
>  <http://www.qualityexcellence.es> 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
>
>
>
>
>
> --
>
> *Manuel Spínola, Ph.D.*
> Instituto Internacional en Conservación y Manejo de Vida Silvestre
> Universidad Nacional
> Apartado 1350-3000
> Heredia
> COSTA RICA
> mspinola en una.cr <mspinola en una.ac.cr>
> mspinola10 en gmail.com
> Teléfono: (506) 8706 - 4662
> Personal website: Lobito de río
> <https://sites.google.com/site/lobitoderio/>
> Institutional website: ICOMVIS <http://www.icomvis.una.ac.cr/>
>



-- 
Saludos,
Carlos Ortega
www.qualityexcellence.es

	[[alternative HTML version deleted]]



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