2013-06-19 5 views
8

Ecco alcuni dati e una trama:geom_smooth su un sottoinsieme di dati

set.seed(18) 
data = data.frame(y=c(rep(0:1,3),rnorm(18,mean=0.5,sd=0.1)),colour=rep(1:2,12),x=rep(1:4,each=6)) 

ggplot(data,aes(x=x,y=y,colour=factor(colour)))+geom_point()+ geom_smooth(method='lm',formula=y~x,se=F) 

enter image description here

Come si può vedere la regressione lineare è fortemente influenzata dai valori in cui x = 1. È possibile ottenere regressioni lineari calcolate per x> = 2 ma visualizzare i valori per x = 1 (y è uguale a 0 o 1). Il grafico risultante sarebbe esattamente lo stesso ad eccezione delle regressioni lineari. Non avrebbero "sofferto" l'influenza dei valori su abscisse = 1

risposta

10

È semplice come geom_smooth(data=subset(data, x >= 2), ...). Non è importante se questa trama è solo per te, ma renditi conto che qualcosa del genere sarebbe fuorviante per gli altri se non includi una menzione su come è stata eseguita la regressione. Consiglierei di cambiare la trasparenza dei punti esclusi.

ggplot(data,aes(x=x,y=y,colour=factor(colour)))+ 
geom_point(data=subset(data, x >= 2)) + geom_point(data=subset(data, x < 2), alpha=.2) + 
geom_smooth(data=subset(data, x >= 2), method='lm',formula=y~x,se=F) 

enter image description here

+1

Aahh Amo le soluzioni semplici! Molte grazie. E grazie anche per il consiglio e il trucco di trasparenza. –

+0

Cosa devo fare se questa soluzione produce questo errore "L'estetica deve essere di lunghezza 1 o uguale ai dati" sul mio set di dati? –

7

La funzione normale lm ha un argomento weights che è possibile utilizzare per assegnare un peso ad una particolare osservazione. In questo modo puoi capire con l'influenza che l'osservazione ha sul risultato. Penso che questo sia un modo generale di affrontare il problema invece di inserire i dati. Ovviamente, assegnare pesi ad hoc non è di buon auspicio per la solidità statistica dell'analisi. È sempre meglio avere una motivazione dietro i pesi, ad es. le osservazioni di peso ridotto hanno una maggiore incertezza.

Penso che sotto il cofano usi la funzione lm in modo da poter essere in grado di passare l'argomento weights. È possibile aggiungere i pesi attraverso l'estetica (aes), partendo dal presupposto che il peso viene memorizzato in un vettore:

ggplot(data,aes(x=x,y=y,colour=factor(colour))) + 
    geom_point()+ stat_smooth(aes(weight = runif(nrow(data))), method='lm') 

si potrebbe anche mettere il peso in una colonna nel set di dati:

ggplot(data,aes(x=x,y=y,colour=factor(colour))) + 
    geom_point()+ stat_smooth(aes(weight = weight), method='lm') 

dove la la colonna è denominata weight.