Trovare il miglior punto di scambio su una curva

Diciamo che ho avuto alcuni dati, per i quali voglio adattare un modello parametrizzato su di esso. Il mio objective è trovare il miglior valore per questo parametro del modello.

Sto facendo la selezione del modello usando un criterio di tipo AIC / BIC / MDL che premia i modelli con un errore basso ma penalizza anche i modelli con alta complessità (stiamo cercando la spiegazione più semplice ma più convincente per questi dati, per così dire, a Occam razor ).

Seguendo quanto sopra, questo è un esempio del tipo di cose che ottengo per tre criteri diversi (due devono essere minimizzati e uno da massimizzare):

AIC-bicin forma

Visivamente si può facilmente vedere la forma del gomito e si dovrebbe scegliere un valore per il parametro da qualche parte in quella regione. Il problema è che sto facendo questo per un gran numero di esperimenti e ho bisogno di un modo per trovare questo valore senza l’intervento.

La mia prima intuizione è stata quella di provare a tracciare una linea a 45 gradi dall’angolo e continuare a muoverla fino a intersecare la curva, ma è più facile a dirsi che a farsi 🙂 Inoltre, può perdere la regione di interesse se la curva è leggermente inclinata.

Qualche idea su come implementare questo, o idee migliori?

Ecco i campioni necessari per riprodurre uno dei grafici sopra:

curve = [8.4663 8.3457 5.4507 5.3275 4.8305 4.7895 4.6889 4.6833 4.6819 4.6542 4.6501 4.6287 4.6162 4.585 4.5535 4.5134 4.474 4.4089 4.3797 4.3494 4.3268 4.3218 4.3206 4.3206 4.3203 4.2975 4.2864 4.2821 4.2544 4.2288 4.2281 4.2265 4.2226 4.2206 4.2146 4.2144 4.2114 4.1923 4.19 4.1894 4.1785 4.178 4.1694 4.1694 4.1694 4.1556 4.1498 4.1498 4.1357 4.1222 4.1222 4.1217 4.1192 4.1178 4.1139 4.1135 4.1125 4.1035 4.1025 4.1023 4.0971 4.0969 4.0915 4.0915 4.0914 4.0836 4.0804 4.0803 4.0722 4.065 4.065 4.0649 4.0644 4.0637 4.0616 4.0616 4.061 4.0572 4.0563 4.056 4.0545 4.0545 4.0522 4.0519 4.0514 4.0484 4.0467 4.0463 4.0422 4.0392 4.0388 4.0385 4.0385 4.0383 4.038 4.0379 4.0375 4.0364 4.0353 4.0344]; plot(1:100, curve) 

MODIFICARE

Ho accettato la soluzione proposta da Jonas . Fondamentalmente, per ogni punto p sulla curva, troviamo quello con la distanza massima d data da:

punto-linea distanza