Оцінка нахилу прямої частини сигмовидної кривої


11

Мені було дано це завдання і застукали. Колега попросив мене оцінити та x l o w e r наступної діаграми:хуppеrхлошеr

введіть тут опис зображення

Крива насправді є кумулятивним розподілом, а x - це якесь вимірювання. Йому цікаво знати, які є відповідні значення на x, коли сукупна функція почала ставати прямою та відхилятися від прямої.

Я розумію, що ми можемо використовувати диференціацію, щоб знайти нахил у точці, але я не надто впевнений, як визначити, коли можна назвати пряму. Буде дуже вдячний будь-який поштовх до якогось вже існуючого підходу / літератури.

Я також знаю R, якщо вам трапляються відомі будь-які відповідні пакети чи приклади подібних розслідувань.

Дуже дякую.


ОНОВЛЕННЯ

Завдяки Флоундереру я зміг розширити роботу далі, створити рамку та налаштувати параметри тут і там. З метою навчання тут мій поточний код та графічний вихід.

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?
алекс

3
Проблема формулювання може полягати в тому, що - цілком ймовірно, "прямого" розрізу не існує. Якщо ви візьмете міцну лінзу і оглянете цю область, ви можете помітити, що вона все ще гладка у формі S.
ttnphns

@alex Дякую за цю пораду, я засунув рукави і подумаю.
Penguin_Knight

2
Якщо потрібно було б відповідати деякій щільності (скажімо, за оцінкою щільності ядра, оцінці щільності логічного сплайну або навіть деякою параметричною моделлю), висота щільності на її піку - це оцінка максимального нахилу CDF. «Ширина» піку говорить вам щось про те, наскільки широкий діапазон значень x, де має сенс говорити про цей схил так, ніби він був постійним.
Glen_b -Встановити Моніку

2
Щоб продовжити коментар @ Glen_b, головний момент полягає в тому, що те, про що ви просите, не було визначено достатньо строго. Наскільки далеко нижче максимуму PDF повинні розташовуватися «плечі» x_lower та x_upper? Потрібен певний кількісний критерій.
whuber

Відповіді:


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)

х

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

х

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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.