我有数据,其均值和方差随自变量而变化。如何将因变量转换为(估计的)条件百分比等级?
例如,假设数据如下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