Оценка наклона прямой части сигмовидной кривой


11

Я получил эту задачу и был поставлен в тупик. Коллега попросил меня оценить и следующего графика: х л о ж е гxupperxlower

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

Кривая на самом деле является кумулятивным распределением, а х является своего рода измерениями. Ему интересно знать, каковы соответствующие значения на 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?
Алекс

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)

Это покачивается, потому что некоторые из значений оказываются очень близко друг к другу. Однако, регистрация логов помогает, и тогда вы можете использовать сглаженную версию.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а также к выбору алгоритма сглаживания, а также к получению журналов, когда мы могли бы сделать какое-то другое преобразование. Кроме того, для реальных данных случайное изменение может также вызвать проблемы с этим методом. Производные не ведут себя численно. Редактировать: добавлена ​​картинка вывода.y


Это довольно круто! Спасибо за пример и код! Я попробовал это с моими данными, и это, кажется, работает довольно хорошо. :)
Penguin_Knight

Благодаря! Я тоже доволен этим. Забавно, как взятие логов волшебным образом заставило это работать.
Камбала
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.