R 将数据转换为百分比秩

R 将数据转换为百分比秩,r,quantile,quantreg,R,Quantile,Quantreg,我有数据,其均值和方差随自变量的变化而变化。如何将因变量转换为(估计的)条件百分比等级 例如,假设数据如下所示: 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()绘制它:它看起来像一个离散正弦函数,其中正弦函数周围的

我有数据,其均值和方差随自变量的变化而变化。如何将因变量转换为(估计的)条件百分比等级

例如,假设数据如下所示:

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
)执行分位数回归:


给定
model.fit
我现在可以使用每个x值的估计分位数将每个y值转换成一个百分比等级(借助
近似(…)
),但我怀疑package
quantreg
可以更容易更好地做到这一点。实际上,
quantreg
中是否有一些函数可以自动执行此操作?

有关计算百分位等级的信息,请参阅;基本
分位数()
函数;关于窗口功能。@lefft:我同意。事实上,你提到的正是我在说“一种快速的方法是存储数据,然后简单地计算每个存储桶中每个观察值的排名”时所建议的。这种方法的问题在于,它会迫使用户存储数据。
quantreg
方法(IMO)更可取,因为它允许使用样条曲线而不是离散桶。有关计算百分位秩的信息,请参阅;基本
分位数()
函数;关于窗口功能。@lefft:我同意。事实上,你提到的正是我在说“一种快速的方法是存储数据,然后简单地计算每个存储桶中每个观察值的排名”时所建议的。这种方法的问题在于,它会迫使用户存储数据。
quantreg
方法(IMO)更可取,因为它允许使用样条曲线而不是离散桶。
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)