Réduire la taille des polices et centrer réduire un tableau

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

Ludovic CHANE-HIME
Messages : 17
Enregistré le : 23 Jan 2007, 10:47

Réduire la taille des polices et centrer réduire un tableau

Messagepar Ludovic CHANE-HIME » 23 Avr 2007, 16:10

Bonjour à tous,

Dans le cadre de mon diplôme, on me demande de procéder à l’analyse de l’évolution d’un cours de bourse en utilisant les techniques d’analyse des données.
J’ai accompli un travail préalable afin de coder de façon binaire (0 et 1) les chandeliers précédents un retournement de tendance.
A partir de ces données obtenues je lance mon ACP sous R par l’intermédiaire du script suivant :

library(Ecdat)
library(ade4)
t1<-read.delim("MicroACP.txt")
t1
pca1<-dudi.pca(t1)# pour avoir l'analyse en composante principale Graphique des vecteurs propres
pca1
#Pour avoir l'inertie expliquée des deux axes
#cela nous donne la proportion d'inertie expliquée par rapport au deuxième
#le premier axe est plus proche du nuage de points
#Pour le nombre d'axe on tape 2 et entrée du clavier numérique
s.corcircle(pca1$co)#Pour avoir le cercle des corrélations
#on fait l'analyse dual en transposant le tableau de données
scatter(pca1)#pour avoir les graphiques superposés

Étant donné la multitude des données on obtient un graphique illisible.
Je souhaiterais réduire la taille de la police des caractères. En consultant le web j’ai trouvé la commande cin
Mais je n’arrive pas à l’utiliser. J’obtiens à chaque fois le message d’erreur : « Erreur : impossible de trouver la fonction "cin" »

Merci d’avance pour votre aide.

Par la suite il faut effectuer un classement hiérarchique des réponses obtenues et tracer un dendrogramme. Est-ce que R exécute directement le script

dist(t1,method="euclidean")
hc<-hclust(dist(t1,method="euclidean"),method="complete")
plot(hc)

sur un tableau normal ou faut-il centrer réduire avant ?
En d’autre terme y a-t-il des commandes sous R pour centrer réduire un tableau


Cordialement


Ludovic CHANE-HIME

Logez Maxime
Messages : 3138
Enregistré le : 26 Sep 2006, 11:35

Messagepar Logez Maxime » 23 Avr 2007, 16:26

Bonjour,

Pour une fois il est vrai que dans l'aide de scatter ce n'est pas spécifié. Mais si tu tapes apropos("scatter") tu vois qu'il y a une fonction scatter.dudi et si tu tapes args(scatter.dudi) tu vois les paramètres clab.row et clab.col en jouant dessus et en mettant des valeurs inférieures à 1 tu réduiras la taille des étiquettes. Plus généralement dans ade4 tout ce qui touche à la taille des étiquettes commence par clab, ou clabel.
Pour centrer réduite ton tableau regarde du côté de la fonction scale. Pour ce qui est de tes distances regarde aussi du côté de dist.dudi.

Maxime.

Ludovic CHANE-HIME
Messages : 17
Enregistré le : 23 Jan 2007, 10:47

Messagepar Ludovic CHANE-HIME » 23 Avr 2007, 16:36

je vous remercie, je teste et vous tiens informer

Bonne soirée

Nicolas Péru
Messages : 1408
Enregistré le : 07 Aoû 2006, 08:13

Messagepar Nicolas Péru » 23 Avr 2007, 16:42

salut,

comme te l'a plus ou moins dit maxime, tu ne peux pas utiliser (en tout cas je ne crois pas :) ) utiliser le paramètre 'cin' (c'est un paramètre graphique, pas une fonction à part entière). Si ça peut marcher c'est à utiliser dans la fonction par() :

Code : Tout sélectionner

par(cin=...)


Ensuite, si tu fais une ACP sur du 0/1, il ne faut pas faire une ACP normée, qui est la transformation par défaut du dudi.pca. C'est à dire que R centre et réduit ton tableau...donc pas besoin de chercher plus loin :).
Donc dans ton cas, il faut que tu fasses une ACP centrée car sinon en divisant par la variance tu élimines tout ce qui crée de la variabilité dans tes données. On fait une ACP normée lorsque les colonnes de ton tableau ont des variances très différentes (par exemple des mesures physico chimiques et à côté une altitude). le bon code est donc :

Code : Tout sélectionner

pca1<-dudi.pca(t1, scale=F)


cf. ?dudi.pca pour plus de détail :)


pour le passage en distance, il faut effectivement utiliser la fonction dist.dudi() à moins que R ne reconnaisse directement qu'onlui fournit un objet de classe dudi et quil utilise alors cette fonction par défaut. Mais pour assurer j'utiliserai la fonction dist.dudi(). Et il faut bien lui mettre ton objet pca1 sans aucune autre transformation car il calcule les distances à partir des coordonnées des lignes sur la carte factorielle de l'ACP.

a+

nicolas

Ludovic CHANE-HIME
Messages : 17
Enregistré le : 23 Jan 2007, 10:47

Messagepar Ludovic CHANE-HIME » 23 Avr 2007, 16:54

je viens de tester hélas aucun résultat probant :cry:
j'ai testé les trois commandes suivantes sans succès :
clab.row = 0.001, clab.col = 0.001
clablabel=0.05

j'attends donc vos autres conseils

Cordialement

Ludovic CHANE-HIME

PS: encore merci pour vos réponses si rapides

Nicolas Péru
Messages : 1408
Enregistré le : 07 Aoû 2006, 08:13

Messagepar Nicolas Péru » 23 Avr 2007, 17:56

il faut utiliser clabel qui est par défaut à 1. Regardes l'aide de s.label par exemple.
D'ailleurs au lieu d'utiliser scatter(), tu peux faire un s.label sur ton acp$li et un s.arrow() sur ton acp$c1 par exemple. C'est la même chose que de faire un scatter plot sauf que tu as les lignes et les colonnes séparées mais représentées à la même échelle..c'est déjà beaucoup plus lisible.

Logez Maxime
Messages : 3138
Enregistré le : 26 Sep 2006, 11:35

Messagepar Logez Maxime » 23 Avr 2007, 18:17

Re,

J'ai oublié de dire que clab.row et clab.col s'utilise avec la fonction scatter.dudi, donc tu tapes :

Code : Tout sélectionner

acp <- dudi.pca(X,...)
scatter.dudi(acp,clab.row=0.5,clab.col=0.5) # ou les valeurs que tu veux et ça devrait marcher.


Pour moi en tout cas ça a marché avec une version 1.4.1 de R et une des dernières version d'ade4. Il la mette a jour réguilèrement. Sinon tu peux aussi faire comme Nicolas te la conseillé vu que le résultat sera le même mais il n'y a pas de raison que ça ne marche pas.

Maxime

Samir Messad
Messages : 76
Enregistré le : 10 Jan 2005, 20:56

Messagepar Samir Messad » 24 Avr 2007, 09:42

Ensuite, si tu fais une ACP sur du 0/1, il ne faut pas faire une ACP normée, qui est la transformation par défaut du dudi.pca. C'est à dire que R centre et réduit ton tableau...donc pas besoin de chercher plus loin :).
Donc dans ton cas, il faut que tu fasses une ACP centrée car sinon en divisant par la variance tu élimines tout ce qui crée de la variabilité dans tes données. On fait une ACP normée lorsque les colonnes de ton tableau ont des variances très différentes (par exemple des mesures physico chimiques et à côté une altitude).


Bonjour,

le fait ou non de réduire un tableau de données binaire avant une ACP peut également être dicté par les objectifs de l'utilisateur. Si il souhaite par exemple "minimiser" le poids des variables avec réponse rares (peu de 1) ou très fréquentes (beaucoup de 1), il peut choisir de ne pas réduire. Ces variables ayant une variance plus faible, elles auront moins de poids dans l'analyse factorielle.
On peut au contraire réduire le tableau, lorsque l'utilisateur estime que les réponses rares ou trop fréquentes ne sont pas une "gêne" ou qu'il a même intérêt à les valoriser lors du dépouillement des résultats.

Cordialement.
Samir Messad

Nicolas Péru
Messages : 1408
Enregistré le : 07 Aoû 2006, 08:13

Messagepar Nicolas Péru » 24 Avr 2007, 11:24

dans le cas des réponses rares, on peut utiliser une AFC qui les mettra directement en valueur sans une nouvelle transformation du tableau. On peut alors même "bénéficier" de l'apparition de correspondance pointue. Mais effectivement tout est envisageable selon les objectifs, il m'apparaissait important de donner quelques précisions car l'ACP ne s'utilise pas n'importe comment ni n'importe quand.

Logez Maxime
Messages : 3138
Enregistré le : 26 Sep 2006, 11:35

Messagepar Logez Maxime » 24 Avr 2007, 11:58

Bonjour,


Attention Nico quand tu dis que dans une AFC le tableau ne subit pas de transformation, ce n'est pas vrai. Le tableau brut subi bien une transformation au départ, et c'est d'ailleurs la seule différence entre les analyses (qui n'est pas des moindres car pas mal de répercution par la suite) car le calcul des axes se fait de la même façon par la suite sur les tableaux transformés. Je sais que tu le sais aussi bien que moi ce qui se passe dans ces deux analyses multivariées mais je voulais juste corriger un éventuel abus de langage.

Maxime

Nicolas Péru
Messages : 1408
Enregistré le : 07 Aoû 2006, 08:13

Messagepar Nicolas Péru » 24 Avr 2007, 12:07

oui tout juste....je faisais référence au fait de centrer/réduire le tableau au préalable :)

merci de la précision :)

Ludovic CHANE-HIME
Messages : 17
Enregistré le : 23 Jan 2007, 10:47

Messagepar Ludovic CHANE-HIME » 24 Avr 2007, 19:21

je vous remercie encore une fois pour vos réponses nombreuses et l'existence de ce forum et son sérieux mérite qu'il poursuive encore longtemps son objectif d'aider les utilisateurs du logiciel R et par conséquent d'en promouvoir l'utilisation.

J'ai réussi grace au conseil de Monsieur Maxime de réduire et d'augmenter la taille des étiquettes.

Le codage en binaire a pour objectif de ne pas influencer les résultats obtenus en pondérant trop fortement une valeur.

Par exemple si on code un MACD vert en 5, celui lui donnera plus de poids qu'un chandelier Vert codé en 1.

l'ACP a pour objectif d'homogéiser des groupes afin de faire ressortir des caractéristiques communes avant une phase de hausse ou de baisse.

Le dendrogramme obtenu par le script cité plus haut dont je rappelle les quelques lignes ci dessous

Code : Tout sélectionner

  dist(t1,method="euclidean")
hc<-hclust(dist(t1,method="euclidean"),method="complete")
plot(hc)



conduit au même problème c'est à dire un graphique illisible.
est il possible d'utiliser les commande
clab.row et clab.col pour modifier l'étiquette dans un dendrogramme?

De même, j'ai utilisé la commande rownames

Code : Tout sélectionner

rownames(t1) <- c("B1","H1")


Remarque: j'ai simplifié la commande car il y a 289 lignes à renommer

Il prend environ 3 minutes en émettant un bip continue
Puis s'arrete et me redonne la main.
j'exécute alors


Code : Tout sélectionner

s.corcircle(pca1$co)#Pour avoir le cercle des corrélations
et scatter.dudi(pca1,clab.row=0.7,clab.col=0.40,permute = FALSE, posieig = "bottom")




et je constate que les lignes ne sont pas renommées et je ne sais pas pourquoi?


bonne soirée

et merci encore une fois



Cordialement


Ludovic CHANE-HIME

Logez Maxime
Messages : 3138
Enregistré le : 26 Sep 2006, 11:35

Messagepar Logez Maxime » 24 Avr 2007, 20:05

Bonjour,

Une des premières choses à faire quand on ne connaît pas trop une fonction est de regarder l'aide avec ?hclust (qui te donne aussi l'aide pour plot de haclust) ou en tapant args(nom de la fonction) pour avoir les arguments utilisées dans la fonction. Ici clab.row et clab.col ne sont pas des arguments de la fonction plot donc il ne te servirait à rien. Il te faut regarder du côté des paramètres graphiques qui te sont donnés par la fonction par(). Tu peux trouver tout le détail de ces paramètres graphiques dans la fiche tdr75 sur le site http://pbil.univ-lyon1.fr/R/fichestd/tdr75.pdf. Pour aller plus vite il te suffit de modifier le paramètre cex, plot(hc,cex=0.5) pour modifier la taille des caractères affichées dans le dendrogramme.

Pour tes noms de lignes je pense qu'il y a deux petites incompréhensions. La première est que la fonction s.corcircle(acp$co) utilise le tableau acp$co et nom pas le tableau t1 donc si tu modifies les lignes de t1 il n'y a pas de raisons que s.corcircle affiche les bons noms de lignes. De plus le tableau acp$co a les noms de ligne du tableau dont tu cherches a faire l'acp. Donc si tu fais l'acp sur t1 avant d'avoir modifier les noms de lignes, les tableaux générés par l'acp auront des noms de lignes qui ne seront pas ceux que tu voudras. Donc je te conseille d'abord de modifier les noms de lignes de t1 puis de faire l'acp et après le s.corcircle. Si tu n'as pas envie tu modifie les noms de ligne de pca1$co plutôt que ceux de t1. Tu peux aussi je viens de voir faire s.corcircle(pca&$co,label=c("B1",...)).

Maxime

Ludovic CHANE-HIME
Messages : 17
Enregistré le : 23 Jan 2007, 10:47

Messagepar Ludovic CHANE-HIME » 28 Avr 2007, 11:31

bonjour

je suis désolé pour un aussi long silence.

Le fait que R ne renomme pas mes lignes a pour origine le nombre de ligne a renommer

je m'explique

Dans mon cas, j'ai 289 lignes a renommé. Or dans la console de R lorsque je rentre tout cela il s'arrete à environ 85 valeurs.
donc il faut que je réduise la taille de mon tableau à 85 lignes pour qu'il accepte.

Mais je ne peux me satisfaire d'un tel résultat.

si je lance la commande rownames sur l'ensemble du tableau il n'accepte pas et je ne peux morceler comment faire pour lui dire qu'arriver à la ligne 85 il s'arrete sans qu'il m'indique comme message d'erreur




Code : Tout sélectionner

 Erreur dans `dimnames<-.data.frame`(`*tmp*`, value = 84) :
        'dimnames' incorrect pour ce tableau de données
 


les arguments possibles de la fonction rownames

Code : Tout sélectionner

> args(rownames)
function (x, do.NULL = TRUE, prefix = "row")
NULL


mais je ne les comprends pas

encore une fois merci Monsieur Maxime LOGEZ et aux autres qui m'ont consacré de leurs temps en particulier Monsieur Samir Messad et Monsieur Nicola PERU

Cordialement



Ludovic CHANE-HIME

Nicolas Péru
Messages : 1408
Enregistré le : 07 Aoû 2006, 08:13

Messagepar Nicolas Péru » 28 Avr 2007, 19:32

si j'ai bien suivi,

tu veux renommer les lignes de ton tableau avec seulement B1 et H1 ?
Si c'est bien le cas, c'est normal qu'il se pose un problème de dimension puisque tu veux lui faire remplacer un vecteur de 289 lignes (les rownames de t1) par un vectueur de 2 valeurs.

Donc la première étape consiste à créer ton vecteur de 289 valeurs avec ce que tu veux dedans. la fonction rep() peux sans doute t'aider dans ce sens car elle permet de répéter ce que tu veux le nombre de fois que tu veux.

Une fois ton vecteur créer tu peux t'en servir pour nommer les lignes de ton tableau. attention toutefois, je ne suis pas à 100% sûr que R accepte sans problème les répétition de nom de ligne...à voir...je crois que si ton tableau est un objet de type matrix ça ne passera pas. Par contre si c'est un data.frame c'est bon. Mais t'inquiète pas si tu as un message d'erreur il te suffit de transformer ton tableau en l'une ou l'autre de ces deux catégorie avec les fonctions matrix() et data.frame()


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Google [Bot] et 1 invité