Dodaj paski błędów, aby pokazać odchylenie standardowe na wykresie w R

Dla każdej X - wartości obliczyłem średnią Y-wartość i odchylenie standardowe (sd) każdej y-wartości

x  = 1:5
y  = c(1.1, 1.5, 2.9, 3.8, 5.2)
sd = c(0.1, 0.3, 0.2, 0.2, 0.4)

plot (x, y)

Jak mogę użyć odchylenia standardowego, aby dodać paski błędów do każdego punktu danych mojego wykresu?

Author: epo3, 2013-02-25

5 answers

Pojawia się Problem z rozwiązaniem csgillespie, gdy masz logarytmiczną oś X. Będziesz miał inną długość małych słupków po prawej i lewej stronie (epsilon podąża za wartościami x).

Powinieneś lepiej użyć funkcji {[1] } z pakietu Hmisc:

d = data.frame(
  x  = c(1:5)
  , y  = c(1.1, 1.5, 2.9, 3.8, 5.2)
  , sd = c(0.2, 0.3, 0.2, 0.0, 0.4)
)

##install.packages("Hmisc", dependencies=T)
library("Hmisc")

# add error bars (without adjusting yrange)
plot(d$x, d$y, type="n")
with (
  data = d
  , expr = errbar(x, y, y+sd, y-sd, add=T, pch=1, cap=.1)
)

# new plot (adjusts Yrange automatically)
with (
  data = d
  , expr = errbar(x, y, y+sd, y-sd, add=F, pch=1, cap=.015, log="x")
)
 18
Author: R_User,
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
2013-09-06 14:21:27

Rozwiązanie z ggplot2:

qplot(x,y)+geom_errorbar(aes(x=x, ymin=y-sd, ymax=y+sd), width=0.25)

Tutaj wpisz opis obrazka

 27
Author: juba,
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
2013-02-25 09:06:48

Oprócz odpowiedzi @csgillespie, segments jest również wektoryzowany, aby pomóc w tego typu sprawach:

plot (x, y, ylim=c(0,6))
segments(x,y-sd,x,y+sd)
epsilon <- 0.02
segments(x-epsilon,y-sd,x+epsilon,y-sd)
segments(x-epsilon,y+sd,x+epsilon,y+sd)

Tutaj wpisz opis obrazka

 20
Author: thelatemail,
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
2013-02-25 10:39:59

Możesz użyć segments, aby dodać paski w grafice bazowej. Tutaj epsilon kontroluje linię w górnej i dolnej części linii.

plot (x, y, ylim=c(0, 6))
epsilon = 0.02
for(i in 1:5) {
    up = y[i] + sd[i]
    low = y[i] - sd[i]
    segments(x[i],low , x[i], up)
    segments(x[i]-epsilon, up , x[i]+epsilon, up)
    segments(x[i]-epsilon, low , x[i]+epsilon, low)
}

Jak zauważył @thelatemail, powinienem był użyć wektoryzowanych wywołań funkcji:

segments(x, y-sd,x, y+sd)
epsilon = 0.02
segments(x-epsilon,y-sd,x+epsilon,y-sd)
segments(x-epsilon,y+sd,x+epsilon,y+sd)

Tutaj wpisz opis obrazka

 20
Author: csgillespie,
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
2013-02-25 12:35:33

Możesz użyć arrows:

arrows(x,y-sd,x,y+sd, code=3, length=0.02, angle = 90)
 20
Author: SmartCH,
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
2016-02-10 00:01:55