Sigmoid eğrinin düz kısmının eğiminin hesaplanması


11

Bana bu görev verildi ve çok şaşırdım. Bir meslektaşım benden aşağıdaki grafiğin ve değerlerini tahmin etmemi istedi :xupperxlower

resim açıklamasını buraya girin

Eğri aslında kümülatif bir dağılımdır ve x bir tür ölçümdür. Kümülatif fonksiyon düzleşmeye ve düz olmaktan sapmaya başladığında x'in karşılık gelen değerlerinin ne olduğunu bilmek ister.

Bir noktada eğimi bulmak için farklılaşmayı kullanabileceğimizi anlıyorum, ancak çizgiyi ne zaman düz olarak arayabileceğimizi nasıl belirleyeceğimizden emin değilim. Halihazırda var olan bazı yaklaşımlara / literatüre yönelik herhangi bir dürtü çok takdir edilecektir.

Bu tür araştırmalarla ilgili herhangi bir paket veya örnek biliyorsanız R'yi de biliyorum.

Çok teşekkürler.


GÜNCELLEME

Flounderer sayesinde, işi daha da genişletebildim, bir çerçeve oluşturdum ve parametreleri burada düzelttim. Öğrenme amacı için şu anki kodum ve bir grafik çıktısı var.

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))

resim açıklamasını buraya girin


2
İkinci türevin ne zaman 0 veya 0'a yakın olduğunu belirlemeye çalışabilir misiniz?
alex

3
Formülasyon sorunu - büyük olasılıkla - “düz” kesimin mevcut olmaması olabilir. Güçlü bir lens alırsanız ve o bölgeyi incelerseniz, hala sorunsuz bir şekilde S şeklinde olduğunu fark edebilirsiniz.
ttnphns

@alex Bu ipucu için teşekkürler, kollarımı toplayacağım ve bazı düşünceler ve bir deneyeceğim.
Penguin_Knight

2
Eğer kişi bir yoğunluğa uyacaksa (örneğin çekirdek yoğunluğu tahmini, log-spline yoğunluk tahmini veya hatta bazı parametrik model), yoğunluğun zirvesindeki yüksekliği CDF'nin maksimum eğiminin bir tahminidir. Zirvenin 'genişliği', x-değerleri aralığının, bu eğim hakkında sabitmiş gibi konuşmanın bir tür mantıklı olduğu yer hakkında bir şey anlatır.
Glen_b -Reinstate Monica

2
@ Glen_b'in yorumunu takip etmek için asıl mesele, istediğiniz şeyin yeterli bir titizlikle tanımlanmamış olmasıdır. "Omuzlar" x_lower ve x_upper PDF maksimum sayısının ne kadar altında olmalıdır? Bazı nicel ölçütlere ihtiyaç vardır.
whuber

Yanıtlar:


9

İşte @ alex'in önerisine dayanan hızlı ve kirli bir fikir.

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

Biraz verilerinize benziyor. Fikir şimdi türeve bakmak ve en büyük nerede olduğunu görmeye çalışmak. Bu, eğrinizin S şekli olması nedeniyle en düz olduğu kısmı olmalıdır.

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

Bu kıpır kıpır çünkü bazı değerleri birbirine çok yakın olur. Ancak, günlükleri almak yardımcı olur ve daha sonra düzgünleştirilmiş bir sürüm kullanabilirsiniz.x

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

Şimdi 'leri şöyle bulmaya çalışabilirsiniz :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))

resim açıklamasını buraya girin

Tabii ki, her şey sonuçta cutoffyumuşatma algoritmasının seçimine ve seçimine ve aynı zamanda başka bir dönüşüm yapabileceğimiz günlükleri almaya da duyarlıdır . Ayrıca, gerçek veri için, rasgele varyasyon bu yöntem ile ilgili sorunlara neden da olabilir. Türevler sayısal olarak iyi davranmıyor. Düzenle: çıktının resmi eklendi.y


Bu harika! Örnek ve kod için teşekkürler! Verilerimle denedim ve oldukça iyi çalışıyor gibi görünüyor. :)
Penguin_Knight

Teşekkürler! Ben de bundan memnunum. Günlükleri almanın sihirli bir şekilde nasıl çalıştığını komik.
Flounderer
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.