2012-10-29 16 views
7

Jak dodać RMSE, nachylenie, przecięcie i r^2 do wykresu za pomocą R? Dołączyłem skrypt z przykładowymi danymi, który jest podobnym formatem do mojego prawdziwego zbioru danych - niestety jestem na stanowisku. Czy istnieje łatwiejszy sposób dodania tych statystyk do wykresu niż stworzenie obiektu z równania i wstawienie go do text()? Najlepiej byłoby, gdyby statystyki były wyświetlane na stosie na wykresie. Jak mogę to zrobić?Jak dodać RMSE, nachylenie, przechwycenie, r^2 do R działki?

## 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

Spójrz na to pytanie http://stackoverflow.com/questions/7549694/ggplot2-adding-regression-line-equation-and-r2-on-graph – mnel

+0

Wszelkie pomysły, w jaki sposób dodać „RMSE = wartość "oprócz r^2 i eq dla nachylenia i przechwytywania w zgrabnym, sformatowanym stylu? – Borealis

+0

Nie podałeś żadnych szczegółów dotyczących znaczenia sformatowanej mody. W podstawowej grafice sposób dodawania tekstu do wykresu jest za pomocą 'text' (lub' mtext'), i masz link do doskonałej odpowiedzi dla ggplot. Jaki problem pozostaje? – joran

Odpowiedz

16

Oto wersja z wykorzystaniem grafiki bazowe i ?plotmath narysować wykres i opisywanie go

## 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) 

Następny obliczenia wartości, które mają być wyświetlane w adnotacji. Wolę od tego bquote(), gdzie wszystko zaznaczone w .(foo) zostanie zastąpione wartością obiektu foo. The Answer @mnel wskazuje na komentarze w komentarzach używa substitute() do osiągnięcia tego samego, ale za pomocą różnych środków. Więc tworzyć obiekty w przestrzeni roboczej dla każdej wartości może chcesz wyświetlić w adnotacji:

## 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) 

Teraz zbudować równanie za pomocą konstruktów opisanych w ?plotmath:

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

Gdy to zrobisz możesz narysować wykres i opisywanie go z wyrażeniem

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

co daje:

enter image description here

+1

Jeśli chcesz, aby każdy deskryptor w nowej linii używał '\ n' zamiast', 'w równaniu. – MikeRSpencer

Powiązane problemy