2012-10-29 3 views
7

Come posso aggiungere RMSE, slope, intercettare e r^2 a un grafico usando R? Ho allegato uno script con dati di esempio, che è un formato simile al mio set di dati reale - sfortunatamente, sono fermo. C'è un modo più semplice per aggiungere queste statistiche al grafico piuttosto che creare un oggetto da un'equazione e inserirlo in text()? Preferirei che le statistiche fossero visualizzate impilate sul grafico. Come posso realizzare questo?Come aggiungere RMSE, slope, intercettare, r^2 alla trama R?

## Generate Sample Data 
x = c(2,4,6,8,9,4,5,7,8,9,10) 
y = c(4,7,6,5,8,9,5,6,7,9,10) 

# Create a dataframe to resemble existing data 
mydata = data.frame(x,y) 

#Plot the data 
plot(mydata$x,mydata$y) 
abline(fit <- lm(y~x)) 

# Calculate RMSE 
model = sqrt(deviance(fit)/df.residual(fit)) 

# Add RMSE value to plot 
text(3,9,model) 
+0

Guardate questa domanda http://stackoverflow.com/questions/7549694/ggplot2-adding-regression-line-equation-and-r2-on-graph – mnel

+0

Tutte le idee su come aggiungere "RMSE = valore "oltre a r^2 e un eq per pendenza e intercettazione in un modo ordinato e formattato? – Borealis

+0

Non hai fornito alcun dettaglio su cosa intendi per "modo formattato". Nella grafica di base, il modo in cui aggiungi testo ad un grafico è con 'text' (o' mtext'), e hai un link per una risposta eccellente per ggplot. Che problema rimane? – joran

risposta

16

Ecco una versione con grafica di base e ?plotmath per disegnare la trama e annotarlo

## Generate Sample Data 
x = c(2,4,6,8,9,4,5,7,8,9,10) 
y = c(4,7,6,5,8,9,5,6,7,9,10) 

## Create a dataframe to resemble existing data 
mydata = data.frame(x,y) 

## fit model 
fit <- lm(y~x, data = mydata) 

Successivo calcolare i valori che si desidera visualizzare in annotazione. Preferisco bquote() per questo, in cui qualsiasi cosa contrassegnato in .(foo) verrà sostituito dal valore dell'oggetto foo. La risposta a @mnel ti indica nei commenti utilizza substitute() per ottenere la stessa cosa ma con mezzi diversi. Così creo oggetti nello spazio di lavoro per ogni valore si potrebbe voler visualizzare nella nota:

## Calculate RMSE and other values 
rmse <- round(sqrt(mean(resid(fit)^2)), 2) 
coefs <- coef(fit) 
b0 <- round(coefs[1], 2) 
b1 <- round(coefs[2],2) 
r2 <- round(summary(fit)$r.squared, 2) 

Ora costruire l'equazione, utilizzando i costrutti descritti in ?plotmath:

eqn <- bquote(italic(y) == .(b0) + .(b1)*italic(x) * "," ~~ 
        r^2 == .(r2) * "," ~~ RMSE == .(rmse)) 

Una volta fatto ciò è possibile disegnare la trama e annotare con la vostra espressione

## Plot the data 
plot(y ~ x, data = mydata) 
abline(fit) 
text(2, 10, eqn, pos = 4) 

che dà:

enter image description here

+1

Se vuoi che ogni descrittore su una nuova riga usi '\ n' invece di', 'nell'equazione. – MikeRSpencer