Modele linéaire

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

Romain Lecachey
Messages : 33
Enregistré le : 10 Avr 2007, 08:57

Modele linéaire

Messagepar Romain Lecachey » 24 Mai 2007, 09:39

Bonjour,

Dans le but d'effectuer des recherches et dans l'optique de mon stage, il fallait que je m'interresse aussi à la notion de modèle linéaire !
Pour cela, j'ai consulté les fiches ( déjà présente sur le forum ;-)) ) et je suis tombé sur un script que je voulais remettre à ma sauce :
Voilà ce que j'obtiens : ( début de mon code ! )

Code : Tout sélectionner

AnovaUnFacteur <- function(fichier,type_image,donnees,VarTest,VarEffet)
{
#-- Données
table(donnees$VarTest)
tapply(X = VarEffet, INDEX = list(VarTest), FUN = mean)
tapply(X = VarEffet, INDEX = list(VarTest), FUN = sd)

bitmap(fichier, type_image ,width=10,height=10,res=72,pointsize=12)
boxplot(formula = VarEffet ~ VarTest,data = donnees,main="Boxplot",xlab = "Variable à tester", ylab = "Variable d''effet",boxwex = 0.5,col = "orange")
dev.off()
graphics.off()
}

J'obtiens alors une erreur en lançant la fonction :

Code : Tout sélectionner

 AnovaUnFacteur("/home/rom/ggg","png256",tabb,dece,jours)
Erreur dans as.vector(x, mode) : argument 'mode' incorrect

Sachant que ma "tabb" est de la forme :

Code : Tout sélectionner

 tabb
   jours dece
1   9578    0
2  15139    1
3   5112    0
4  10609    1
5  18421    0
6  10556    0
7  16796    1
8   2284    0
9  19559    1
10  9215    0
11  8135    0
12  3927    0
13  1688    1
14   381    0
15 14371    0
16  1254    0
17 16120    0
18 10883    1
19  6027    1
20   707    0

Ceci est juste pour tester ma fonction pas à pas mais ça plante déjà et je ne vois pas d'où ça vient pourtant ça doit pas être grand chose ; il n'y a pas d'option "mode" dans la fonction "tapply" !?
Quelqu'un pour m'éclairer ?
Merci d'avance

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

Messagepar Logez Maxime » 24 Mai 2007, 17:16

Bonjour,


Ta fonction comporte des erreurs que tu aurais pu évitées en lisant quelques trucs sur R ou bien en applicant ta fonction pas a pas. Une fonction très utile pour savoir d'où vienent les erreurs affichées : traceback().

Code : Tout sélectionner

AnovaUnFacteur("bob","bob",tabb,"deces","jour")
Erreur dans as.vector(x, mode) : argument 'mode' incorrect
traceback()
4: as.vector(exclude, typeof(x))
3: factor(a, exclude = exclude)
2: table(donnees$VarTest)
1: AnovaUnFacteur("bob", "bob", tabb, "deces", "jour")

Et la tu vois que le problème vient de table et non pas (enfin pas encore) de tapply. Si tu restreint ta fonction à la première ligne tu vois ceci :

Code : Tout sélectionner

test <- function(donnes,var) print(donnes$var)
test(tabb,"jour")
NULL

Donc pour appeler ta colonne qui s'appelle jour ce n'est pas la bonne méthode. Tout ces problèmes d'importation ou de geston de tableau sont abordées dans R pour les débutants de E Paradis.

Code : Tout sélectionner

test <- function(donnes,var) table(donnes[,var])
test(tabb,"deces")
 0  1
13  7


Dans tapply tu aurais eu le même problème parce que VarEffet il n'aurait été qu'une chaîne de caractère et non pas un vecteur, idem pour VarTest.

Le dernier problème serait venu de la façon dont est rentré la formule dans le boxplot.

Code : Tout sélectionner

test <- function(donnes,vareffet,vartest) boxplot(formula = vareffet ~ vartest,data=donnes)
test(tabb,"jour","deces")
Erreur dans x[floor(d)] + x[ceiling(d)] : argument non numérique pour un opérateur binaire


Une des façon de faire est de créer une chaîne de caractère et de la transformer en formule.

Code : Tout sélectionner

test <- function(donnes,vareffet,vartest) boxplot(as.formula(paste(vareffet," ~ ",vartest,sep="")),data=donnes)
test(tabb,"jour","deces")


Ce qui te donne au final :

Code : Tout sélectionner

AnovaUnFacteur <- function(fichier,donnees,VarTest,VarEffet)
{
#-- Données
table(donnees[,VarTest])
tapply(donnees[,VarEffet],donnees[,VarTest],mean)
tapply(donnees[,VarEffet],donnees[,VarTest],sd)

bitmap(fichier, type_image ,width=10,height=10,res=72,pointsize=12)
boxplot(as.formula(paste(VarEffet," ~ ",VarTest,sep="")),data = donnees,main="Boxplot",xlab = "Variable à tester", ylab = "Variable d''effet",boxwex = 0.5,col = "orange")
dev.off()
}


Maxime

Romain Lecachey
Messages : 33
Enregistré le : 10 Avr 2007, 08:57

Messagepar Romain Lecachey » 25 Mai 2007, 09:29

Je te remercie de ta réponse !
J'ai eu entre temps le temps de me corriger un petit peu mais pas tout à fait.
En fait, à la vue de mes erreurs je pense que le problème venait surtout du fait que je me suis basé sur ma fonction Php qui s'occupe de récupérer les résultats de R.
Ce genre de fonction marchait plus ou moins à partir d'autres fonctions statistiques, c'est pour cela que je ne l'avais pas trop modifié comme il fallait.
Toutefois, je te remercie de toutes tes précisions, c t très clair !
@+


Retourner vers « Questions en cours »

Qui est en ligne

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