Bonjour, j'essaie d'automatiser le process suivant: pour 3 densités de distribution distinctes (plus ou moins)... je place 2 cutoffs à partir desquels je cherche à colorier une partie des 3 densités de distribution.

Ex: - Pour la première (la "densité" associée à mes valeurs les plus faibles), je veux colorier de -infi à cutoff1.
- Pour la seconde (la "densité associée à mes valeurs intermédiaires), je veux colorier de cutoff1 à cutoff2.
- Enfin, pour la troisième (la "densité" associée à mes valeurs fortes), je veux colorier de cutoff2 à +infi.

Donc j'ai fait le petit programme suivant (non optimisé mais il s'agit d'un brouillon):

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
 
# au début j'ai une variable explicative et une variable réponse, je construit les différentes "sous-variables" à partir de la variable d'origine et de ma réponse (codée 1, 2, 3).
# Gross-modo ce que je fais sur les lignes qui suivent c'est récupérer les valeurs max et min de ma variable ainsi que des 3 densités de distribution car je vais me servir d'un plot de départ pour compléter mon graphe, du coup lors du xlim je vais avoir besoin des valeurs minimales et maximales de l'ensemble de mes densités, quand aux valeurs max et min de ma variable c'est pour voir où elle s'arrête réellement puisque mes densité vont de - à + l'infinie contrairement à ma variable.
    MIN = min(Var[,2])
    MAX = max(Var[,2])
    mQ1 = Var[which(Var[,1] == 1),2]
    mQ2 = Var[which(Var[,1] == 2),2]
    mQ3 = Var[which(Var[,1] == 3),2]
    xMINdens1 = min(density(mQ1)$x)
    xMAXdens1 = max(density(mQ1)$x)
    yMAXdens1 = max(density(mQ1)$y)
    xMINdens2 = min(density(mQ2)$x)
    xMAXdens2 = max(density(mQ2)$x)
    yMAXdens2 = max(density(mQ2)$y)
    xMINdens3 = min(density(mQ3)$x)
    xMAXdens3 = max(density(mQ3)$x)
    yMAXdens3 = max(density(mQ3)$y)
    xMINdens = min(c(xMINdens1,xMINdens2,xMINdens3))
    xMAXdens = max(c(xMAXdens1,xMAXdens2,xMAXdens3))
    yMAXdens = max(c(yMAXdens1,yMAXdens2,yMAXdens3))
 
# Je plot en premier la densité associée aux valeurs de ma variable pour la classe 1 puis ensuite celles pour la classe 2 et puis celles pour la classe 3.
    plot(density(mQ1),xlim = c(xMINdens,xMAXdens), ylim = c(0,yMAXdens),col = "green",lwd=3)
    points(density(mQ2),type='l',col = "blue",lwd=3)
    points(density(mQ3),type='l',col = "red",lwd=3)
    lines(rbind(Var[cutoff1,2],Var[cutoff1,2]),rbind(0,yMAXdens),lty=2)
    lines(rbind(Var[cutoff2,2],Var[Cutoff2,2]),rbind(0,yMAXdens),lty=2)
 
# Enfin, je trace mes limites dû à ma variable ainsi que mes 2 cutoffs.
    lines(rbind(MIN,MIN),rbind(0,yMAXdens),lty=1)
    lines(rbind(MAX,MAX),rbind(0,yMAXdens),lty=1)
    legend("topright",c("Class1","Class2","Class3","Cutoff","Valeurs limites"),col=c("green","blue","red","black","black"),lty=c(1,1,1,2,1))
Un exemple concret (bon là c'était pour 4 classes, mais j'ai volontairement réduit à 3 pour faciliter la lecture, de même pour le trait en arrête qui devient continue, c'était pour pouvoir colorier sous paint rapidement):



Alors j'ai vu qu'on pouvait faire ça avec la fonction polygone, mais pas moyen de lui mettre les cutoffs pour limiter le coloriage...


En vous remerciant d'avance pour votre intérêt à mon problème et votre aide!