2012-04-20 26 views
6

Quiero retroceder cada columna en un conjunto de datos en un vector y luego devolver la columna que tiene el valor R-cuadrado más alto. p.ej. Tengo un vector HAPPY < - (3,2,2,3,1,3,1,3) y tengo un conjunto de datos.Regrese cada columna en un marco de datos en un vector en R

HEALTH CONINC MARITAL SATJOB1 MARITAL2     HAPPY 
3   441 5  1   2      3 
1   1764 5  1   2      2 
2   3087 5  1   2      2 
3   3087 5  1   2      3 
1   3969 2  1   5      1 
1   3969 5  1   2      3 
2   4852 5  1   2      2 
3   5734 3  1   3      3 

Regress "feliz" en cada una de las columnas del conjunto de datos a la izquierda, a continuación, devuelve la columna que tiene el más alto R cuadrado. Ejemplo: lm (Health ~ Happy) si Health tiene el valor R-cuadrado más alto, luego devuelve Health.

He intentado aplicar, pero parece que no se me ocurre cómo devolver la regresión con el R-cuadrado más alto. ¿Alguna sugerencia?

Respuesta

4

Esto va a hacer lo que quiere, asumiendo que su hoja.de.datos se llama 'd'

r2s <- apply(d, 2, function(x) summary(lm(x ~ HAPPY))$r.squared) 
names(d)[which.max(r2s)] 

Puede averiguar cómo extraer los componentes del modelo, o en este caso, un resumen del modelo , con el comando str(). Le dará una lectura que le ayuda a acceder a los componentes de cualquier objeto complejo.

5

Me gustaría romper este en dos pasos:

1) Determinar R cuadrados para cada modelo

2) determinar cuál es el valor más alto

mydf<-data.frame(aa=rpois(8,4),bb=rpois(8,2),cc=rbinom(8,1,.5), 
    happy=c(3,2,2,3,1,3,1,3)) 

myRes<-sapply(mydf[-ncol(mydf)],function(x){ 
    mylm<-lm(x~mydf$happy) 
    theR2<-summary(mylm)$r.squared 
    return(theR2) 
}) 

names(myRes[which(myRes==max(myRes))]) 

Esto fue suponiendo que happy está en su data.frame

1

Aquí hay una solución que usa la función colwise() del paquete plyr.

library(plyr) 
df = data.frame(a = runif(10), b=runif(10), c=runif(10), d = runif(10)) 

Rsq = function(x) summary(lm(df$a ~ x))$r.squared 

Rsqall = colwise(Rsq)(df[, 2:4]) 
Rsqall 

names(Rsqall)[which.max(Rsqall)] 
+1

Utilicé esta solución el otro día con RCDK. Estaba buscando el valor más alto de r.squared en todos los descriptores moleculares en la biblioteca del kit de desarrollo químico en comparación con los resultados del análisis de mis moléculas. Gracias. – user1945827

Cuestiones relacionadas