Comment estimer une limite supérieure pour la régression logistique par seulement 5 à 7 points de données?


11

J'ai des données sous la forme . Pour l'estimation de à j'utilise les formules de cet article: John Fox - Régression non linéaire et moindres carrés non linéaires Dans cet article, est estimé en regardant les données. Si je fais ça, ça marche bien, même si je n'ai que trois points. À partir de cela, je peux calculer les deux autres. J'ai testé mes paramètres avec nls () en R et LevenbergMarquardt en C #. Les modèles rendus par eux sont satisfaisants.y=β11+exp(β2+β3x)β1β3β1

Le problème est que je ne veux pas regarder les données pour obtenir un bon estimateur pour , je veux que mon programme le calcule. Pendant un certain temps, j'ai utilisé des valeurs qui étaient un peu plus élevées que le maximum de mes valeurs (quelque chose entre et \ max * 1,5 . Cela a bien fonctionné tant que les points couvraient la majeure partie de la fonction. Cela fonctionnait également bien si le les points de données étaient quelque part du "haut" de la courbe, mais quand ils venaient tous de la zone "en dessous" du point d'inflexion, cet estimateur était nettement inférieur à ce qu'il devrait être et je ne pouvais pas ajuster le modèle. Si j'utilise quelque chose qui est nettement supérieur au point maximum (en le multipliant par des valeurs ridiculement élevées), le modèle ne convient pas de manière utile.β1max1.1max1.5

Les mesures pourraient ressembler à ceci:

x = (40, 50, 60, 70), y = (1000, 950, 400, 200) -> facile à estimer

x = (40, 50, 60, 70), y = (1000, 950, 800, 100) -> facile à estimer

x = (40, 50, 60, 70), y = (500, 200, 100, 50) -> pas si facile à estimer

Je suppose que je pourrais découvrir où je suis dans la fonction (au "bas", au "haut", dans la pente) en calculant les deltas aux points donnés et calculer une limite supérieure en fonction de cela. Quelqu'un a-t-il un indice pour une meilleure solution? Informations supplémentaires: Si cela ne peut pas être fait, il est plus important pour moi que les mesures pouvant être ajustées soient aussi bonnes que possible et j'accepte que certaines mesures ne puissent pas être ajustées du tout.

(bien que je veuille une implémentation en C # je l'ai postée ici, je ne pense pas que le problème soit dépendant du langage)

mise à jour (Application de ceci):

x sont des valeurs de température et y les mesures correspondantes. Par nature, il est donné qu'elle devrait ressembler à une courbe logistique avec des valeurs y plus élevées à des températures plus basses et vice versa. Le point de fusion est égal au point d'inflexion de la courbe, qui change beaucoup avec de petites modifications des paramètres du modèle.

mise à jour (certaines données composées avec 7 points de données et point d'inflexion connu à 60):

//first I made up some data without any noise and enough (13) points
double[] x17 = { 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90 };
double[] y17 = { 2000, 1920, 1820, 1700, 1500, 1280, 1000, 720, 500, 300, 180, 80, 0 };
//calculated inflection point: 59.642....

//Then I took three different parts of that data 
(to simulate how much data I will have in the real world)
double[] x18 = { 30, 35, 40, 45, 50, 55, 60 };
double[] y18 = { 2000, 1920, 1820, 1700, 1500, 1280, 1000 };
//calculated inflection point: 59.263.... is ok!

double[] x19 = { 60, 65, 70, 75, 80, 85, 90 };
double[] y19 = { 1000, 720, 500, 300, 180, 80, 0 };
//calculated inflection point: 53.447.... to small!

double[] x20 = { 45, 50, 55, 60, 65, 70, 75 };
double[] y20 = { 1700, 1500, 1280, 1000, 720, 500, 300 };
//calculated inflection point: 59.868... almost perfect!

Mon approche actuelle pour une estimation de la borne supérieure est y0 * y0 / y1. De cette façon, j'espère tenir compte du fait que je pourrais ne pas toujours avoir une valeur proche du maximum.

mise à jour: les valeurs x et y ne seront jamais négatives. x sera toujours {40, 45, 50, 55, 60, 65, 70} sauf si un point de données est perdu.

mise à jour: j'ai fait beaucoup, beaucoup de tests avec des données simulées qui devraient être faciles à ajuster (je choisis des points de données qui étaient exactement sur la courbe = sans aucun bruit) et je vois que cela fonctionne bien, sauf si le premier ou le deuxième point de données (où x = 40 ou x = 45) est manquant. Je suppose que je devrai abandonner ces mesures et l'utilisateur devra vivre avec cela.


Avec un si petit nombre de points, je pense que votre vrai problème est l'inexactitude des estimations et non la façon dont vous les calculez.
Michael R. Chernick

1
Le problème avec le dernier exemple est qu'un meilleur ajustement est obtenu par une fonction de la forme (remarquez le signe négatif). Est-ce une solution acceptable? Sinon, vous continuerez à avoir des problèmes, car vous devrez accepter des solutions à la frontière entre les deux modèles (et celles-ci sont horribles). y=β11exp(β2+β3x))
whuber

@MichaelChernick Je suppose que vous avez raison, le problème est que je n'obtiendrai jamais plus de 7 points de données. Je suppose que je dois lancer des résultats avec moins que cela. J'ai ajouté des cas de test avec des résultats qui devraient être les mêmes. Y a-t-il place à amélioration ou est-ce le plus proche que je peux obtenir?
Verena Haunschmid

@whuber J'ai essayé d'ajuster les données avec le signe négatif mais pour chaque ensemble de paramètres, j'ai eu une erreur de matrice de gradient singulière (en R). Quels estimateurs avez-vous pris? J'ai ajouté des informations sur la zone dans laquelle je l'utilise, pour souligner pourquoi la courbe doit ressembler à cela. (Je ne sais pas encore si votre formule répond à ces exigences)
Verena Haunschmid

(1) Dans quelles unités les valeurs sont-elles ? Si ceux-ci peuvent être négatifs, votre modèle ne fonctionnera probablement pas. (2) Que pouvez-vous nous dire sur la nature du "bruit" ou des erreurs dans les valeurs ? Cela peut être crucial pour le montage. yy
whuber

Réponses:


1

J'ai travaillé sur un problème similaire plus tôt cette année. La solution que j'ai utilisée était basée sur cet article , qui utilise l'algèbre linéaire pour éliminer , le maximum. De cette façon, les résultats pour les paramètres restants, une fois déterminés via une procédure (j'ai simplement minimisé la surface d'erreur, comme dans l'article), peuvent être utilisés pour déduire à la fin.β1β1

Intuitivement, cette solution repose sur la prémisse que toutes les courbes logistiques avec les mêmes paramètres de vitesse et de localisation sont auto-similaires, de sorte que la définition de la limite supérieure signifie simplement "étirer" la courbe sigmoïde au maximum approprié.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.