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 :

Demande de conseil, simulation/boucle


Sujet :

R

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 20
    Points : 8
    Points
    8
    Par défaut Demande de conseil, simulation/boucle
    Bonjour

    Je souhaiterai avoirs quelques conseils concernant mon code.
    J'ai réalisé un tirage aléatoire de 3 valeurs parmi 25 (12 fois) et j'applique certaines fonctions issues du protocole "complete allocation sampling".

    J'ai un tableau avec une colonne qui identifie le groupe de 25 valeurs (A1 à A12) et une autre qui associe les effectifs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    Simu <- function(x,inputrates){
    {#Somme des valeurs de chaque pixel pour une Grande Unité (GU)
    #Donne les effectifs par GU (de 1 a 12)
    library(doBy) #Appel de la librairie pour réaliser le summaryBy
    Someff<-summaryBy(V2~V1,data=Tab,FUN=sum)
     
    #changement des noms des colonnes de Someff
    names(Someff)<- c("V1","V2.eff")
     
    #Effectif total (toutes GU)
    Efftot <- colSums(Tab["V2"])
     
    #Nombre de cases non vides par GU
    Pixnv<-data.frame(Someff["V1"],"V2"=(25-table(Tab)[,1]))
    names(Pixnv)<- c("V1","V2.NV")
     
    #Séparation de chaque Grande unité (liste)
    Tab.split <- split(Tab,as.factor(Tab$V1))
     
    #Tirage aléatoire parmi chaque GU
    Tab.sample <- lapply(Tab.split,function(x) x<-x[sample(1:nrow(x),n1,replace=F),])
     
    #Transformation en data frame des listes obtenues après tirage aléatoire
    Tab.sample.df<-do.call(rbind.data.frame, Tab.sample) #Obtention data frame avec les 3 valeurs tirées par GU
     
    #Affichage du nombre de valeur supérieures à "0" par GU
    Tabs.df<-summaryBy(V2~V1,data=Tab.sample.df,FUN=function(x) (sum(x > 0)))
     
    #Changement des noms des colonnes du data frame
    names(Tabs.df)<- c("V1.1","V2.1")
     
     
    #Compilation des data frame m et Som (via noms des GU)
    #nouveau data frame avec somme des effectifs par GU et nombre valeurs 
    #positives avec tirage aléatoire de n1 valeurs
    T1<-merge(Tabs.df, Someff , by.x = "V1.1", by.y = "V1")
     
    #Compilation du data frame créé et data frame nombre pixels non vides par GU
    #GU // Somme eff // Nombre de valeurs >0 parmi n1 // Nombre pixels non vides
    Tab.merge<- merge(T1,Pixnv,by.x = "V1.1", by.y = "V1")
     
    #Création data frame avec valeur de y (eff par GU)
    d2<-data.frame(Someff["V1"],ifelse(Tab.merge[,2]>0, Tab.merge[,3], 0))
    names(d2)<- c("V1","y")
     
    #Création data frame avec valeur de mh (eff par GU)
    d3<-data.frame(Someff["V1"],ifelse(Tab.merge[,2]>0, Tab.merge[,4], 0))
    names(d3)<- c("V1","mh")
     
    #Transformation des data frames en vecteur
    d2.1<- as.vector(d2[,"y"])
    d3.1<- as.vector(d3[,"mh"])
     
    #Sélection des valeurs supérieures à 0 
    y <- d2.1[as.logical(lapply(d2.1,function(x) sum(x>0) > 0 ))]
    mh <- d3.1[as.logical(lapply(d3.1,function(x) sum(x>0) > 0 ))]
     
    #Formule de la Variable v 
    v<-sum(ifelse(Tab.merge["V2.1"]>0,1,0))
     
    #Formule générale
    N <- 12 #Nombre de GU 
    Nh <-25 #Nombre de mailles par strate
    nh <- n1 #Nombre de mailles secondaires par strate 
    M <- v * Nh + (N-v) * nh #nombre de mailles échantillonnées
    pik <- 1 - choose(Nh-mh,3)/choose(Nh,nh) 
    tauhat <- sum(y/pik) #estimation de la population totale (HT)
    var.tauhat <- sum(((1-pik)*y^2)/(pik^2))
    c(tauhat,sqrt(var.tauhat)) # Estimation du total et Ecart type
    qnorm(0.975)
    IC95<- c(tauhat-((qnorm(0.975)*sqrt(var.tauhat))/sqrt(M)), tauhat+((qnorm(0.975)*sqrt(var.tauhat))/sqrt(M)))
    IC99<- c(tauhat-((2.58 *sqrt(var.tauhat))/sqrt(M)), tauhat+((2.58 *sqrt(var.tauhat))/sqrt(M)))
    }
    }
     
    result <- list ( NULL )
    for(i in 1:1000)  result[[i]] <-Simu(x,inputrates) #run the simulation 1000 times
    aa<- do.call(rbind.data.frame, result)
    names(aa)<-c("A1","A2")
    result.split <- split(aa,as.factor(aa$"A1"))
    cc<-melt(result.split)
    library(ggplot2)
    #1000 boites à moustaches combinées en 1
    dd<-qplot(factor(1), value, data = cc, geom = "boxplot",main="tirage aléatoire n1=3")
     
     
    #boites à moustache des valeurs min et max
    dd<-qplot(factor(1), value, data = cc, geom = "boxplot",colour=variable)
    J'obtiens ce que je souhaite :


    Cependant, j'aimerais réaliser le même graphe pour n1=4, n1=5, etc.
    Je peux le faire manuellement et je relance le code, mais il doit exister une manière de le faire plus automatiquement, mais je ne vois pas laquelle.

    Je cherche surtout (pour ce qui est avant, ce n'est pas bien grave de le faire manuellement) à afficher mes boxplots sur le même graphique. Avoir le boxplot n1=3 avec à sa droite le boxplot n1=4, etc.
    Le résultat final recherché est :


    Mais je n'arrive pas à faire afficher le boxplot 1 à côté du boxplot 2 (en sachant qu'ils ont la même échelle pour y).

    Merci d'avance.
    Bon week-end

  2. #2
    Membre averti
    Homme Profil pro
    Data Scientist
    Inscrit en
    Août 2013
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Data Scientist
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2013
    Messages : 139
    Points : 316
    Points
    316
    Par défaut
    Bonjour,

    Pour répondre déjà à la partie automatisation je te conseille de regarder le package manipulate qui est très utile pour ce genre de manipulation ! https://support.rstudio.com/hc/en-us...ith-Manipulate

    Bon courage

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 20
    Points : 8
    Points
    8
    Par défaut
    Bonjour,
    Merci pour la réponse, je vais jeter un œil.

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 20
    Points : 8
    Points
    8
    Par défaut
    Malheureusement, ce package ne passe pas ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    install.packages("manipulate")
    Installing package(s) into ‘C:/Users/Geoffroy/Documents/R/win-library/2.15(as ‘lib’ is unspecified)
    Warning in install.packages :
      package ‘manipulate’ is not available (for R version 2.15.0)

  5. #5
    Membre averti
    Homme Profil pro
    Data Scientist
    Inscrit en
    Août 2013
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Data Scientist
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2013
    Messages : 139
    Points : 316
    Points
    316
    Par défaut
    Tu peux mettre à jour ta version de R qui est assez ancienne.

    La 3.2 est maintenant disponible : http://www.r-project.org

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 20
    Points : 8
    Points
    8
    Par défaut
    Je bosse sous R studio. J'ai téléchargé la version 3.2, mais comment spécifier qu'il faut que mes installations de packages se fassent sur la version 3.2 et non sur la 2.15 ?

  7. #7
    Membre averti
    Homme Profil pro
    Data Scientist
    Inscrit en
    Août 2013
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Data Scientist
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2013
    Messages : 139
    Points : 316
    Points
    316
    Par défaut
    Normalement cela se fait automatiquement avec ton installation de R. Tu peux faire :
    pour voir !

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 20
    Points : 8
    Points
    8
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    sessionInfo()
    R version 2.15.0 (2012-03-30)
    Platform: x86_64-pc-mingw32/x64 (64-bit)
     
    locale:
    [1] LC_COLLATE=French_France.1252  LC_CTYPE=French_France.1252    LC_MONETARY=French_France.1252
    [4] LC_NUMERIC=C                   LC_TIME=French_France.1252    
     
    attached base packages:
    [1] splines   stats     graphics  grDevices utils     datasets  methods   base     
     
    other attached packages:
    [1] ggplot2_0.9.3.1  reshape_0.8.4    plyr_1.8         doBy_4.5-9       MASS_7.3-17     
    [6] multcomp_1.3-2   TH.data_1.0-3    survival_2.37-7  mvtnorm_0.9-9997
     
    loaded via a namespace (and not attached):
     [1] colorspace_1.2-4   dichromat_2.0-0    digest_0.6.4       grid_2.15.0       
     [5] gtable_0.1.2       labeling_0.2       lattice_0.20-6     munsell_0.4.2     
     [9] proto_0.3-10       RColorBrewer_1.0-5 reshape2_1.2.2     sandwich_2.3-0    
    [13] scales_0.2.3       stringr_0.6.2      tools_2.15.0       zoo_1.7-11
    Surtout qu'en plus c'est R 2.15.3 que j'ai et non 2.15.0
    bizarre

  9. #9
    Membre averti
    Homme Profil pro
    Data Scientist
    Inscrit en
    Août 2013
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Data Scientist
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2013
    Messages : 139
    Points : 316
    Points
    316
    Par défaut
    Essaye aussi de mettre à jour RStudio peut-être : onglet help -> check for updates ?

    Sinon désinstalles tout et réinstalle tout ! Sinon faut réfléchir à un autre moyen pour manipulate..

  10. #10
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 20
    Points : 8
    Points
    8
    Par défaut
    J'ai bien la dernière version de Rstudio ^^

    Tant pis, vais m'arranger !

  11. #11
    Membre averti
    Homme Profil pro
    Data Scientist
    Inscrit en
    Août 2013
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Data Scientist
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2013
    Messages : 139
    Points : 316
    Points
    316
    Par défaut
    Pour l'autre partie concernant les boxplots. Si tu as tous dans un même data.frame tu peux tracer tous les boxplots sur un même graphique facilement.

    Sinon tu rajoutes une variable dans ton df correspondant au n que tu veux. Ensuite facile pour le boxplot :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    p <- ggplot(df, aes(x= variableN, y = effectifs)) + geom_boxplot()
    print(p)
    Je ne peux pas faire tourner ton gros code sans la matrice x que tu utilises, donc voilà. Mets-là en pièce jointe pour plus de détails

  12. #12
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 20
    Points : 8
    Points
    8
    Par défaut
    Voici le tableau (je l'ai mis en xls, il ne passait pas en csv)

    En effet, j'ai pensé à tout réunir dans un data frame, j'allais m'y atteler quand je me suis aperçu qu'en fait dans mon code, j'ai un souci.
    Il me répète 1000 fois des résultats en se basant sur la valeur lancée dans Simu, alors qu'en réalité je souhaiterais qu'il me donne 1000 valeurs de Simu et qu'il me les stocke (les variables v, M, etc. changent à chaque tirage et a priori il ne le prend pas en compte).


    Test2.xls

Discussions similaires

  1. Demande de conseil pour migration de lignes vers colonnes
    Par ririd dans le forum Administration
    Réponses: 6
    Dernier message: 04/11/2004, 17h02
  2. [Struts_Tiles VS CSS] Demande de Conseils
    Par sylvain_neus dans le forum Struts 1
    Réponses: 4
    Dernier message: 16/04/2004, 10h12
  3. [sqlbaseserver]demande de conseils/aides pour requêtes
    Par GéniuS77 dans le forum Langage SQL
    Réponses: 14
    Dernier message: 18/03/2004, 17h27
  4. demande de conseil
    Par stephane eyskens dans le forum EDI/Outils
    Réponses: 2
    Dernier message: 25/09/2003, 14h18

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