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

R Discussion :

Intégration d'un estimateur histogramme


Sujet :

R

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2012
    Messages : 6
    Par défaut Intégration d'un estimateur histogramme
    Bonjour à tous,

    J'ai écrit la fonction suivante, qui est un histogramme régulier à D intervalles sur [0,1]. Disons X<-runif(100) et D<-10. La fonction est bien écrite et ne me pose pas de problème. Par contre, je ne parviens pas à l'intégrer. Quand j'écris integrate(f,-5,5);, il me répond "evaluation of function gave a result of wrong length".

    Quelqu'un pourrait m'aider à intégrer ce type de fonction?
    Merci d'avance !


    f<-function(x){
    #on compte d'abord le nombre de points qui tombent dans l'intervalle I_j pour j=1..D

    #but:créer un vecteur qui donne le nbre de points X_i dans chaque intervalle de longueur 1/D
    n<-length(X)
    Y<-sort(X)
    N<-numeric(D+1)
    N[1]<-0
    s<-0
    k<-1
    for(j in 1:D-1){
    while((j-1)/D <= Y[k] && Y[k]<j/D){k<-k+1}
    N[j+1]<-k-1-s
    s<-s+N[j+1]
    }
    N[D+1]=length(Y)-s
    N<-N[-1]

    if(x<0 || x>1) return(0)

    for(j in 1:D){
    if((j-1)/D<=x && x <j/D) return(N[j]*D/n)
    }

    }

  2. #2
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2012
    Messages
    292
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 292
    Par défaut
    Bonjour,

    Dans mon cas ça fonctionne si je mets au début de la fonction (car les calculs de la suite sont inutiles dans ce cas) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(x<=0 || x>=1) return(x*0)
    Cette modification résout l'erreur:
    "evaluation of function gave a result of wrong length"


    Votre fonction a des erreurs du coup elles se répercutent sur la fonction integrate:
    "Erreur dans while ((j - 1)/D <= Y[k] && Y[k] < j/D) { :
    valeur manquante là où TRUE / FALSE est requis"


    Une impression de déjà vue :
    http://www.developpez.net/forums/d12...tion-comptage/

    Avez-vous regardé le dernier post à propos des variables utilisées?

  3. #3
    Membre régulier
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2012
    Messages : 6
    Par défaut
    ma fonction marche sans erreur chez moi;
    et si je mets ce que tu me dis au début (la condition if) alors il intègre bien, mais la réponse est mauvaise, il donne 0 comme résultat (alors que la réponse est 1).

    Tu as une idée?

  4. #4
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2012
    Messages
    292
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 292
    Par défaut
    Le problème est que votre fonction n'est compatible qu'avec des scalaires et non des vecteurs.
    Si vous faîtes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    x=seq(0,1,0.01)
    f(x)
    Vous obtenez une liste nul.

    Il faut donc la modifier pour des listes 1D.

  5. #5
    Membre régulier
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2012
    Messages : 6
    Par défaut
    C'est vrai! ma fonction n'est compatible qu'avec des scalaires.
    Mais pour quelle(s) raison(s)? et en quoi cela empêche de pouvoir l'intégrer?
    Comment la modifier pour des listes 1D?


    Merci encore pour votre aide!

  6. #6
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2012
    Messages
    292
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 292
    Par défaut
    Ce n'est pas compliqué, il suffit de rajouter une boucle for(i in 1:length(x)) au début et remplacer x par x[i].

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

Discussions similaires

  1. Questions sur chartfx (histogramme)
    Par lejert dans le forum C++Builder
    Réponses: 2
    Dernier message: 20/01/2004, 13h54
  2. [MFC][Excel] Intégration excel et MFC!
    Par fadoua dans le forum MFC
    Réponses: 2
    Dernier message: 22/12/2003, 10h51
  3. [NETBEANS] Intégration de Jboss dans NetBeans
    Par Kleb dans le forum NetBeans
    Réponses: 1
    Dernier message: 09/06/2003, 18h45
  4. [TChart] comment remplir un histogramme avec du rouge strié.
    Par :GREG: dans le forum Composants VCL
    Réponses: 2
    Dernier message: 12/08/2002, 09h37

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