Comment dois-je calculer r-carré à l'aide de Python et Numpy?

Je suis en utilisant Python et Numpy pour calculer un ajustement polynomial de degré arbitraire. Je passe une liste de valeurs de x, les valeurs de y, et le degré du polynôme je veux ajustement (linéaire, quadratique, etc.).

Ce beaucoup de travaux, mais je veux aussi calculer r (coefficient de corrélation) et r-carré(coefficient de détermination). Je compare mes résultats avec Excel meilleur ajustement de courbe de tendance de la capacité, et le r-carré de la valeur qu'il calcule. En utilisant cela, je sais que je suis le calcul de r-squared correctement linéaire de meilleur ajustement (degré est égal à 1). Cependant, ma fonction ne fonctionne pas pour les polynômes de degré supérieur à 1.

Excel est capable de faire cela. Comment dois-je calculer r-squared pour ordre supérieur des polynômes à l'aide de Numpy?

Voici ma fonction:

import numpy

# Polynomial Regression
def polyfit(x, y, degree):
    results = {}

    coeffs = numpy.polyfit(x, y, degree)
     # Polynomial Coefficients
    results['polynomial'] = coeffs.tolist()

    correlation = numpy.corrcoef(x, y)[0,1]

     # r
    results['correlation'] = correlation
     # r-squared
    results['determination'] = correlation**2

    return results
  • Remarque: vous utilisez le degré que dans le calcul des coeffs.
  • tydok est correct. Vous êtes le calcul de la corrélation de x et y et r-squared pour y=p_0 + p_1 * x. Voir ma réponse ci-dessous de code qui devrait fonctionner. Si vous n'avez pas l'esprit de me demander, qu'est-ce que votre but ultime? Faites-vous du modèle de sélection (choisir quel est le degré d'utilisation)? Ou quelque chose d'autre?
  • La demande se résume à "faire comme Excel". Je reçois le sentiment de ces réponses que les utilisateurs peuvent le lire trop dans le r-carré de la valeur lors de l'utilisation d'un non-linéaires de meilleur ajustement de la courbe. Néanmoins, je ne suis pas un assistant de mathématiques, et c'est la fonctionnalité requise.
InformationsquelleAutor Travis Beale | 2009-05-21