估计S型曲线笔直部分的斜率


11

我被赋予了这项任务,并感到沮丧。一位同事让我估算下图的和:XüppË[RXØwË[R

在此处输入图片说明

曲线实际上是累积分布,而x是某种度量。他很想知道当累积函数开始变得笔直并偏离笔直时,x上对应的值是多少。

我知道我们可以使用微分来找到某个点的斜率,但是我不太确定如何确定何时可以将该直线称为直线。任何对某些已经存在的方法/文学的微调将不胜感激。

如果您碰巧知道此类调查的任何相关软件包或示例,我也知道R。

非常感谢。


更新

多亏了Flounderer,我得以进一步扩展工作,建立框架并在这里和那里修改参数。为了学习,这里是我当前的代码和图形输出。

library(ESPRESSO)

x <- skew.rnorm(800, 150, 5, 3)
x <- sort(x)
meanX <- mean(x)
sdX <- sd(x)
stdX <- (x-meanX)/sdX
y <- pnorm(stdX)

par(mfrow=c(2,2), mai=c(1,1,0.3,0.3))
hist(x, col="#03718750", border="white", main="")

nq <- diff(y)/diff(x)
plot.ts(nq, col="#6dc03480")

log.nq <- log(nq)
low <- lowess(log.nq)
cutoff <- .7
q <- quantile(low$y, cutoff)
plot.ts(log.nq, col="#6dc03480")
abline(h=q, col="#348d9e")

x.lower <- x[min(which(low$y > q))]
x.upper <- x[max(which(low$y > q))]
plot(x,y,pch=16,col="#03718750", axes=F)
axis(side=1)
axis(side=2)
abline(v=c(x.lower, x.upper),col="red")
text(x.lower, 1.0, round(x.lower,0))
text(x.upper, 1.0, round(x.upper,0))

在此处输入图片说明


2
您能否尝试确定二阶导数是0还是接近0?
Alex

3
制定的问题可能是-很可能-不存在“笔直”的切口。如果您拿起一个坚固的镜头并检查该区域,您可能会注意到它仍然是光滑的S形。
ttnphns

@alex感谢您提供此技巧,我会袖手旁观,并给出一些想法和尝试。
2013年

2
如果要适合某个密度(例如,通过核密度估计,对数样条密度估计,甚至某种参数模型进行拟合),则其峰值处的密度高度就是CDF的最大斜率的估计。峰值的“宽度”告诉您有关x值的范围有多宽,以某种角度谈论该斜率就好像是恒定的一样。
Glen_b-恢复莫妮卡

2
要跟进@Glen_b的评论,主要要点是您所要求的没有足够严格地定义。应该将“凸肩” x_lower和x_upper定位在PDF最大值以下吗?需要一些定量标准。
ub

Answers:


9

这是一个基于@alex的建议的快速而肮脏的想法。

#simulated data
set.seed(100)
x <- sort(exp(rnorm(1000, sd=0.6)))
y <- ecdf(x)(x)

看起来有点像您的数据。现在的想法是查看导数并尝试查看最大的导数。这应该是曲线中最直的部分,因为它是S形。

NQ <- diff(y)/diff(x)
plot.ts(NQ)

摇摆不定是因为某些值恰好非常接近。但是,获取日志会有所帮助,然后可以使用平滑版本。X

log.NQ <- log(NQ)
low <- lowess(log.NQ)
cutoff <- 0.75
q <- quantile(low$y, cutoff)
plot.ts(log.NQ)
abline(h=q)

现在,您可以尝试查找,如下所示:X

x.lower <- x[min(which(low$y > q))]
x.upper <- x[max(which(low$y > q))]
plot(x,y)
abline(v=c(x.lower, x.upper))

在此处输入图片说明

当然cutoff,当我们可以进行其他一些转换时,整个过程最终都会对平滑算法的选择以及对数的选择非常敏感。同样,对于真实数据,随机变化也可能导致此方法出现问题。导数在数值上不正确。编辑:添加输出图片。ÿ


太棒了!感谢您的示例和代码!我用我的数据进行了尝试,它似乎工作得很好。:)
Penguin_Knight

谢谢!我也很高兴。有趣的是,如何以神奇的方式记录日志使其工作。
Flounderer
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.