Эллипс, представляющий горизонтальные и вертикальные полосы ошибок с R - PullRequest
3 голосов
/ 22 сентября 2011

В R, как использовать эллипсы для представления полос ошибок (стандартное отклонение) для переменных x и y, если доступны только сводные данные, то есть среднее значение и SD для разных наборов данных. Любые отзывы приветствуются.

Ответы [ 3 ]

2 голосов
/ 22 сентября 2011

Вы можете написать свою собственную функцию, например, такую:

draw_ellipse = function (mean_x, mean_y, sd_x, sd_y)
{
    ellipse <- function (x) { sin(acos(x)) }
    t = seq(-1, 1, length.out = 100)
    el_y = sd_y*ellipse(t)
    newx = mean_x + sd_x * t
    polygon(c(newx, rev(newx)), c(mean_y + el_y, rev(mean_y - el_y)), col = "grey", border = NA)
}

Вы можете использовать ее очень легко, используя apply():

x = runif(10)
y = runif(10)
sd_x = abs(rnorm(10, 0.1, 0.02))
sd_y = abs(rnorm(10, 0.05, 0.01))
plot(x, y)
df = data.frame(x, y, sd_x, sd_y)
apply(df, 1, function (x) { draw_ellipse(x[1], x[2], x[3], x[4]) })
points(x, y, pch = 3)

Решение для построения эллипсов сразные цвета:

draw_ellipse = function (mean_x, mean_y, sd_x, sd_y, colidx)
{
    ellipse <- function (x) { sin(acos(x)) }
    t = seq(-1, 1, length.out = 100)
    el_y = sd_y*ellipse(t)
    newx = mean_x + sd_x * t
    polygon(c(newx, rev(newx)), c(mean_y + el_y, rev(mean_y - el_y)), col = as.character(colors[colidx]), border = NA)
}

x = runif(10)
y = runif(10)
sd_x = abs(rnorm(10, 0.1, 0.02))
sd_y = abs(rnorm(10, 0.05, 0.01))
plot(x, y)
colors = rainbow(length(x))
df = data.frame(x, y, sd_x, sd_y, colidx = 1:length(x))
apply(df, 1, function (x) { draw_ellipse(x[1], x[2], x[3], x["sd_y"], x["colidx"]) })
points(x, y, pch = 3)
1 голос
/ 22 сентября 2011

Вам может понравиться функция car::ellipse, т.е. функция ellipse () в пакете автомобиля.

0 голосов
/ 22 сентября 2011

Функция ellipse в пакете ellipse будет принимать сводную информацию (включая корреляцию) и предоставлять эллипс, представляющий область доверия.

...