AFC de foucart

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

serge Nzietchueng
Messages : 4
Enregistré le : 10 Oct 2009, 12:35

AFC de foucart

Messagepar serge Nzietchueng » 12 Oct 2009, 07:38

J'ai importé dans R (read.csv2) un fichier excel de treize tableaux avec un nombre de lignes (symptômes) et de colonnes (maladies) identiques.
Le script que j'utilise pour l'afc de foucart est: s<-foucart( s, scann=FALSE, nf=3). J'ai le message d'erreur suivant: Erreur dans foucart(s, scann = FALSE, nf = 3) : a component of X is not a data.frame.
Je me pose les questions suivantes:
1) Est-ce que les tableaux ne sont pas bien representé?
2) Est-ce que je dois écrire 13 data.frame pour les 13 tableaux?

Merci

Matthieu Stigler
Messages : 141
Enregistré le : 07 Sep 2007, 11:30

Messagepar Matthieu Stigler » 12 Oct 2009, 07:51

Prière de donner un exemple reproductible...

Ton X est-il mis sous forme de liste contenant des data-frames? Regarde la structure de l'exemple ?foucart:

library(ade4)
data(bf88)
str(bf88, max.level=1)
List of 6
$ S1:'data.frame': 79 obs. of 4 variables:
$ S2:'data.frame': 79 obs. of 4 variables:
$ S3:'data.frame': 79 obs. of 4 variables:
$ S4:'data.frame': 79 obs. of 4 variables:
$ S5:'data.frame': 79 obs. of 4 variables:
$ S6:'data.frame': 79 obs. of 4 variables:


As-tu la même structure?

serge Nzietchueng
Messages : 4
Enregistré le : 10 Oct 2009, 12:35

Messagepar serge Nzietchueng » 12 Oct 2009, 08:52

Non je n'ai pas cette structure
str(s, max.level=1)
'data.frame': 117 obs. of 9 variables:
$ X : Factor w/ 9 levels "S1","S2","S3",..: 1 2 3 4 5 6 7 8 9 1 ...
$ Iden: Factor w/ 13 levels "L1","L10","L11",..: 1 1 1 1 1 1 1 1 1 6 ...
$ D1 : int 0 0 0 0 0 0 0 0 0 5 ...
$ D2 : int 0 0 0 0 0 0 0 0 0 0 ...
$ D3 : int 0 0 0 0 0 0 0 0 0 0 ...
$ D4 : int 2 0 0 0 0 0 0 0 0 0 ...
$ D5 : int 5 0 0 3 4 4 0 2 2 0 ...
$ D6 : int 0 0 0 0 0 0 0 0 0 0 ...
$ D7 : int 2 0 0 0 0 0 0 0 3 0 ...

Exemple du fichier excel (S1,...S9= symptômes; D1,....D7= maladies, L1,....L13 = individus)
Iden D1 D2 D3 D4 D5 D6 D7
S1 L1 0 0 0 2 5 0 2
S2 L1 0 0 0 0 0 0 0
S3 L1 0 0 0 0 0 0 0
S4 L1 0 0 0 0 3 0 0
S5 L1 0 0 0 0 4 0 0
S6 L1 0 0 0 0 4 0 0
S7 L1 0 0 0 0 0 0 0
S8 L1 0 0 0 0 2 0 0
S9 L1 0 0 0 0 2 0 3
S1 L2 5 0 0 0 0 0 0
S2 L2 0 0 0 0 0 0 0
S3 L2 0 0 0 0 0 0 0
S4 L2 0 5 0 0 0 0 0
S5 L2 0 0 0 0 5 0 0
S6 L2 3 0 0 3 0 0 0
S7 L2 4 0 0 0 0 0 0
S8 L2 0 3 0 0 0 0 0
S9 L2 0 0 0 5 0 0 5
S1 L3 0 0 0 4 3 0 0
S2 L3 0 0 0 0 0 0 0
S3 L3 0 0 0 0 0 0 0
S4 L3 0 0 0 3 4 0 0
S5 L3 0 0 0 2 3 0 0
S6 L3 0 0 0 4 4 0 0
S7 L3 0 0 0 0 0 0 0
S8 L3 0 0 0 3 4 0 0
S9 L3 0 0 0 2 2 0 0

Tillard
Messages : 87
Enregistré le : 17 Déc 2004, 10:32

Messagepar Tillard » 13 Oct 2009, 04:32

Bonjour

s<-foucart( s, scann=FALSE, nf=3)


le probleme est peut-être lié au fait que vous assignez à l'objet crée par la fonction foucart le même nom ("s") que celui du data.frame

Emmanuel
Emmanuel Tillard
UMR ERRC (Elevage des Ruminants en Regions Chaudes)
CIRAD - St PIERRE (La Réunion)
tel: 02 62 49 92 54

serge Nzietchueng
Messages : 4
Enregistré le : 10 Oct 2009, 12:35

Messagepar serge Nzietchueng » 13 Oct 2009, 07:26

d<- foucart(s,scann = FALSE, nf = 3)
Erreur dans foucart(s, scann = FALSE, nf = 3) :
a component of X is not a data.frame
j'ai le même message d'erreur.
Monsieur Emmanuel, est-ce que je dois considérer les treize tableaux comme treize objets et faire une list?
Serge

Matthieu Stigler
Messages : 141
Enregistré le : 07 Sep 2007, 11:30

Messagepar Matthieu Stigler » 13 Oct 2009, 07:59

considérer les treize tableaux comme treize objets et faire une liste?


Perso je connais pas la méthode que tu utilises mais il semble assez évident à la lecture de l'exemple donné plus haut (qui vient simplement du help file) que tes données devraient avoir la même forme...

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

Messagepar Nicolas Péru » 13 Oct 2009, 08:05

Bonjour,
aide R sur fonction foucart a écrit :X: a list of data frame where the row names and the column names are the same for each table


L'aide de la fonction foucart est très claire là dessus : c'est bien une liste de data.frame qu'il faut faire. Le message d'erreur est aussi très clair : il semble qu'il y ait au moins un tableau qui ne soit pas de la classe data.frame
Un exemple sur la manière de procéder est donné à la fin de l'aide.

donc taper un ?foucart dans la console résout tous vos problèmes :).

Tillard
Messages : 87
Enregistré le : 17 Déc 2004, 10:32

Messagepar Tillard » 13 Oct 2009, 10:37

Il faut repérer l'élément de la liste qui n'est PAS un data.frame

Code : Tout sélectionner

X <- data.frame(a=c(1,2), b=c("A","B"))
X
is.data.frame(X)
[1] TRUE

Y <- matrix(1:4, ncol=2, byrow=T)
Y
is.data.frame(Y)
[1] FALSE

L <- list(X,Y)
lapply(L, is.data.frame)
[[1]]
[1] TRUE

[[2]]
[1] FALSE


Emmanuel
Emmanuel Tillard

UMR ERRC (Elevage des Ruminants en Regions Chaudes)

CIRAD - St PIERRE (La Réunion)

tel: 02 62 49 92 54

Pierre Bady
Messages : 405
Enregistré le : 02 Mai 2006, 07:46

Messagepar Pierre Bady » 13 Oct 2009, 11:10

bonjour,

- il faut faire attention au séparateur lors de l'importation (',' ou ';')
- l'analyse de foucart ne travaille pas sur les valeurs au format character ;)
- Si tableaux sont remplies de zéro, l'analyse ne fonctionnera pas.


# exemple pour vos données
[code]> ted <- read.csv2("s.csv")
> w <- split(ted[,-c(1,2)],ted$Iden)
> w <- lapply(w,function(x) {row.names(x) <- paste("S",1:9,sep="");x})
> lapply(w,function(x) class(x))
$L1
[1] "data.frame"

$L10
[1] "data.frame"

$L11
[1] "data.frame"

$L12
[1] "data.frame"

$L13
[1] "data.frame"

$L2
[1] "data.frame"

$L3
[1] "data.frame"

$L4
[1] "data.frame"

$L5
[1] "data.frame"

$L6
[1] "data.frame"

$L7
[1] "data.frame"

$L8
[1] "data.frame"

$L9
[1] "data.frame"
[\code]

ici tous les tabeaux sont des data.frames... ouf :)

Dans cet exemple, on considère un tableau [symptôme x maladie] par individu. On pourrait également en fonction des objectifs de l'étude, organiser le tableau dans un autre sens. Par exemple, [individu x symptôme] par maladie ou encore [individu x maladie] par symptôme ...
tout dépend du (des) sens des comparaisons.

[code]
# premier test
> foucart(w)
Erreur dans foucart(w) : Non convenient sum in data.frame 2
> names(w[c(2,4,10)])
[1] "L10" "L12" "L6"
>
> w[c(2,4,10)]
$L10
D1 D2 D3 D4 D5 D6 D7
S1 0 0 0 0 0 0 0
S2 0 0 0 0 0 0 0
S3 0 0 0 0 0 0 0
S4 0 0 0 0 0 0 0
S5 0 0 0 0 0 0 0
S6 0 0 0 0 0 0 0
S7 0 0 0 0 0 0 0
S8 0 0 0 0 0 0 0
S9 0 0 0 0 0 0 0

$L12
D1 D2 D3 D4 D5 D6 D7
S1 0 0 0 0 0 0 0
S2 0 0 0 0 0 0 0
S3 0 0 0 0 0 0 0
S4 0 0 0 0 0 0 0
S5 0 0 0 0 0 0 0
S6 0 0 0 0 0 0 0
S7 0 0 0 0 0 0 0
S8 0 0 0 0 0 0 0
S9 0 0 0 0 0 0 0

$L6
D1 D2 D3 D4 D5 D6 D7
S1 0 0 0 0 0 0 0
S2 0 0 0 0 0 0 0
S3 0 0 0 0 0 0 0
S4 0 0 0 0 0 0 0
S5 0 0 0 0 0 0 0
S6 0 0 0 0 0 0 0
S7 0 0 0 0 0 0 0
S8 0 0 0 0 0 0 0
S9 0 0 0 0 0 0 0

> # avec des tableaux de zero, on fait pas grand chose ... :'(
>
> foucart(w[-c(2,4,10)])
Select the number of axes: 2
Foucart's COA
class: foucart coa dudi
$call: foucart(X = w[-c(2, 4, 10)])
table number: 10

$nf: 2 axis-components saved
$rank: 5
eigen values: 0.178 0.1191 0.07643 0.0462 0.00172
blo vector 10 blocks
vector length mode content
$cw 7 numeric column weights
$lw 9 numeric row weights
$eig 5 numeric eigen values

data.frame nrow ncol content
$tab 9 7 modified array
$li 9 2 row coordinates
$l1 9 2 row normed scores
$co 7 2 column coordinates
$c1 7 2 column normed scores

**** Intrastructure ****

data.frame nrow ncol content
$Tli 90 2 row coordinates (each table)
$Tco 70 2 col coordinates (each table)
$TL 90 2 factors for Tli
$TC 70 2 factors for Tco
[/code]

et voilà :)
on retombe sur nos pattes :)


HTH

pierre
=@===--------¬-------¬------¬-----¬
liens utiles :
http://www.gnurou.org/Writing/SmartQuestionsFr
http://neogrifter.free.fr/welcomeOnInternet.jpg
]<((((*< -------------------------------

serge Nzietchueng
Messages : 4
Enregistré le : 10 Oct 2009, 12:35

Messagepar serge Nzietchueng » 14 Oct 2009, 10:09

Merci à tous pour vos réponses.


Bien cordialement

Serge


Retourner vers « Questions en cours »

Qui est en ligne

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