Bueno, ya lo he solucionado gracias a Carlos
me ha enviado un correo en privado (supongo que se ha despistado, si
no lo querÃas hacer público ya es tarde) con esta info:
--
Creo que lo tienes (en formato básico) aquÃ:
https://stat.ethz.ch/pipermail/r-help/2007-November/146285.html
Aunque pensaba que si tu objetivo último es el de que usuarios
"potencialmente tontos" sean capaces de usar un software y arreglar
una regresión (con todo lo que conlleva), tal vez un método "robusto",
como el descrito en
http://cran.r-project.org/doc/contrib/Fox-Companion/appendix-robust-regression.pdf
puede resultar más automático y evita en determinados casos la
manipulación manual (valga la redundancia) de los datos.
En el ejemplo de ese articulillo verás tres "regresiones": una con
todos los puntos, otra quitando dos y una tercera usando un método
robusto...
--
Asà que he seguido el primer método. En mi caso me he dado cuenta de
que no es tan importante que los outliers se pinten diferente y no se
tengan en cuenta en la correlación, pues con la presente solución el
usuario los puede advertir y seleccionar para que no sean tenidos en
cuenta desde mi soft. La solución (por si le sirve a alguien) es:
--
serie0 <- c(0.651, 0.712, 0.614, 0.645, 0.559, 0.647, 0.642, 0.534,
0.616, 0.621, 0.623)
serie1 <- c(0.572, 0.641, 0.565, 0.596, 0.518, 0.604, 0.602, 0.501,
0.58, 0.589, 0.596)
data <- cbind(serie0, serie1)
colnames(data) <- c('ABK', 'CMJ')
rownames(data) <- c('CV', 'JN', 'MM', 'AT', 'NS', 'JA', 'SR', 'PC',
'JS', 'CB', 'AG')
colors=gray.colors(length(rownames(data)))
rang <- c(1:length(rownames(data)))
plot(serie0,serie1,xlim=c(min(serie0),max(serie0)),ylim=c(min(serie1),max(serie1)),
pch=rang, col='black', xlab='ABK', ylab='CMJ')
legend('bottomright' ,legend=rownames(data), pch=rang, col='black', cex=.7)
title(main='IUB (abk-cmj)/cmj *100 (XY)',
sub=paste('correlation:',cor(serie0,serie1)), cex.sub=0.75,
font.sub=3, col.sub='grey30')
mylm<-lm(serie1~serie0)
abline(mylm,col="red")
newx<-seq(min(serie0),max(serie0),length.out=length(serie0))
prd<-predict(mylm,newdata=data.frame(serie0=newx),interval =
c("confidence"), level = 0.90,type="response")
lines(newx,prd[,3],col="red",lty=2)
lines(newx,prd[,2],col="red",lty=2)
text(newx[1],prd[1,3],"90%", cex=0.6)
text(newx[1],prd[1,2],"90%", cex=0.6)
text(newx[length(newx)],prd[length(newx),3],"90%", cex=0.6)
text(newx[length(newx)],prd[length(newx),2],"90%", cex=0.6)
--
Gracias a todos
2009/12/10 Carlos J. Gil Bellosta <cgb en datanalytics.com>:
Hola, ¿qué tal?
Si tu regresión es
lm.00 <- lm(serie1 ~ serie0),
entonces
stdres( lm.00 )
es decir, los residuos estandarizados, "deberÃan" ser normales (de
hecho, haz plot( lm.00 ) ) con media 0 y varianza unitaria.
Si escribes
which( abs( stdres( lm.00 ) ) > mi.umbral  )
obtendrás los "outliers" dependiendo de tu umbral.
Nada garantiza, sin embargo, que tus residuos sean normales...
Un saludo,
Carlos J. Gil Bellosta
http://www.datanalytics.com
El dÃa 10 de diciembre de 2009 18:19, Xavi de Blas
<xaviblas en gmail.com> escribió:
Hola amigos, esta es mi primera duda, espero que no sea demasiado fácil.
Tengo unos datos de dos variables y quiero mostrar recta de regresión
y valor de correlación
serie0 <- c(0.651, 0.712, 0.614, 0.645, 0.559, 0.647, 0.642, 0.534,
0.616, 0.621, 0.623)
serie1 <- c(0.572, 0.641, 0.565, 0.596, 0.518, 0.604, 0.602, 0.501,
0.58, 0.589, 0.596)
data <- cbind(serie0, serie1)
colnames(data) <- c('ABK', 'CMJ')
rownames(data) <- c('CV', 'JN', 'MM', 'AT', 'NS', 'JA', 'SR', 'PC',
'JS', 'CB', 'AG')
colors=gray.colors(length(rownames(data)))
rang <- c(1:length(rownames(data)))
plot(serie0, serie1, pch=rang, col='black', xlab='ABK', ylab='CMJ')
abline(lm(serie1 ~ serie0),col='grey30')
legend('bottomright' ,legend=rownames(data), pch=rang, col='black', cex=.7)
title(main='IUB (abk-cmj)/cmj *100 (XY)',
sub=paste('correlation:',cor(serie0,serie1)), cex.sub=0.75,
font.sub=3, col.sub='grey30')
¿cómo podrÃa identificar de forma automatizada los datos atÃpicos
(outliers)?. Me gustarÃa poder:
-pintarlos de otro color
-excluirlos de la recta de regresión
-excluirlos de la correlación
me preocupa sólo la identificación, porque el resto de código ya puedo hacerlo.
he cargado el paquete outliers, pero con lo poco que lo conozco sólo
encuentro métodos que me devuelven un outlier y no varios (si los hay)
http://rss.acs.unt.edu/Rdoc/library/outliers/html/00Index.html
gracias, saludos
_______________________________________________
R-help-es mailing list
R-help-es en r-project.org
https://stat.ethz.ch/mailman/listinfo/r-help-es