IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Firebird Discussion :

calcul de variance et d'écart type


Sujet :

Firebird

  1. #1
    Membre du Club
    Inscrit en
    avril 2003
    Messages
    124
    Détails du profil
    Informations forums :
    Inscription : avril 2003
    Messages : 124
    Points : 56
    Points
    56
    Par défaut calcul de variance et d'écart type
    J'utilise IB6 open source, donc pas grand chose au niveau opérateurs statistiques : MIN, MAX, AVG, COUNT, SUM
    Je souhaite calculer la variance d'élément "value" d'une table "Tbl". Il me faut donc faire la somme des carrés des différences entre les "value" et moyenne, le tout divisé par le nombre d'éléments.
    Je travaille donc autour de la requête suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Select SUM( (tbl.value - AVG(tbl.value) * (tbl.value - AVG(tbl.value)) / MOY(tbl.value) AS Variance
    From tbl
    mais j'ai une erreur d'aggregat ("invalide aggregate reference"); certainement au niveau de l'insertion de AVG dans SUM.

    Une idée ?

    Merci
    Température de l'eau : 28 °
    Température extérieure : 32°
    Température au fond du verre : 50° ~ 55°
    ------ Mangez des bananes ----------

  2. #2
    Membre du Club
    Inscrit en
    avril 2003
    Messages
    124
    Détails du profil
    Informations forums :
    Inscription : avril 2003
    Messages : 124
    Points : 56
    Points
    56
    Par défaut
    Il faut lire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Select SUM( (tbl.value - AVG(tbl.value)) * (tbl.value - AVG(tbl.value)) / MOY(tbl.value) AS Variance
    From tbl
    Il manquait une parenthèse !
    Mais le problème deumerre !

    Merci
    Température de l'eau : 28 °
    Température extérieure : 32°
    Température au fond du verre : 50° ~ 55°
    ------ Mangez des bananes ----------

  3. #3
    Membre confirmé Avatar de Haywire
    Homme Profil pro
    Développeur Java
    Inscrit en
    mars 2006
    Messages
    462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Finance

    Informations forums :
    Inscription : mars 2006
    Messages : 462
    Points : 573
    Points
    573
    Par défaut
    Je ne sais pas si ça va arranger le problème mais il manque toujours une parenthèse.

    Select SUM
    ( ==> où est la parenthèse qui ferme celle ci ?
    (tbl.value - AVG(tbl.value))
    *
    (tbl.value - AVG(tbl.value))
    / MOY(tbl.value) AS Variance
    From tbl
    Développeur écolo, je suis pour le développement durable.

  4. #4
    Membre confirmé Avatar de TryExceptEnd
    Homme Profil pro
    Développeur informatique
    Inscrit en
    octobre 2006
    Messages
    484
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : octobre 2006
    Messages : 484
    Points : 539
    Points
    539
    Par défaut
    En fait les fonctions d'agrégation imbriquées
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select SUM(colonne - AVG(colonne))
    ne sont pas supportées par IB6, ni d'ailleurs par FB 2.0.1 que j'utilise.
    Utilise plutôt une procédure stockée.
    Si vous êtes libre, choisissez le Logiciel Libre.

  5. #5
    Membre expert

    Homme Profil pro
    Consultant spécialité Firebird
    Inscrit en
    mai 2002
    Messages
    2 342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France

    Informations professionnelles :
    Activité : Consultant spécialité Firebird
    Secteur : Conseil

    Informations forums :
    Inscription : mai 2002
    Messages : 2 342
    Points : 3 701
    Points
    3 701
    Par défaut
    Variance = carré de l'écart type = (Sx² - (Sx)² /n) /(n-1)))

    SELECT (SUM(x*x) -((SUM(x)*SUM(x)/COUNT(*))/COUNT(*)-1)))

    cf Joe Celko
    Philippe Makowski
    IBPhoenix - Firebird
    Membre de l'April

  6. #6
    Membre confirmé Avatar de TryExceptEnd
    Homme Profil pro
    Développeur informatique
    Inscrit en
    octobre 2006
    Messages
    484
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : octobre 2006
    Messages : 484
    Points : 539
    Points
    539
    Par défaut
    En enlevant la derniére parenthèse, ça marche mais le résultat que j'ai eu sur un test n'est apparament pas un écart type même au carré, puisque c'est un énorme chiffre.
    Si vous êtes libre, choisissez le Logiciel Libre.

  7. #7
    Membre expert

    Homme Profil pro
    Consultant spécialité Firebird
    Inscrit en
    mai 2002
    Messages
    2 342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France

    Informations professionnelles :
    Activité : Consultant spécialité Firebird
    Secteur : Conseil

    Informations forums :
    Inscription : mai 2002
    Messages : 2 342
    Points : 3 701
    Points
    3 701
    Par défaut
    bah, faute dans le bouquin alors

    c'est plutot ça en fait :
    (SUM(x*x)/COUNT(*)) -((SUM(x)/COUNT(*))*(SUM(x)/COUNT(*)))

    enfin tu as l'idée, vérifie la formule
    Philippe Makowski
    IBPhoenix - Firebird
    Membre de l'April

  8. #8
    Membre du Club
    Inscrit en
    avril 2003
    Messages
    124
    Détails du profil
    Informations forums :
    Inscription : avril 2003
    Messages : 124
    Points : 56
    Points
    56
    Par défaut
    bravo et merci !

    la formule est bien :

    Variance = carré de l'écart type = (Sx² - (Sx)² /n) / n
    i.e : ( SUM(x * x) - ( (SUM(x) * SUM(x)) / COUNT(x) )) / COUNT(x)
    ou
    Variance = carré de l'écart type = Sx² / n - (Sx / n)²
    i.e : (SUM(x*x)/COUNT(*)) -((SUM(x)/COUNT(*))*(SUM(x)/COUNT(*)))
    Température de l'eau : 28 °
    Température extérieure : 32°
    Température au fond du verre : 50° ~ 55°
    ------ Mangez des bananes ----------

  9. #9
    Membre expérimenté
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    juin 2003
    Messages
    1 118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : juin 2003
    Messages : 1 118
    Points : 1 438
    Points
    1 438
    Par défaut
    Juste pour compléter.

    Il s'agit de variance pour une population (N). Dans le cas d'un échantillonnage, il faut utiliser N-1, et dans ce cas la formule devient :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ( SUM(x * x) - ( (SUM(x) * SUM(x)) / COUNT(x) )) / (COUNT(x) - 1)
    Merci d'ajouter un sur les tags qui vous ont aidé

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 06/07/2015, 17h14
  2. Package JAMA : Calculer la moyenne et l'écart type ?
    Par GatH7614 dans le forum Débuter avec Java
    Réponses: 0
    Dernier message: 09/08/2010, 16h53
  3. Réponses: 0
    Dernier message: 05/11/2008, 18h57
  4. variance et écart-type avec 12.5 ?
    Par Mathusalem dans le forum Sybase
    Réponses: 3
    Dernier message: 01/10/2008, 14h13
  5. [C#] écriture fichier .txt + calcul écart-type
    Par titaB dans le forum Windows Forms
    Réponses: 6
    Dernier message: 26/05/2005, 14h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo