2012-01-15 2 views
1

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

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

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

+1

квантиль регрессии может быть хорошей идеей (см 'quantreg'), для подгонки модели к медиане' y' как функции 'x' ... –

+0

Спасибо. Может быть, вы могли бы предоставить мне пример или функцию пакета quantreg для начала? – ECII

ответ

4

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

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)) 
+0

Решение DWins работает лучше с моими данными, но ваш ответ проще и делает то, что задает вопрос, и поэтому я даю вам ответ. Моя проблема заключается в том, что уникальный() убирает много моих данных. Локальная регрессия для данных, которые у меня есть, кажется лучшим решением. – ECII

2

идея, реализующего Bolker является на самом деле довольно просто. Это просто черчение результатов первого примера в rq функции ПАКЕТА quantreg в

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

Это Безразлично» t хорошо справляется с x vlaues, где есть только одно значение, но похоже, что оно приближается к медианному, когда используется семейство = «симметричный» вариант.

+0

Фантастический !!! Почему параметр «family =» симметричный «» настолько критичен? Где я могу найти дополнительную информацию об этом (помощь тоже не очень помогает) – ECII

+0

Поскольку я прочитал документацию, если вы принимаете по умолчанию, вы будете получать оценки локального среднего, а не медиана. Я действительно думал, что подход Дж. Гротендика был одновременно более простым и точным в реализации того, что вы просили, чем моего. –

+0

@ Решение G.Grothendieck, даже такое же простое, как ti, может показаться как-то неисправно с моими данными. – ECII

Смежные вопросы