2016-01-21 5 views
5

avevo creato una funzione personalizzata per tracciare la diagnostica di regressione come con questi versione di ggplot2 & gridextra sotto:ultima versione di ggplot2 creare problema con argomento AES

ggplot2  * 1.0.1  2015-03-17 CRAN (R 3.2.1)     
gridExtra  * 2.0.0  2015-07-14 CRAN (R 3.2.1) 

head(dadHospital) 
     SL. BODY.WEIGHT TOTAL.COST.TO.HOSPITAL 
## 1 1   49     660293 
## 2 2   41     809130 
## 3 3   47     362231 
## 4 4   80     629990 
## 5 5   58     444876 
## 6 6   45     372357 

fit1<-lm(TOTAL.COST.TO.HOSPITAL~BODY.WEIGHT,data=dadHospital) 

#custom function of plotting model diagnostics using ggplot2 

library(ggplot2) 
diagPlot<-function(model){ 
p1<-ggplot(model, aes(.fitted, .resid))+geom_point() 
p1<-p1+stat_smooth(method="loess")+geom_hline(yintercept=0, col="red", linetype="dashed") 
p1<-p1+xlab("Fitted values")+ylab("Residuals") 
p1<-p1+ggtitle("Residual vs Fitted Plot")+theme_bw() 

p2<-ggplot(model, aes(qqnorm(.stdresid)[[1]], .stdresid))+geom_point(na.rm = TRUE) 
p2<-p2+geom_abline(aes(qqline(.stdresid)))+xlab("Theoretical Quantiles")+ylab("Standardized Residuals") 
p2<-p2+ggtitle("Normal Q-Q")+theme_bw() 

p3<-ggplot(model, aes(.fitted, sqrt(abs(.stdresid))))+geom_point(na.rm=TRUE) 
p3<-p3+stat_smooth(method="loess", na.rm = TRUE)+xlab("Fitted Value") 
p3<-p3+ylab(expression(sqrt("|Standardized residuals|"))) 
p3<-p3+ggtitle("Scale-Location")+theme_bw() 

p4<-ggplot(model, aes(seq_along(.cooksd), .cooksd))+geom_bar(stat="identity", position="identity") 
p4<-p4+xlab("Obs. Number")+ylab("Cook's distance") 
p4<-p4+ggtitle("Cook's distance")+theme_bw() 

p5<-ggplot(model, aes(.hat, .stdresid))+geom_point(aes(size=.cooksd), na.rm=TRUE) 
p5<-p5+stat_smooth(method="loess", na.rm=TRUE) 
p5<-p5+xlab("Leverage")+ylab("Standardized Residuals") 
p5<-p5+ggtitle("Residual vs Leverage Plot") 
p5<-p5+scale_size_continuous("Cook's Distance", range=c(1,5)) 
p5<-p5+theme_bw()+theme(legend.position="bottom") 

p6<-ggplot(model, aes(.hat, .cooksd))+geom_point(na.rm=TRUE)+stat_smooth(method="loess", na.rm=TRUE) 
p6<-p6+xlab("Leverage hii")+ylab("Cook's Distance") 
p6<-p6+ggtitle("Cook's dist vs Leverage hii/(1-hii)") 
p6<-p6+geom_abline(slope=seq(0,3,0.5), color="gray", linetype="dashed") 
p6<-p6+theme_bw() 

return(list(rvfPlot=p1, qqPlot=p2, sclLocPlot=p3, cdPlot=p4, rvlevPlot=p5, cvlPlot=p6)) 
} 

par(mfrow=c(1,1)) 
diagPlts<-diagPlot(fit1) 

#To display the plots in a grid, some packages mentioned above should be installed. 

library(gridExtra) 
grid.arrange(diagPlts$rvfPlot,diagPlts$qqPlot,diagPlts$sclLocPlot,diagPlts$cdPlot,diagPlts$rvlevPlot,diagPlts$cvlPlot,ncol=3) 

enter image description here

ora con l'ultima versione di ggplot22.0.0 se corro la stessa funzione ottengo questo errore:

Error: Aesthetics must be either length 1 or the same as the data (248): x 

Ho bisogno di aiuto. Presumo con la versione più recente di ggplot2, alcune modifiche sono state introdotte nell'argomento aes, di cui non sono a conoscenza.

While debugging i get the error here.... 

p2<-ggplot(fit1, aes(qqnorm(.stdresid)[[1]], .stdresid))+geom_point(na.rm = TRUE) 
p2<-p2+geom_abline(aes(qqline(.stdresid)))+xlab("Theoretical Quantiles")+ylab("Standardized Residuals") 
p2<-p2+ggtitle("Normal Q-Q")+theme_bw() 
p2 
Error: Aesthetics must be either length 1 or the same as the data (248): x 
+1

Puoi rendere questo errore riproducibile con un breve esempio? –

+0

You ggplot2 e la tua versione R sono vecchi. Qualche motivo per non aggiornare? Una sessione completaInfo() è anche utile in questo tipo di domande. –

+0

ho l'ultima versione di R e ggplot2 .... problema emerso solo dopo aver aggiornato il pacchetto ggplot2 .... – Nishant

risposta

4

È possibile sostituire il codice per la p2 withe speciale geom_qq() che fa la stessa trama.

p2<-ggplot(model,aes(sample=.stdresid))+geom_qq() 
p2<-geom_abline()+xlab("Theoretical Quantiles")+ylab("Standardized Residuals") 
p2<-p2+ggtitle("Normal Q-Q")+theme_bw() 

Per il vostro codice esistente si solo bisogno di togliere aes() parte dal geom_abline().

p2<-ggplot(model, aes(qqnorm(.stdresid)[[1]], .stdresid))+geom_point(na.rm = TRUE) 
    p2<-p2+geom_abline()+xlab("Theoretical Quantiles")+ylab("Standardized Residuals") 
    p2<-p2+ggtitle("Normal Q-Q")+theme_bw() 
+0

thnx molto @Didzis Elferts ..... hai fatto la mia giornata ...... – Nishant