11
votes

Essayer d'obtenir des valeurs raisonnables de Sciped Powerlaw Fit

J'essaie d'adapter certaines données d'un code de simulation que je suis exécuté afin de déterminer une dépendance en droit de l'alimentation. Lorsque je trace un ajustement linéaire, les données ne conviennent pas très bien.

Voici le script Python que j'utilise pour adapter les données: xxx

La sortie que je reçois est: -71205.3 + 71174.5 * x ^ -9.79038E-05

tandis que sur la parcelle, l'ajustement ressemble aussi bien que vous vous attendez d'un peu d'astuce, la forme de la sortie me dérange. J'espérais que la constante serait proche de l'endroit où vous vous attendez à ce que le zéro soit (environ 30). Et je m'attendais à trouver une dépendance de pouvoir d'une fraction plus grande que 10 ^ -5.

J'ai essayé de répandre mes données et de jouer avec les paramètres d'optimisation.Leastsq sans chance. C'est ce que j'essaie d'accomplir possible ou mes données ne le permettent tout simplement pas? Le calcul est coûteux, de sorte que plus de points de données est non trivial.

merci!


6 commentaires

Dans la DOCS, on dirait que cette fonction s'attend à ce que l'argument parames soit seconde, et l'argument xdata d'abord. Je doute que cela change de choses, mais pouvez-vous donner cela un essai et voir ce qui se passe?


N / M Je viens de faire ce changement et obtenez les mêmes résultats que vous faites. Cela ne vous aide pas, mais montre que ces documents doivent être bien meilleurs.


La seule autre chose que je peux penser est la suivante: pouvez-vous obtenir les erreurs standard de ces estimations? Dans O.L.S. Régression, il y a une belle formule pour les erreurs standard des coefficients. Avec un tel ensemble de données, je peux croire qu'ils sont extrêmement grands. Vous pouvez simplement voir de petits effets de taille d'échantillons. Avez-vous essayé cela avec un ensemble de données plus grand, disons ~ 100 observations?


Vous voudrez peut-être aussi demander à stat.stackexchange.com


Merci pour tous les conseils! Devrait-il être migré ou vient de demander une nouvelle question? J'ai l'impression que cela peut être plus approprié pour le public statists.stackexchange.


Je dirais à ré-demander là-bas. Si vous obtenez des réponses raisonnables, revenez et supprimez-la ici. Sinon, modifiez-vous simplement chaque message pour inclure un lien vers l'affichage croisé. Un modérateur peut venir et le changer à l'un ou l'autre.


3 Réponses :


4
votes

Il aide à réaffecter xdata afin que les chiffres ne soient pas tous aussi petits. Vous pouvez travailler dans une nouvelle variable xprime = 1000 * x . Ensuite, ajustez xprime contre y .

Les moindres carrés trouveront des paramètres q montage xxx < p> alors laissez xxx

alors y = p [0] + p [1] * (x ** p [2])

Il aide également à modifier la supposition initiale à quelque chose de plus proche de votre résultat souhaité, tel que [max (ydata), -1, -0.5] . xxx

rendements

40.1253 + -282.949 * x x ^ 0.375555


3 commentaires

J'ai oublié que j'avais aussi réparé x . J'ai édité le message à expliquer.


Remarque Vous pouvez remplacer le facteur de signalisation 1000 avec 500 ou 5000 et le résultat ne change pas (de manière significative).


Je l'ai Merci! J'avais déjà essayé de répandre, mais je suppose que cela se comporte toujours mal sans deviner décente pour la durée constante.



8
votes

Il est beaucoup mieux pour d'abord prendre le logarithme, puis utiliser moinsQuare pour s'adapter à cette équation linéaire, ce qui vous donnera un meilleur ajustement. Il y a un excellent exemple dans le SciPy Cookbook , que j'ai adapté ci-dessous pour correspondre à votre code.

Le meilleur convient comme ça sont: amplitude = 0,8955 et index = -0.40943265484

Comme nous pouvons le voir à partir du graphique (et de vos données), si sa loi d'alimentation est adaptée, nous ne vous attendrions pas à ce que la valeur d'amplitude soit proche 30 . Comme dans l'équation de la loi d'alimentation f (x) == amp * x ** Index , donc avec un index négatif: f (1) == AMP et f (0) == Infinity .

Entrez la description de l'image ici <> / p> xxx


2 commentaires

Merci beaucoup, c'était utile. Pour l'instant, je vais utiliser la solution de tsutbu. Cependant, je comprends que le passage des données aussi près que possible est bénéfique pour le raccord des moindres carrés. Merci encore!


@ user825518 - Cool, et oui si vous recherchez une loi de puissance avec offset, la méthode de Unutbu est une bonne approche!