我的数据的均值和方差随着自变量的变化而变化。如何将因变量转换为(估计的)条件百分比排名?
例如,假设数据如下所示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
中是否存在一些自动化的功能?