4

我有一个数据集的散点图,我有兴趣计算数据的上限。我不知道这是否是一种标准的统计方法,所以我正在考虑将 X 轴数据分成小范围,计算这些范围的最大值,然后尝试确定一个函数来描述这些点。R中是否已经有一个函数可以做到这一点?

如果它是相关的,则有 92611 点。

替代文字

4

2 回答 2

10

您可能想查看quantreg包中提供的分位数回归。这是否有用取决于您是否希望“窗口”内的绝对最大值是某个极端分位数(例如第 95 位还是第 99 位)是否可以接受?如果您不熟悉分位数回归,请考虑适合期望或平均响应模型的线性回归,以模型协变量为条件。中间分位数(0.5)的分位数回归将模型拟合到中位数响应,以模型协变量为条件。

这是一个使用quantreg包的示例,向您展示我的意思。首先,生成一些类似于您显示的数据的虚拟数据:

set.seed(1)
N <- 5000
DF <- data.frame(Y = rev(sort(rlnorm(N, -0.9))) + rnorm(N),
                 X = seq_len(N))
plot(Y ~ X, data = DF)

接下来,将模型拟合到第 99 个百分位数(或 0.99 分位数):

mod <- rq(Y ~ log(X), data = DF, tau = .99)

为了生成“拟合线”,我们从模型中预测 100 个等距值X

pDF <- data.frame(X = seq(1, 5000, length = 100))
pDF <- within(pDF, Y <- predict(mod, newdata = pDF))

并将拟合模型添加到图中:

lines(Y ~ X, data = pDF, col = "red", lwd = 2)

这应该给你这个:

分位数回归输出

于 2011-01-04T14:26:23.390 回答
3

我会支持 Gavin 使用分位数回归的提名。您的数据可能会使用您的 X 和 Y 进行模拟,每个对数正态分布。如果您运行,您可以看到两个独立(没有强加相关性,但不一定是 cor(x,y)==0)对数正态变量的联合分布图:

x <- rlnorm(1000, log(300), sdlog=1)
y<- rlnorm(1000, log(7), sdlog=1)
plot(x,y, cex=0.3)

替代文字

您可能会考虑使用 qqplot(在基本绘图函数中)查看它们各自的分布,记住这种分布的尾部可能会以令人惊讶的方式表现。您应该对大部分值与特定分布的拟合程度而不是极端值更感兴趣......当然,除非您的应用程序是在金融或保险领域。不希望因为对尾部行为的不良建模​​假设而再次发生全球金融危机,现在是吗?

qqplot(x, rlnorm(10000, log(300), sdlog=1) )
于 2011-01-04T15:37:15.363 回答