Foro de discusión y soporte para usuarios de R

Un foro abierto a todos los temas relacionados con R que quiera.
Nota: Una url estable a este foro es https://knuth.uca.es/R-foro.

Regresión Logística: discriminación con AUC

de Igor Gutiérrez -
Buenas,

Estoy intentando validar un modelo de regresión logística y varias fuentes consultadas indican que debe validarse la tanto la calibración como la discriminación.

Estoy en la fase de discriminación y quisiera representar la curva ROC y calcular el área bajo la misma (AUC). El caso es que veo que hay muchas funciones para hacerlo y que se puede hacer tanto desde el paquete ROCBC como RATTLE. Con cada una de ellas logro una cosa distinta y no estoy seguro de estar haciéndolo bien.

Lo que yo tengo como entrada son las probabilidades de pertenencia de cada individuo a la clase de referencia predichas por el modelo logístico. Esto es, las p una vez despejadas del modelo logit(p)=SUMA(beta_{i}*X_{i}).

¿Qué función me recomendáis?

Gracias

Rattle: cómo copiar el código

de Igor Gutiérrez -
Buenas:

Estoy trabajando con la interfaz de Rattle puesto que me parece muy interesante para mi propósito. Me gustaría copiar el código que genera los outputs para poder incluirlo en mi archivo .Rnw de Sweave y así producir mis informes de manera automática.

¿Alguien sabe si es posible hacer esto?

Muchas gracias de antemano

Curso básico y gratuito de introducción a R

de O Ka -

http://jjgibaja.net/curso-basico-y-gratuito-de-introduccion-a-r/comment-page-1/

Curso básico y gratuito de introducción a R

Para ayudar a quienes quieran dar este paso, Carlos Gil Bellosta y yo hemos diseñado un curso de R básico, con las siguientes características:

  • Es gratuito.
  • No da derecho a diplomas o certificados de ningún tipo.
  • No es presencial.
  • Dura 5 semanas.
  • Las plazas son ilimitadas.
  • Está basado en el autoestudio: cada participante tendrá que leer y trabajar por su cuenta.
  • Es colaborativo: hemos desarrollado una plataforma web para que quienes sigan el curso puedan plantear preguntas y, como parte fundamental del programa, traten de responder las de sus compañeros.
  • Está supervisado por Carlos y yo: nos encargaremos del programa del curso así como de tratar de dar apoyo de última instancia a las preguntas planteadas por los estudiantes.
  • Es genérico. Cada cual quiere aprender R por un motivo distinto: unos, para analizar encuestas; otros, por su interés en la minería de datos; algunos, para analizar series temporales,… El curso está pensado para llevar a cada cual hasta el mismo umbral de su tema de interés, de forma que pueda, después de él, avanzar en el tema por su cuenta. Pero sin hacer especial hincapié en ningún asunto concreto.
  • El contenido estadístico será mínimo (se limitará a algo de estadística descriptiva y poco más).

Los interesados encontrarán más información en este documento.

Para registrarte, basta con que te des de alta en cursoRbasico.usaR.org.es. Y si conoces a alguien potencialmente interesado en él, ¡no dudes en invitarlo!

Esperamos que esta iniciativa resulte de tu interés.

por favor ayuda con este algoritmo

de Jhon Alex Rozo -
Diseñar un algoritmo de inversion para generar la variable aleatoria max(X1;X2; ::;Xn),
con X1; :::;Xn variables aleatorias i.i.d. con funcion de distribucion F (supongamos
F1 conocida).



agradesco su ayuda

sobre la función which()

de Igor Gutiérrez -
Buenas:

La función which() me resulta muy útil porque permite seleccionar observaciones que cumplen una determinada condición y hacer con ellas toda serie de manipulaciones.

Sin embargo me he encontrado con un pequeño límite y me gustaría lanzar pregunta sobre el tema.

Supongamos que queremos graficar una variable y resaltar de azul aquellos puntos (observaciones) que cumplan una determinada condición. Esto se haría de la siguiente manera:

>plot(variable)
>points(which(condición),variable[which(condición)], col='blue')

Hasta aquí ningún problema. Ahora bien, supongamos que queremos graficar la misma variable pero con sus valores ordenados de menor a mayor. Esto lo estoy haciendo de la siguiente manera:

>plot(sort(variable))

Ahora me gustaría resaltar en azul aquellos puntos de la gráfica que cumplan la condición. Sin embargo, si hago

>points(which(condición), (sort(variable))[which(condición)], col='blue')

las abcisas no son precisamente las que yo busco, pues no van emparejadas con la ordenada que les correspondería, ya que éstas últimas han sido reordenadas de menor a mayor según los valores de mi variable.

Para solucionar este problema he probado con las funciones sort() y order() pero no acabo de dar con la forma correcta. Lo único que me ha funcionado es ordenar todo el dataframe según mi variable (hay funciones desarrolladas por otros como sort.data.frame()) y luego trabajar como si no hiciera falta ordenar.

Supongo que habrá una forma más ágil.

Muchas gracias de antemano

Sweave: cómo introducir gráficos con un ciclo for

de Igor Gutiérrez -
Buenas!

Estoy utilizando Sweave para generar documentos en Latex, todo esto a través de R-Studio.

Me interesa sobre todo automatizar las órdenes a R de tal forma que cuando cambie la base de datos a analizar Sweave me lo compile sin problemas y sin apenas tener que modificar el archivo .Rnw.

He logrado programar un resumen de estadísticos principales así como tablas de recuentos de tal forma que, introduciendo al principio del documento el conjunto de variables a analizar, Sweave me genera todo a través de un ciclo for, de la primera a la última variable.

En estos momentos estoy intentando automatizar la generación de gráficos para que me produzca un gráfico para cada una de las variables introduciento un ciclo for en un solo chunk.

La verdad es que he encontrado poca documentación al respecto, ahí va un ejemplo:

http://www.statistik.lmu.de/~leisch/Sweave/FAQ.html#x1-11000A.9

He hecho pruebas con el chunk que proponen pero no logro nada:

<<results=tex,echo=FALSE>>=
for(i in 1:4){
file=paste("myfile", i, ".eps", sep="")
postscript(file=file, paper="special", width=6, height=6)
plot(rnorm(100)+i)
dev.off()
cat("\\includegraphics{", file, "}\n\n", sep="")
}
@

Si alguien pudiera ayudarme con este tema le estaría tremendamente agradecido.

Eskerrik asko/Muchas gracias

¿Cómo se puede hacer un bucle con varias columnas de una tabla? cor.test()

de O Ka -
Hola estoy empezando en esto de R. Tengo una tabla con 20-columnas y me pregunto como puedo automatizar para que cada columna la utilice para correlacionarla con cor.test().


¿Pongo las columnas concatenadas?
c(tabla[,5:24])->correl

¿No hace falta?
tabla[,5:24]->correl

¿Como se añade eso para automatizarlo mediante for (i) {}?

Como el cor.test() necesita dos vectores debería dar valor X e Y en cada análisis a cada columna y así hasta enfrentarlas todas entre sí.

¿Alguna pincelada para avanzar un pasito? Sé que me puede faltar teoría sobre la diferencia de data.frame(), apply()... Pero sigo buscando.

Un saludo.





Modificar cadenas de texto que son argumentos de otras funciones.

de Nerea Valcarcel -
Buenas de nuevo,

para terminar de automatizar mi script, me gustaría un último cambio. Tengo que aplicarlo a varios archivos que están organizados en diferentes carpetas. Cada carpeta tiene el nombre de una muestra, y el archivo de dentro se llama igual de la carpeta.

A lo largo del programa, recurro al nombre del archivo/carpeta 3 veces, vamos a poner que la carpeta y el archivo se llaman muestra. Primero lo uso para establecer el directorio de trabajo, ya que el script genera varios archivos de resultados que necesito que se guarden en la carpeta de la muestra.

setwd ("D:/Analisis/Muestra")

Después incluyo el nombre para importar el archivo:

brutos <- read.table ("Muestra", header=FALSE, sep=" ", skip=58, fill=TRUE)

Y por último para nombrar el archivo de resultados:

write.table(final, "Muestra.txt", sep=" ", 
  col.names=TRUE, row.names=FALSE, quote=TRUE, na="NA")


Esto tengo que hacerlo con un montón de muestras, y además el número es creciente. Lo que busco es alguna forma de poder sustituir de una vez el nombre de la muestra en los 3 sitios para hacerlo lo más rápido posible.

He intentado usar substr y aunque he conseguido que el nombre cambiase, cuando incluyo el argumento de substr en alguna de las expresiones anteriores me da error de texto.

¿Se os ocurre alguna forma de que pudiera hacerlo?

Gracias de antemano,

Saludos

Ayuda con algoritmo en R

de Mauricio Bernal -
 si no es mucha molestia me podrían ayudar con este 
Hacer un programa que simule el crecimiento exponencial de una población con 
tasa finita de crecimiento  λ y población inicial N0. Hacer un gráfico con el 
tamaño poblacional hasta un tiempo t = 100.

gracias