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