将数据转换为百分比排名

时间:2017-11-30 16:37:37

标签: r quantile quantreg

我的数据的均值和方差随着自变量的变化而变化。如何将因变量转换为(估计的)条件百分比排名?

例如,假设数据如下所示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 值转换为百分比排名(在{{的帮助下) 1}})但我怀疑包approx(...)可能更容易和更好地做到这一点。事实上,quantreg中是否存在一些自动化的功能?

0 个答案:

没有答案
相关问题