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

MATLAB Discussion :

Calculer la variance d'un vecteur en "sautant" une case


Sujet :

MATLAB

  1. #1
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2014
    Messages : 26
    Points : 20
    Points
    20
    Par défaut Calculer la variance d'un vecteur en "sautant" une case
    Bonjour,

    J'ai une nouvelle fois besoin d'aide...
    Le titre n'est pas très explicite donc je vais détaillé un peu plus !

    J'ai en fait un fichier de données que je charge dans matlab.
    Ce que je souhaite faire c'est pour chaque ligne, calculer la moyenne et l'écart type de celle-ci (jusque là pas de souci!) puis recalculer ces 2 paramètres mais en enlevant 1 donnée à chaque fois :
    c'est à dire si j'ai 1 2 3 4 5 en première ligne, je veux ensuite calculer la moyenne et l'écart type de 2 3 4 5 puis de 1 3 4 5 puis de 1 2 4 5 etc...!
    J'espère que je suis assez claire ^^!
    Je me demande donc s'il existe un moyen de calculer l'écart type (ou la variance) en "sautant" une colonne à chaque fois.
    Pour la moyenne je me suis débrouiller en bidouillant : multiplier par n soustraire la valeur puis rediviser par (n-1) mais je ne peux pas faire cela pour l'écart type!

    Je précise que le but est de faire un test statistique pour comparer l'ensemble de la ligne, à chaque échantillon!

    Merci par avance de votre aide

  2. #2
    Membre éprouvé
    Inscrit en
    Août 2010
    Messages
    1 124
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 1 124
    Points : 1 277
    Points
    1 277
    Par défaut
    Bonjour,

    Une fois que tu as une matrice X ou chaque ligne est une variable, moyenne et variance sont donnés par
    Si tu veux enlever la 1ere colonne, il suffit de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mean(X(:,2:end)'), var(X(:,2:end)')

  3. #3
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2014
    Messages : 26
    Points : 20
    Points
    20
    Par défaut
    Merci de cette réponse on ne peut plus rapide !

    Pour la première colonne je sais effectivement qu'on peut faire comme cela mais par exemple si on veut calculer la variance en excluant uniquement la 2e colonne ou l'une des suivantes je ne vois pas comment procéder car
    ne calculera que la variance des dernières colonnes et donc exclura 2 valeurs au lieu d'une.

    Je ne sais pas si je me fais bien comprendre...

    Au passage, j'ai des 0 dans certaines cases que je ne souhaite pas prendre dans le calcul donc c'est vrai que pour le moment, je calculais "manuellement" les moyennes et variances car je ne voyais pas non plus comment calculer cela en excluant les 0.

  4. #4
    Modérateur

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Août 2014
    Messages
    1 295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2014
    Messages : 1 295
    Points : 2 385
    Points
    2 385
    Par défaut
    Dans ce cas tu peux faire un truc de ce genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var(cat(1,X(1:i),X(i+1:end))
    Avec une boucle sur le i, qui correspondra à la case qui va sauter.

    Et pour les 0, tu peux trouver les indices où ils apparaissent en effectuant un find, puis de la même façon que pour exclure chacune des valeurs, tu peux exclure les 0 également.
    Si vous cherchez des réponses sur ce forum il faudra avant tout expliquer clairement votre problème et exposer la démarche que vous avez entreprise pour le résoudre. Fournissez une base de travail et de réflexion à vos interlocuteurs!

  5. #5
    Membre éprouvé
    Inscrit en
    Août 2010
    Messages
    1 124
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 1 124
    Points : 1 277
    Points
    1 277
    Par défaut
    le cat des valeurs sera un poil plus gourmand que de cat les indices

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    var(X(:,setdiff(1:size(X,2),2))');% enleve la colonne 2
    % ou
    var(X(:,[1:5, 7:end])') % enleve la colonne 6
    en ce qui concerne les 0, tu peux les remplacer par des nan et utiliser nanmean et nanstd qui excluent ces valeurs nan du calcul
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    X(abs(X)<eps) = nan;
    nanstd(X(:,[1:5, 7:end])')  .^2 % variances en enlevant colonne 6 ET en excluant les 0

  6. #6
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2014
    Messages : 26
    Points : 20
    Points
    20
    Par défaut
    Merci à vous deux pour vos idées !
    c'est exactement ce qu'il me faut!

    Pour les 0, j'avais déjà pensé au NaN mais malheureusement je n'ai pas la toolbox pour utiliser ces fonctions .
    Je vais donc essayé avec un find !

    Encore merci pour vos réponses aussi rapides !

Discussions similaires

  1. Réponses: 2
    Dernier message: 03/05/2014, 15h10
  2. Calcul d'angle entre 2 vecteurs - direction
    Par lothei dans le forum Développement 2D, 3D et Jeux
    Réponses: 4
    Dernier message: 03/09/2007, 19h29
  3. Calcul matrice variance-covariance
    Par Alucard9800XT dans le forum MATLAB
    Réponses: 2
    Dernier message: 10/05/2007, 12h18

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