Преобразование данных в процентный ранг

У меня есть данные, чье среднее значение и дисперсия изменяется в зависимости от независимой переменной. Как преобразовать зависимую переменную в (оценочный) процентный рейтинг?

Например, скажем, данные выглядят как 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 который автоматизирует это?

0 ответов

Другие вопросы по тегам