2017-07-07 4 views
0

J'ai une boucle qui traverse une trame de données, exécute ttests et stocke la valeur p résultante de chaque test dans une autre trame de données.La boucle ttest non appariée mais non appariée en R fonctionne

Voici la boucle où 'mydata' est l'espace de données sur lequel les tests sont exécutés. 'Mydata' est une trame de données avec 4 colonnes:

df <- mydata 
mydf <- data.frame(c(1:4)) 

# this is the new dataframe being initialized to store my p-values 

row.names(mydf) <- names(df) 
for(i in names(df)){ 
    if(sd(df[[i]]) == 0) { 

    # this prevents the loop from terminating and returning an error when ttests 
    # are run on columns with binary values 

    } else { 
    ttest <- t.test(df[df$Pre==1,][[i]], df[df$Pre==2,][[i]], paired=FALSE) 

    # 'Pre' is the column that groups my data into 
    # distinct cohorts. I am comparing the Pre cohort versus the Post cohort 
    # in these ttests. 

    mydf[i,1] <- ttest$p.value 
    } 
} 
mydf 

Voici ma sortie de mydf pour un non apparié (apparié = FAUX) TTEST:

  c.1.4.        
density 0.3569670 
clust 0.9715987 
Pre  3.0000000 
HC  4.0000000 

Cependant, quand je change apparié = FALSE à apparié = TRUE (pour exécuter un test t apparié), voici mydf:

  c.1.4. 
density  1 
clust  2 
Pre   3 
HC   4 

je suis arrivé cette ligne de ma boucle dans l'isolement en utilisant la première colonne de ma trame de données, « 1 » entre crochets doubles (par paires = TRUE) et il semble produire une valeur p :

ttest <- t.test(df[df$Pre==1,][[1]], df[df$Pre==2,][[1]], paired=TRUE) 
ttest$p.value 
[1] 0.356967 

est Ci-dessous un ensemble de données de l'échantillon que vous pouvez utiliser pour reproduire l'erreur:

  density  clust  Pre HC 
RDHC008A_13 0.47991  0.676825 1 1 
RDHC009A_13 0.49955  0.696441 1 1 
RDHC010A_16 0.491454 0.706507 1 1 
RDHC013A_13 0.442879 0.689118 1 1 
RDHC014A_13 0.453823 0.691603 1 1 
RDHC016A_16 0.481259 0.706978 1 1 
RDHC019A_06 0.515442 0.699514 1 1 
RDHC021A_15 0.449925 0.685202 1 1 
RDHC022A_12 0.461319 0.705446 1 1 
RDHC023A_11 0.468816 0.667698 1 1 
RDHC024A_12 0.515142 0.719474 1 1 
RDHC025A_13 0.496702 0.710877 1 1 
RDHC026A_12 0.477061 0.695061 1 1 
RDHC027A_12 0.515442 0.722269 1 1 
RDHC029A_12 0.406747 0.669998 1 1 
RDHC030A_12 0.476162 0.69219  1 1 
RDHC032B_13 0.50075  0.685474 1 1 
RDHC034B_07 0.525487 0.725558 1 1 
RDHC036B_07 0.468816 0.698904 1 1 
RDHC038B_07 0.470015 0.706668 1 1 
RDHC039B_07 0.511544 0.712818 1 1 
RDHC041A_14 0.551574 0.732983 1 1 
RDHC004C_12 0.486207 0.695121 2 1 
RDHC005C_12 0.505997 0.695598 2 1 
RDHC006C_13 0.487406 0.697044 2 1 
RDHC013C_12 0.41979  0.685518 2 1 
RDHC015C_13 0.297751 0.69632  2 1 
RDHC016C_16 0.463718 0.700011 2 1 
RDHC019C_14 0.508096 0.690071 2 1 
RDHC021C_12 0.448426 0.688265 2 1 
RDHC022C_12 0.468816 0.700968 2 1 
RDHC024C_12 0.515292 0.70664  2 1 
RDHC025C_13 0.473163 0.704231 2 1 
RDHC027C_12 0.518741 0.732939 2 1 
RDHC030C_11 0.489205 0.708174 2 1 

Vous pouvez l'importer en procédant comme suit:

copier les données et le coller dans le guillemets du code ci-dessous dans R:

zz <- "" 

maintenant, affecter les données à un data.frame:Je n'ai aucune idée pourquoi le changement du paramètre 'paired' à TRUE provoquerait que cela se produise. Toute aide/conseil serait très apprécié. Merci - Paul

+0

Ceci semble très inhabituel, vous devriez fournir un [exemple reproductible] (https://stackoverflow.com/questions/5963269/how-to-make-a -great-r-reproducible-example) avec des exemples de données d'entrée que nous pouvons exécuter pour vérifier (il ne doit pas être vos données réelles). On dirait qu'il y a peut-être une faute de frappe ailleurs. – MrFlick

+0

@MrFlick - ok, merci, je vais travailler sur la fourniture de cet exemple – user8271479

+0

Selon [t.test] (https://stat.ethz.ch/R-manual/R-devel/library/stats/html/ t.test.html), quand 'paired = TRUE'' x' et 'y' doivent avoir la même longueur. Il semble que votre test isolé a échoué et que «ttest» ne faisait que montrer une ancienne valeur. – Marcelo

Répondre

0

INITIALISATION la mydf data.frame avec les valeurs 1: 4 ici

mydf <- data.frame(c(1:4)) 

essentiellement la boucle ne fait rien parce que t.test jette une erreur lorsque vous faites PAIRED=TRUE parce que vos deux ensembles de valeurs Aren t ont la même longueur (et ils doivent l'être lors d'un test t apparié.) Vous avez 22 valeurs où Pre == 1 et 13 valeurs où Pre == 2. Vous ne pouvez pas faire un test apparié avec un déséquilibre comme celui-là.

+0

Je sais encore moins sur les statistiques que sur le codage - merci! – user8271479