1

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

例如,假设数据如下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(...)quantregquantreg

4

0 回答 0