Les posteurs les plus actifs de la semaine
Aytan
fonction sous R Vote_lcapfonction sous R Voting_barfonction sous R Vote_rcap 
c@ssoulet
fonction sous R Vote_lcapfonction sous R Voting_barfonction sous R Vote_rcap 
Adddd
fonction sous R Vote_lcapfonction sous R Voting_barfonction sous R Vote_rcap 
Eric Wajnberg
fonction sous R Vote_lcapfonction sous R Voting_barfonction sous R Vote_rcap 
gg
fonction sous R Vote_lcapfonction sous R Voting_barfonction sous R Vote_rcap 


fonction sous R

Aller en bas

fonction sous R Empty fonction sous R

Message par boxeuze le Mar 26 Jan 2010 - 12:35

je doit crée une fonction adq = function(independent,class) qui prendra en paramètres un vecteur indépendant qui contiendra les valeurs de la variable explicative pour les di fférents individus, et un facteur classe contenant la classe d'appartenance de chacun de ces individus.
La fonction renverra une liste créée de la manière suivante :
list(apriori=apriori,mu=mu,sigma=sigma)
Cette liste contiendra donc dans le vecteur apriori les probabilités a priori, dans le vecteur mu les moyennes et dans le vecteur sigma les écarts-types.

Mais je ne sais pas faire le cheminement.

Si quel qu'un pourrais m'aider je vous remercie d'avance.

boxeuze

Nombre de messages : 5
Date d'inscription : 26/01/2010

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

fonction sous R Empty Re: fonction sous R

Message par psettamaxima le Mar 26 Jan 2010 - 22:36

Bonjour,

Sous R, une grande partie des réponses peut s'obtenir avec ?
par exemple tape:
?list


donc on sait comment fonctionne la fonction list
exemple:
list(x=cars[,1], y=cars[,2])
ce qui est pareil que
list(apriori=apriori,mu=mu,sigma=sigma)


pour créer ta fonction il faut la construire de la manière suivante
NOM_DE_FONCTION<-function(ARGUMENT_1,ARGUMENT_2,ARGUMENT_3){
CORPS DE LA FONCTION}
Une fois cette étape faite tu exécute ta fonction de la manière suivante:
NOM_DE_FONCTION(ARGUMENT_1,ARGUMENT_2,ARGUMENT_3)
et tu peux assigner un nom au résultat de ta fonction pour le manipuler, exemple:
RÉSULTAT<-NOM_DE_FONCTION(ARGUMENT_1,ARGUMENT_2,ARGUMENT_3)

Par probabilité je ne vois pas ce que tu entends, je vais écrire la fonction en remplaçant probabilité par pourcentage

ADQ<-function(INDEPENDANT,
CLASS){

FREQ<-lapply(unique(CLASS),
function(x){
round(100*(length(which(CLASS%in%x))/length(CLASS)),
2)
}
)


MU<- lapply(unique(CLASS),
function(y){
round(mean(INDEPENDANT[which(CLASS%in%y)],
na.rm=T),
2)
}
)

SIGMA<-lapply(unique(CLASS),
function(Z){
round(sd(INDEPENDANT[which(CLASS%in%Z)],
na.rm=T),
2)
}
)

names(FREQ)<-names(SIGMA)<-names(MU)<-unique(CLASS)

RESULTAT<-list(freq=FREQ,
mu=MU,
sigma=SIGMA)
}



INDEPENDANT<-c(1:15)
CLASS<-c(rep( "bons", 5), rep ("moyens",5),rep ("mauvais",5))
ADQ(INDEPENDANT,CLASS)
RESULTAT<-ADQ(INDEPENDANT,CLASS)

j'ai appris sur le tas donc je pense cette fonction est loin de la perfection. j'ai utilisé des lapply , Pour faire simple un lapply exécute la fonction qui est en deuxième argument pour toutes les valeurs du vecteur qui est en premier argument.

INDEPENDANT[which(CLASS%in%y)] signifie "toutes les valeurs de INDEPENDANT ayant la même position que les valeurs de CLASS identique à y. On devine bien que ce genre de méthode peut causer beaucoup d'erreurs. Par exemple, si CLASS est factorisé , il sera classé par ordre alphabétique et les valeurs de INDEPENDANT ne concorderont plus. C'est pour cela que j'utilise des matrices ou des dataframe (si les données sont de différentes natures, ce qui est le cas ici).

Donc un lapply avec unique(CLASS) comme premier argument et une fontion comprenant INDEPENDANT[which(CLASS%in%y)] applique la fonction aux valeurs de INDENDANT correspondant à chacune des classes

J'espère t'avoir aidé sans faire le travail à ta place Wink

Ps je fuis les listes comme la peste donc désolé si le résultat n'est pas celui escompté

psettamaxima

Nombre de messages : 4
Date d'inscription : 21/06/2007

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Revenir en haut

- Sujets similaires

 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum