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 :

stat du test de kolmogorov-smirnov


Sujet :

MATLAB

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2009
    Messages : 17
    Points : 5
    Points
    5
    Par défaut stat du test de kolmogorov-smirnov
    Bonjour,

    je travaille toujours en Matlab 4.2. En fait je tente de reproduire le test de kolmogorov-smirnov sans utiliser l'outil kstest. Il s'agit d'un test qui compare une fonction de répartition empirique et une fonction théorique.

    Pour une description du test, voici un lien http://www.apprendre-en-ligne.net/random/KS.html

    J'en suis arrivé au point où je dois vérifier la validité de mon échantillon. Pour celà je dois la comparer avec une valeur critique qui, souvent se trouve numériquement sous forme de tableau (comme indiqué dans le lien).

    J'entre la p-valeur alpha comme ceci dans le programme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    k=1:inf
    alpha = 2 * sum(((-1).^(k-1)) .* (exp(-2*(k.^2)*(c^2))))
    Ce que je voudrais, c'est que l'on puisse entrer une valeur alpha et le programme nous calculerait c.

    Par exemple: avec alpha = 0.05, on a c =1.36.

    Est-ce que c'est possible ou il y aurait une méthode alternative ou alors carrément oublier la formule et entrer tout le tableau?

    Merci bien.

    PS: j'ai testé la formule avec k=1:3 et en remplaçant c par 1.36. Désolé pour la longueur, j'ai essayé d'être le plus clair possible.

  2. #2
    Expert éminent sénior
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Points : 14 830
    Points
    14 830
    Par défaut
    As-tu FZERO dans ta version de MATLAB ?
    Si oui tu peux peut-être essayer un truc comme ça (en tout ça fonctionne pour ton exemple) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    alpha = 0.05;
    k=1:3;
    x=fzero(@(c) 2 * sum(((-1).^(k-1)) .* (exp(-2*(k.^2)*(c^2))))-alpha,1)
    Je suis pas sure par contre que la 4.2 gère les handles (@) de fonction
    Règles du Forum

    Adepte de la maïeutique

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2009
    Messages : 17
    Points : 5
    Points
    5
    Par défaut
    Je te remercie pour ta réponse rapide mais malheuresement comme tu l'avais prévu, le @ ne passe pas dans ma version.

    Y a-t-il une autre solution ?

    Sinon je suppose que ce n'est pas possible d'utiliser le k=1:inf pour avoir une réponse numérique

  4. #4
    Expert éminent sénior
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Points : 14 830
    Points
    14 830
    Par défaut
    Citation Envoyé par bastonman Voir le message
    J Sinon je suppose que ce n'est pas possible d'utiliser le k=1:inf pour avoir une réponse numérique
    Non.

    Mais FZERO existe ? Peut-être que tu peux quand même l'utiliser. Faut juste voir comment elle fonctionne dans ta version.

    Ce n'est pas facile de t'aider car il y a eu beaucoup d'évolutions depuis la 4.2, plus grand monde ne l'a et la documentation n'est pas accessible en ligne.
    Je ne sais même pas quelles toolboxes pouvaient bien exister à l'époque.
    En as-tu ? (genre Symbolic qui pourrait être utile ici).

    Après peut-être que tu as d'autres outils à ta disposition pour résoudre ton problème (l'algorithmique tout simplement ?) ?
    Règles du Forum

    Adepte de la maïeutique

  5. #5
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 52 882
    Points
    52 882
    Par défaut
    Citation Envoyé par Caro-Line Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    alpha = 0.05;
    k=1:3;
    x=fzero(@(c) 2 * sum(((-1).^(k-1)) .* (exp(-2*(k.^2)*(c^2))))-alpha,1)
    Je suis pas sure par contre que la 4.2 gère les handles (@) de fonction
    Peut petre une alternative :

    Dans un fichier fun.m à part :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    function f = fun(c)
    alpha = 0.05;
    k=1:3;
    f = 2 * sum(((-1).^(k-1)) .* (exp(-2*(k.^2)*(c^2))))-alpha;
    Et avec FZERO :

    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2009
    Messages : 17
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par Dut Voir le message
    Peut petre une alternative :

    Dans un fichier fun.m à part :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    function f = fun(c)
    alpha = 0.05;
    k=1:3;
    f = 2 * sum(((-1).^(k-1)) .* (exp(-2*(k.^2)*(c^2))))-alpha;
    Et avec FZERO :


    Merci, j'ai utilisé ta technique mais j'ai eu ça comme réponse:

    x = fzero('FUN',1)
    ??? Error using ==> feval
    Undefined function FUN.

    Error in ==> c:\winapps\matlab42\toolbox\matlab\funfun\fzero.m
    On line 34 ==> a = x - dx; fa = feval(FunFcn,a);
    j'ai regarder ce que signifiat feval mais sinon

  7. #7
    Expert éminent sénior
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Points : 14 830
    Points
    14 830
    Par défaut
    Tu as bien créé un fichier FUN.m qui contient la fonction FUN ? Attention MATLAB est sensible à la casse.
    Règles du Forum

    Adepte de la maïeutique

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2009
    Messages : 17
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par Caro-Line Voir le message
    Tu as bien créé un fichier FUN.m qui contient la fonction FUN ? Attention MATLAB est sensible à la casse.
    J'ai bien mis la fonction FUN dans un fichier FUN.M et j'ai toujours le même message ???

  9. #9
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 52 882
    Points
    52 882
    Par défaut
    Tu peux nous montrer ce que retourne ceci ?

    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  10. #10
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 52 882
    Points
    52 882
    Par défaut
    J'ai trouvé tout seul => http://teal.gmu.edu/matlab/toolbox/tmatlab2.html#funfun

    fzero.m
    FZERO Find a zero of a function of one variable.
    FZERO(F,X) finds a zero of f(x). F is a string containing the
    name of a real-valued function of a single real variable. X is
    a starting guess. The value returned is near a point where F
    changes sign. For example, FZERO('sin',3) is pi. Note the
    quotes around sin. Ordinarily, functions are defined in M-files.
    Donc d'après la dernière phrase, ma méthode devrait fonctionner...
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  11. #11
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2009
    Messages : 17
    Points : 5
    Points
    5
    Par défaut
    voilà ce que j'obtiens :

    Find a zero of a function of one variable.
    FZERO(F,X) finds a zero of f(x). F is a string containing the
    name of a real-valued function of a single real variable. X is a starting guess. The value returned is near a point where F changes sign. For example, FZERO('sin',3) is pi. Note the quotes around sin. Ordinarily, functions are defined in M-files.

    An optional third argument sets the relative tolerance for the convergence test. The presence of an nonzero optional fourth argument triggers a printing trace of the steps.

  12. #12
    Expert éminent sénior
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Points : 14 830
    Points
    14 830
    Par défaut
    Place toi dans le répertoire duquel tu vas lancer ta commande FZERO et fais :
    S'il ne trouve rien c'est qu'il ne trouve pas ta fonction FUN.m.
    2 solutions :
    - te placer dans le répertoire où se trouve ta fonction FUN.m
    - rajouter le répertoire de la fonction FUN.m au path de MATLAB avec la fonction ADDPATH.
    Règles du Forum

    Adepte de la maïeutique

  13. #13
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2009
    Messages : 17
    Points : 5
    Points
    5
    Par défaut
    J'ai fait ce que tu m'as dit et....... taratata ............ ça a marché

    Merci pour tout à tous les deux

  14. #14
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2009
    Messages : 17
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par Dut Voir le message
    Peut petre une alternative :

    Dans un fichier fun.m à part :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    function f = fun(c)
    alpha = 0.05;
    k=1:3;
    f = 2 * sum(((-1).^(k-1)) .* (exp(-2*(k.^2)*(c^2))))-alpha;
    Et avec FZERO :


    salut,

    j'ai encore un problème

    En fait, j'aimerais entrer la valeur alpha manuellement dans matlab et j'aimerais que le programme me calcule la valeur c.

    Comment puis-je faire ?

    Merci bien

    PS : je travaille toujours en 4.2

  15. #15
    Expert éminent sénior
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Points : 14 830
    Points
    14 830
    Par défaut
    Pas facile sans pouvoir tester mais je dirais que tu dois pouvoir utiliser FMINS (note : cette fonction n'existe plus et a été remplacée par FMINSEARCH).

    Les modifications à faire seraient alors :
    Pour fun.m :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    function f = fun(c,alpha)
    %alpha = 0.05;
    k=1:3;
    f = 2 * sum(((-1).^(k-1)) .* (exp(-2*(k.^2)*(c^2))))-alpha;
    Pour l'appel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    alpha = 0.05;
    x = fmins('fun',1,[],[],alpha);
    J'avoue que dans l'aide fournie par Dut je ne vois pas bien à quoi correspond le 2ème [].
    Règles du Forum

    Adepte de la maïeutique

  16. #16
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2009
    Messages : 17
    Points : 5
    Points
    5
    Par défaut
    j'ai fait ce que tu m'as demandé mais je trouve une réponse de 7.35 alors que je devrais avoir plus ou moins 1.36

    Personne pour m'aider, je n'arrive pas à trouver de solution.

    Ce que je voudrais c'est dans la formule suivante entrer une valeur alpha et le programme (matlab 4.2) me donne la valeur c.

    k=1:3
    alpha = 2 * sum(((-1).^(k-1)) .* (exp(-2*(k.^2)*(c^2))))

    J'ai beau me creser la tête, j'y arrive pas.

    Merci de votre aide

Discussions similaires

  1. kolmogorov-smirnov et histogrammes
    Par labouette22 dans le forum Tests d'hypothèse
    Réponses: 5
    Dernier message: 02/05/2012, 17h39
  2. Test de Kolmogorov-Smirnov
    Par Mill5 dans le forum SAS STAT
    Réponses: 7
    Dernier message: 29/12/2011, 18h39
  3. Test de Kolmogorov Smirnov
    Par yemal dans le forum MATLAB
    Réponses: 0
    Dernier message: 07/12/2011, 20h22
  4. Code Test Kolmogorov-Smirnov 2D 2echantillons Matlab
    Par DDDDfish dans le forum MATLAB
    Réponses: 3
    Dernier message: 21/07/2008, 11h07
  5. Test de Kolmogorov et P-value.
    Par Mathusalem dans le forum MATLAB
    Réponses: 3
    Dernier message: 11/08/2006, 14h44

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