У меня есть данные, среднее значение и дисперсия которых изменяются в зависимости от независимой переменной. Как преобразовать зависимую переменную в (оценочные) условные процентные ранги?
Например, скажем, данные выглядят как Z
ниже:
library(dplyr)
library(ggplot2)
data.frame(x = runif(1000, 0, 5)) %>%
mutate(y = sin(x) + rnorm(n())*cos(x)/3) ->
Z
мы можем построить его с помощью Z %>% ggplot(aes(x,y)) + geom_point()
: это похоже на дисперсионную синусоидальную функцию, где дисперсия вокруг этой синусоидальной функции зависит от x. Моя цель — преобразовать каждое значение y в число от 0 до 1, которое представляет его процентный ранг для значений с похожим x. Таким образом, значения, очень близкие к этой синусоидальной функции, должны быть преобразованы примерно в 0,5, а значения ниже этого значения должны быть преобразованы в значения, близкие к 0 (в зависимости от дисперсии вокруг этого x).
Один из быстрых способов сделать это — разделить данные на сегменты, а затем просто вычислить ранг каждого наблюдения в каждом сегменте.
Другой способ (который я считаю предпочтительным) сделать то, что я прошу, — это выполнить квантильную регрессию для ряда различных квантилей (tau
):
library(quantreg)
library(splines)
model.fit <- rq(y ~ bs(x, df = 5), tau = (1:9)/10, data = Z)
который можно изобразить следующим образом:
library(tidyr)
data.frame(x = seq(0, 5, len = 100)) %>%
data.frame(., predict(model.fit, newdata = .), check.names = FALSE) %>%
gather(Tau, y, -x) %>%
ggplot(aes(x,y)) +
geom_point(data = Z, size = 0.1) +
geom_line(aes(color = Tau), size = 1)
Учитывая model.fit
, теперь я мог бы использовать оценочные квантили для каждого значения x, чтобы преобразовать каждое значение y в процентный ранг (с помощью approx(...)
), но я подозреваю, что пакет quantreg
может сделать это проще и лучше. Действительно ли в quantreg
есть какая-то функция, которая автоматизирует это?
quantile()
; и эту виньетку dplyr для оконных функций. - person lefft   schedule 30.11.2017quantreg
предпочтительнее (IMO), поскольку он позволяет использовать, скажем, сплайны, а не дискретные ведра. - person banbh   schedule 30.11.2017