Argument subset de la fonction lda

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

Alisson Faure
Messages : 4
Enregistré le : 23 Juin 2020, 15:48

Argument subset de la fonction lda

Messagepar Alisson Faure » 07 Juil 2020, 15:02

Bonjour,

Je travaille sur un tableau de données "donnees_1" comportant 406 observations qui sont des relevés notés G01A, G01B.... et 165 variables qui sont des noms d'espèces végétales.
Je souhaite réaliser une analyse discriminante avec la fonction lda du package MASS.
Pour regrouper les observations j'utilise la colonne "Id_facies" de mon document "donnees_floristiques_1", les groupes sont des chiffres allant de 1 à 8.
Je veux que le programme réalise un apprentissage de cette classification sur un sous-tableau, j'utilise donc la fonction subset. Mon fichier random comporte 48 observations et 165 variables.
Ma ligne de code est la suivante :

Code : Tout sélectionner

lda (donnees_1, donnees_floristiques_1$Id_facies, subset = random)


Mon problème réside dans l'utilisation de la fonction subset car R me retourne le message d'erreur suivant :

Code : Tout sélectionner

Error in x[subset, , drop = FALSE] : type 'list' d'indice incorrect


J'espère que vous aurez des éléments de réponses à m'apporter.
Merci d'avoir pris le temps de lire mon post et merci d'avance pour votre aide.

Mickael Canouil
Messages : 1000
Enregistré le : 04 Avr 2011, 08:53
Contact :

Re: Argument subset de la fonction lda

Messagepar Mickael Canouil » 07 Juil 2020, 15:36

Bonjour,

Un peu de lecture :

D'après la documentation :

Code : Tout sélectionner

?MASS::lda

subset
An index vector specifying the cases to be used in the training sample. (NOTE: If given, this argument must be named.)

A priori, votre "random" n'est pas un vecteur d'indice comme demandé.

Cordialement,
Mickaël

Alisson Faure
Messages : 4
Enregistré le : 23 Juin 2020, 15:48

Re: Argument subset de la fonction lda

Messagepar Alisson Faure » 07 Juil 2020, 16:23

Merci pour votre réponse.

Mon "random" est un data.frame.
Qu'est-ce qu'un vecteur d'indice dans R ?

Cordialement.

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

Re: Argument subset de la fonction lda

Messagepar Logez Maxime » 08 Juil 2020, 07:45

Bonjour,

subset est un argument qui te permet de ne prendre en compte qu'une partie de ton jeu de données selon un critère que tu lui donnes. Ca peut-être le numéro des lignes que tu veux garder ou un vecteur logique (booléen) issu d'une comparaison, par exemple :

Code : Tout sélectionner

Iris <- data.frame(rbind(iris3[,,1], iris3[,,2], iris3[,,3]),
                   Sp = rep(c("s","c","v"), rep(50,3)))
train <- sample(1:150, 75)

# ne fait le calcul que sur les 75 lignes choisies :
z <- lda(Sp ~ ., Iris, prior = c(1,1,1)/3, subset = train)

# si on décidait de faire le calcul que pour les espèces c et v de la colonne Sp
 lda(Sp ~ ., Iris, prior = c(1,0,1)/2, subset = Iris$Sp != "s")

Ce ne peut pas être un data.frame directement.

Si tu fais ta sélection avant, alors le data.frame sélectionné tu le passes dans l'argument data :

Code : Tout sélectionner

 lda(Sp ~ ., Iris[train,], prior = c(1,1,1)/3)
Cordialement,
Maxime

Alisson Faure
Messages : 4
Enregistré le : 23 Juin 2020, 15:48

Re: Argument subset de la fonction lda

Messagepar Alisson Faure » 08 Juil 2020, 08:33

Merci pour votre aide.

Je comprends mieux où est mon problème.
J'ai déterminé mon subset avant d'appliquer la fonction lda donc je devrais utiliser le deuxième code que vous me proposez. Ce qui m'embête c'est que je souhaite tirer aléatoirement un même nombre de lignes dans chaque classe et non un certain nombre de lignes dans tout mon tableau de données. De plus, je veux réaliser l'analyse discriminante linéaire sur l'ensemble de mon jeu de données pas uniquement sur le sous-tableau.

J'espère avoir été suffisamment clair.
Cordialement.

Alisson Faure
Messages : 4
Enregistré le : 23 Juin 2020, 15:48

Re: Argument subset de la fonction lda

Messagepar Alisson Faure » 08 Juil 2020, 09:11

J'ai trouvé une solution pour ne plus avoir de data.frame.
J'ai créé un vecteur avec le nom des lignes de mon tableau, je n'ai donc plus le message d'erreur qui me posait problème.
Cependant, j'ai désormais un nouveau message d'erreur :

Code : Tout sélectionner

Error in if (any(f1 < tol)) { :
  valeur manquante là où TRUE / FALSE est requis


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité

cron