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值转换成一个百分比等级(借助近似(…)
),但我怀疑packagequantreg
可以更容易更好地做到这一点。实际上,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)