Bonjour, je cherche une fonction qui permet de catégoriser en 4 une variable continue afin de pouvoir m'en servir dans une ACM ou une régression logistique sur variable modale.
En vous remerciant d'avance.
Bonjour, je cherche une fonction qui permet de catégoriser en 4 une variable continue afin de pouvoir m'en servir dans une ACM ou une régression logistique sur variable modale.
En vous remerciant d'avance.
Tout dépend de ce que tu veux,
par segments de tailles égales (diviser la plage par 4 et prendre les bornes)? d'effectifs égaux (trier tes individus et découper en 4 segments de même taille)? par k-means (fonction du même nom)?
En fait c'est prendre les 4 quartiles (0 à 25% de l'échantillon, 25% à 50% de l'échantillon, 50 à 75% puis 75% à 100%), comme un boxplot. Me servir de ces 4 limites pour découper en 4 ma variable continue, mais j'imagine que ce type de fonction est également paramétrable pour un découpage en 2 voir 3.
Bonjour,
Une solution possible :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 > x <- rnorm(20) > cut(x, breaks=quantile(x, c(0, 0.25, 0.5, 0.75, 1)), include.lowest = TRUE) [1] (0.759,1.28] [-0.827,-0.342] [-0.827,-0.342] (-0.342,0.046] [5] (0.046,0.759] (-0.342,0.046] [-0.827,-0.342] (-0.342,0.046] [9] (0.759,1.28] (0.759,1.28] [-0.827,-0.342] [-0.827,-0.342] [13] (0.759,1.28] (-0.342,0.046] (0.046,0.759] (-0.342,0.046] [17] (0.046,0.759] (0.046,0.759] (0.759,1.28] (0.046,0.759] Levels: [-0.827,-0.342] (-0.342,0.046] (0.046,0.759] (0.759,1.28] > summary(cut(x, breaks=quantile(x, c(0, 0.25, 0.5, 0.75, 1)), include.lowest = TRUE)) [-0.827,-0.342] (-0.342,0.046] (0.046,0.759] (0.759,1.28] 5 5 5 5
Merci pitipoisson, c'est une solution qui pourrait m'arranger en effet, bon aprés j'ai plusieurs variables continues à 'disjonctiver' du coup il me faudrait faire des boucles vue que ta syntaxe me rajoute les une aprés les autres les colonnes dans un même vecteur.
Mais je suis étonné que R ne propose pas une fonction qui le fasse automatiquement...
Et bien c'est assez simple, j'ai une matrice de données avec plusieurs variables quantitatives, je voudrais en dégager la matrice des classes.
Ex:
Si on décide de découper en 4 cette matrice on aura:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 X1 .... 1 2 3 4 5 6 7 8
Ou chaque classe correspond à 25% de l'échantillon.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 X1 .... Cl1 Cl1 Cl2 Cl2 Cl3 Cl3 Cl4 Cl4
Aprés une fois que j'ai ça je compte en extraire la table disjonctive via la commande acm.disjonctif du package Ade4.
Bref, j'ai craqué, je me suis servi de ton bout de code et d'une boucle for pour appliquer ta syntaxe à chaque colonne une à une et j'ai enfin pu faire ma matrice catégorisée.
Merci à vous deux pour vos aides et vos intérêts à mon topic.
En R, il vaut mieux éviter les boucles for, while, etc. pour leur préférer (dans la mesure du possible) la vectorisation, les sweep et les fonctions de la famille des apply.
Dans ton cas (travail sur les colonnes d'une data.frame) c'est sapply qui est la plus adaptée :
(je t'ai mis un petit argument optionnel qui permet de choisir le nombre de classes).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 df <- data.frame(a=1:20, b=rnorm(20)) ## Définition d'une fonction : quantile.cut <- function(x, n=4,...) { cut(x, breaks=quantile(x, seq(from=0, to=1, by=1/n)), include.lowest = TRUE,...) } ## On applique la fonction sur chaque colonne (n=4 est optionnel mais peut être changé ici) : as.data.frame(sapply(df, quantile.cut, n=4))
Partager