Jak dodać RMSE, slope, intercept, r^2 do R plot?

Jak dodać RMSE, slope, intercept i R^2 do wykresu za pomocą R? Załączyłem skrypt z przykładowymi danymi, który jest w formacie podobnym do mojego prawdziwego zbioru danych -- niestety, jestem w stanie spoczynku. Czy istnieje łatwiejszy sposób dodawania tych statystyk do wykresu niż tworzenie obiektu z równania i wstawianie go do text()? Chciałbym, aby statystyki były wyświetlane na wykresie. Jak mogę to osiągnąć?

## 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)
Author: Borealis, 2012-10-29

1 answers

Oto wersja wykorzystująca grafikę bazową i ?plotmath do rysowania wykresu i adnotacji

## 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ępnie Oblicz wartości, które mają pojawić się w adnotacji. Preferuję bquote() do tego, gdzie wszystko zaznaczone w .(foo) zostanie zastąpione przez wartość obiektu foo. Odpowiedź @mnel wskazuje w komentarzach substitute(), aby osiągnąć to samo, ale za pomocą innych środków. Tak więc tworzę obiekty w obszarze roboczym dla każdej wartości, którą możesz chcieć wyświetlić w adnotacja:

## 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 zbuduj równanie używając 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 dodać do niego adnotację za pomocą swojego wyrażenia

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

Co daje:

Tutaj wpisz opis obrazka

 17
Author: Gavin Simpson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-29 10:06:36