Précédent   Forum du club des développeurs et IT Pro > Autres langages > Autres langages > R
R Forum d'entraide sur la programmation en langage R
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 07/12/2012, 16h54   #1
hajarita
Candidat au titre de Membre du Club
 
Femme
Étudiant
Inscription : janvier 2012
Messages : 49
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Étudiant
Secteur : Services à domicile

Informations forums :
Inscription : janvier 2012
Messages : 49
Points : 12
Points : 12
Par défaut test student avec un fichier qu'il faut couper

Bonjour,

je veux faire un test de Student sur mes données qui sont organisées comme suit :
Citation:
Sequence -- A -- B
seq1 -- 2.3 -- 3.2
seq1 -- 1 -- 0.9
seq1 -- 0.2 -- 0
seq2 -- 5 -- 6
seq2 -- 2.3 -- 2
seq2 -- 3 -- 3.2
...

Je veux faire le test de Student entre mes valeurs de A et B pour chaque séquence.

Je le fais avec PERL et R integré, mais c'est très très long, car je divise mon long fichier en d'autres petits fichiers que je donne à R à chaque fois, pour avoir la p-value.

Je lis mon long fichier de milliers de lignes et à chaque fois je mets les trois lignes d'une séquence et je passe ce fichier à R.

Savez-vous comment faire avec R pour que je puisse faire tout d'un coup ?

Merci d'avance
hajarita est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/12/2012, 19h26   #2
vchouraki
Membre éclairé
 
Vincent Chouraki
Inscription : juillet 2010
Messages : 137
Détails du profil
Informations personnelles :
Nom : Vincent Chouraki
Localisation : Etats-Unis

Informations forums :
Inscription : juillet 2010
Messages : 137
Points : 360
Points : 360
Bonjour,

Code :
1
2
?t.test
example(t.test)
HTH

Vincent
vchouraki est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/12/2012, 21h59   #3
hajarita
Candidat au titre de Membre du Club
 
Femme
Étudiant
Inscription : janvier 2012
Messages : 49
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Étudiant
Secteur : Services à domicile

Informations forums :
Inscription : janvier 2012
Messages : 49
Points : 12
Points : 12
Citation:
Envoyé par vchouraki Voir le message
Bonjour,

Code :
1
2
?t.test
example(t.test)
HTH

Vincent

Merci d'avoir répondu

Mais non, la formule pour faire le test de Student je la connais.
Mon problème est que je ne sais pas comment dire à R de me faire ce test pour chaque séquence dans mon tableau qui est représentée par trois lignes dans ce cas:
exemple:


Citation:
Sequence|analyse_A|analyse_B
seq1|2.3|3.2
seq1|1|0.9
seq1|0.2|0
seq2|5|6
seq2|2.3|2
seq2|3|3.2
Si je fais ça :
t.test(data[,2], data[,3]), il va me faire le test pour toutes les séquences, alors ce que je veux, c'est calculer la p-value pour chaque séquence
seq 1 => sa p-value
seq 2 => sa p-value
ainsi de suite
hajarita est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/12/2012, 04h45   #4
vchouraki
Membre éclairé
 
Vincent Chouraki
Inscription : juillet 2010
Messages : 137
Détails du profil
Informations personnelles :
Nom : Vincent Chouraki
Localisation : Etats-Unis

Informations forums :
Inscription : juillet 2010
Messages : 137
Points : 360
Points : 360
Bonjour,

Au temps pour moi. Une boucle for ou sapply devrait suffire. voir which pour sélectionner selon la valeur de la séquence et str pour aider à extraire la p.value.

Code :
1
2
3
4
?Control
?sapply
?which
?str
Par exemple :
Code :
1
2
3
4
5
test <- data.frame(a=1:100, b=100:1, c=rep(1:20, each=5))
for (i in unique(test$c)) {
pval <- t.test(test$a[which(test$c == i)], test$b[which(test$c == i)])$p.value
print(paste("pour c = ", i, ", pval=", sprintf("%.2e", pval), sep=""))
}
ou

Code :
sapply(unique(test$c), function(x)t.test(test$a[which(test$c == x)], test$b[which(test$c == x)])$p.value)
HTH

Vincent
vchouraki est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 10/12/2012, 00h37   #5
hajarita
Candidat au titre de Membre du Club
 
Femme
Étudiant
Inscription : janvier 2012
Messages : 49
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Étudiant
Secteur : Services à domicile

Informations forums :
Inscription : janvier 2012
Messages : 49
Points : 12
Points : 12
Citation:
Envoyé par vchouraki Voir le message
Bonjour,

Au temps pour moi. Une boucle for ou sapply devrait suffire. voir which pour sélectionner selon la valeur de la séquence et str pour aider à extraire la p.value.

Code :
1
2
3
4
?Control
?sapply
?which
?str
Par exemple :
Code :
1
2
3
4
5
test <- data.frame(a=1:100, b=100:1, c=rep(1:20, each=5))
for (i in unique(test$c)) {
pval <- t.test(test$a[which(test$c == i)], test$b[which(test$c == i)])$p.value
print(paste("pour c = ", i, ", pval=", sprintf("%.2e", pval), sep=""))
}
ou

Code :
sapply(unique(test$c), function(x)t.test(test$a[which(test$c == x)], test$b[which(test$c == x)])$p.value)
HTH

Vincent



D'accord, je comprends.
En fait mes données sont comme cela (avec d'autres colonnes, mais seulement ces colonnes qui m'intéressent).


Citation:
Sequence|charge|modification|analyse_A|analyse_B
seq1|1|modif1|2.3|3.2
seq1|1|modif1|1|0.9
seq1|1|modif1|0.2|0
seq2|1||5|6
seq2|1||2.3|2
seq2|1||3|3.2
donc ma séquence est définie par : la séquence, la charge et la modification (dans la colonne modification il se peut qu'elle soit vide parfois)

Donc en se basant sur ce que tu m'as expliqué au-dessus: j'ai essayé ça, mais il me dit qu'il y a une erreur.

Voila ce que j'ai écrit:

Code :
1
2
3
4
5
>data<-read.table("chemin vers mon fichier", sep = "\t", header = FALSE)
> for (i in unique(data[,1], data[,2], data[,3])) {
+ pval <- t.test(data[,4][which(data[,1] == i) && (data[,2] == i) && (data[,3] == i)], (data[,5][which(data[,1] == i) && (data[,2] == i) && (data[,3] == i)]$p.value
+ print(paste("pour peptide = ", i, ", pval=",pval, sep=""))
Ça me donne cette erreur:
Code :
1
2
3
4
Error: unexpected symbol in:
"pval <- t.test(data[,10][which(data[,1] == i) && (data[,2] == i) && (data[,3] == i)], (data[,11][which(data[,1] == i) && (data[,2] == i) && (data[,3] == i)]$p.value
print"
Je ne sais pas si c'est correct, ce que j'ai écrit pour la boucle for et le reste (pval)
hajarita est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/12/2012, 11h16   #6
A. D.
Modératrice
 
Femme Aline Deschamps
Chargée de Statistiques
Inscription : juin 2010
Messages : 464
Détails du profil
Informations personnelles :
Nom : Femme Aline Deschamps
Âge : 25
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Chargée de Statistiques
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : juin 2010
Messages : 464
Points : 1 294
Points : 1 294
Envoyer un message via Skype™ à A. D.
Bonjour,

Je pense qu'il y a une erreur de syntaxe dans la commande que vous avez écrite.
Pour rappel :
Code :
1
2
data [ indices_de_lignes_a_selectionner , indices_de_colonnes_a_selectionner ]
Bonne continuation


Cordialement,

A.D.
__________________

Forum R
Fournir le code utilisé (pensez aux balises code !), les packages nécessaires, ainsi qu'un court mais représentatif extrait du jeu de données et les éventuels messages d'erreur.
Recherche d'informations concernant R : RSiteSearch / tutoriels : http://r.developpez.com/ .

Pensez également au bouton "Résolu" et à voter (en bas à droite des messages) lorsque vous avez obtenu une réponse satisfaisante.
A. D. est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 03h11.


 
 
 
 
Partenaires

Hébergement Web