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