我有一个数据集的散点图,我有兴趣计算数据的上限。我不知道这是否是一种标准的统计方法,所以我正在考虑将 X 轴数据分成小范围,计算这些范围的最大值,然后尝试确定一个函数来描述这些点。R中是否已经有一个函数可以做到这一点?
如果它是相关的,则有 92611 点。
我有一个数据集的散点图,我有兴趣计算数据的上限。我不知道这是否是一种标准的统计方法,所以我正在考虑将 X 轴数据分成小范围,计算这些范围的最大值,然后尝试确定一个函数来描述这些点。R中是否已经有一个函数可以做到这一点?
如果它是相关的,则有 92611 点。
您可能想查看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)
这应该给你这个:
我会支持 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) )