Разделить наблюдения пополам - PullRequest
1 голос
/ 15 января 2012

На графике (x, y) есть ли способ построить линию / кривую / функцию, которая бы разбивалась ** на каждый x (см. DWins комментарий ) ** наблюдения в 2 половины?Так, что ** в arround каждого x (см. DWins комментарий ) ** одинаковое количество наблюдений выше и ниже этой линии / кривой / функции?Есть ли способ получить координаты (x, y) или функцию этой линии / кривой / функции?

Поскольку регрессия данных проблематична из-за выбросов / ненормальности и т. Д., И т. Д., Хотя я и программируюМетод может обеспечить жизнеспособное решение, не прибегая к сложным методам регрессии.

Большое спасибо

Ответы [ 2 ]

4 голосов
/ 15 января 2012

Сначала сгенерируйте некоторые тестовые данные:

x <- c(1, 1, 1, 2, 2, 3, 3, 3, 3)
y <- seq_along(x)

Теперь предположим, что данные отсортированы по x, рассчитайте медиану для каждого x и построите график:

plot(y ~ x)

m <- tapply(y, x, median)
lines(m ~ unique(x))
2 голосов
/ 15 января 2012

Реализация идеи Болкера действительно довольно проста. Это всего лишь вывод результатов первого примера из пакета * * * * * * * * * * * *

require(quantreg)
 data(stackloss); fit <- rq(stack.loss ~ Air.Flow, .5, data=stackloss)
 with(stackloss,   plot(Air.Flow, stack.loss))
 abline(a=coef(fit)[1], b=coef(fit)[2])

Однако это не решение "в каждой точке", поэтому рассмотрим такой подход loess:

fit <-loess(stack.loss ~ Air.Flow, data=stackloss, family="symmetric")
plot(stack.loss ~ Air.Flow, data=stackloss)
with(stackloss, lines(sort(unique(Air.Flow)),  
                      predict(fit, data.frame(Air.Flow=sort(unique(Air.Flow))))))

Это не очень хорошо в значениях x, где есть только одно значение, но кажется, что оно достаточно близко к медиане при использовании опции family = "симметричный".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...