Stima dell'inclinazione della parte diritta di una curva sigmoidea


11

Mi è stato affidato questo compito ed ero sconcertato. Un collega mi ha chiesto di stimare la e x l o w e r della seguente tabella:XupperXlower

inserisci qui la descrizione dell'immagine

La curva è in realtà una distribuzione cumulativa e x è una sorta di misura. È interessato a sapere quali sono i valori corrispondenti su x quando la funzione cumulativa ha iniziato a diventare dritta e deviare dall'essere dritta.

Capisco che possiamo usare la differenziazione per trovare la pendenza in un punto, ma non sono troppo sicuro di come determinare quando possiamo chiamare la linea diritta. Qualunque spinta verso un approccio / letteratura già esistente sarà molto apprezzata.

Conosco anche R se ti capita di conoscere pacchetti o esempi pertinenti su questo tipo di indagini.

Molte grazie.


AGGIORNARE

Grazie a Flounderer sono stato in grado di espandere ulteriormente il lavoro, impostare un framework e armeggiare i parametri qua e là. A scopo di apprendimento ecco il mio codice attuale e un output grafico.

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

inserisci qui la descrizione dell'immagine


2
Puoi provare a determinare quando la seconda derivata è 0 o vicina a 0?
alex,

3
Il problema della formulazione può essere che - molto probabilmente - il taglio "dritto" non esiste. Se prendi un obiettivo forte e controlli quella regione, potresti notare che è ancora uniformemente a forma di S.
ttnphns,

@alex Grazie per questo consiglio, mi rimbocco le maniche e ci ripenso e provo.
Penguin_Knight

2
Se si dovesse adattarsi a una certa densità (ad esempio mediante stima della densità del kernel, stima della densità della spline log o persino un modello parametrico), l'altezza della densità al suo picco è una stima della pendenza massima del CDF. L '"ampiezza" del picco ti dice qualcosa sull'ampiezza dell'intervallo dei valori x dove ha senso parlare di quella pendenza come se fosse costante.
Glen_b -Restate Monica

2
Per dare seguito al commento di @ Glen_b, il punto principale è che ciò che stai chiedendo non è stato definito con sufficiente rigore. Fino a che punto sotto il massimo del PDF dovrebbero essere posizionate le "spalle" x_lower e x_upper? Sono necessari alcuni criteri quantitativi.
whuber

Risposte:


9

Ecco un'idea veloce e sporca basata sul suggerimento di @ alex.

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

Sembra un po 'come i tuoi dati. L'idea è ora di guardare il derivato e provare a vedere dove è più grande. Questa dovrebbe essere la parte della curva in cui è più diritta, poiché è una forma a 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))

inserisci qui la descrizione dell'immagine

cutoffy


Questo è davvero fantastico! Grazie per l'esempio e il codice! L'ho provato con i miei dati e sembra funzionare abbastanza bene. :)
Penguin_Knight,

Grazie! Ne sono contento anch'io. Divertente come prendere magicamente i registri lo ha fatto funzionare.
Flounderer
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.