2017-07-14 1 views
1

Tukey post hoc Test in R liefert Ergebnisse wieKann ich die Ergebnisse von TukeyHSD in einer Tabelle anordnen?

  diff   lwr  upr  p adj 
2-1 2.125000e-01 -0.13653578 0.5615358 0.4873403 
3-1 2.250000e-01 -0.12403578 0.5740358 0.4219408 
4-1 3.875000e-01 0.03846422 0.7365358 0.0206341 
5-1 6.875000e-01 0.33846422 1.0365358 0.0000020 
6-1 2.250000e-01 -0.12403578 0.5740358 0.4219408 
3-2 1.250000e-02 -0.31064434 0.3356443 0.9999974 
4-2 1.750000e-01 -0.14814434 0.4981443 0.6147144 
5-2 4.750000e-01 0.15185566 0.7981443 0.0006595 
6-2 1.250000e-02 -0.31064434 0.3356443 0.9999974 
4-3 1.625000e-01 -0.16064434 0.4856443 0.6866539 
5-3 4.625000e-01 0.13935566 0.7856443 0.0009888 
6-3 1.776357e-15 -0.32314434 0.3231443 1.0000000 
5-4 3.000000e-01 -0.02314434 0.6231443 0.0844160 
6-4 -1.625000e-01 -0.48564434 0.1606443 0.6866539 
6-5 -4.625000e-01 -0.78564434 -0.1393557 0.0009888 

Das ist in Ordnung, aber ziemlich schwer zu lesen. Was wäre besser, wenn die Ergebnisse in einer Tabelle mit niedrigerer Diagonale mit den Gruppenfaktoren als Zeilen und Spalten angeordnet werden könnten.

So etwas wie

1 2 3 4 5 6 
1 
2 p 
3 p p 
4 p p p 
5 p p p p 
6 p p p p p 

Wo p die entsprechenden p-Werte sind. Ist das möglich?

Antwort

1

Hier ist mein Vorschlag für eine manuelle Transformation mit der tidyverse. Ich habe dies als eine Funktion eingerahmt, Sie könnten die Metrik ändern, indem Sie etwas anderes als p_adj weiterleiten. Beachten Sie, dass die Eingabe (tbl) ein Datenrahmen ist.

transformTable <- function(tbl, metric) { 
    # Takes table of TurkeyHSD output metrics 
    # and transforms them into a pairwise comparison matrix. 
    # tbl is assumed to be a data.frame or tibble, 
    # var is assumed to be a character string 
    # giving the variable name of the metric in question 
    # (here: "diff", "lwr", "upr", or "p_adj") 
    tbl <- tbl %>% 
    # Split comparison into individual variables 
    mutate(
     Var1 = as.numeric(substr(X, 1, 1)), 
     Var2 = as.numeric(substr(X, 3, 3))) %>% 
    # Only keep relevant fields 
    select(Var1, Var2, matches(metric)) %>% 
    # Filter out NA's 
    filter(!is.na(metric)) %>% 
    # Make into "wide" format using Var2 
    spread_(key = 'Var2', value = metric, fill = '') 

    # Let's change the row names to Var1 
    row.names(tbl) <- tbl$Var1 
    # And drop the Var1 column 
    tbl <- select(tbl, -Var1) 

    return(tbl) 
} 


transformTable(df, 'p_adj') 

output:

  1   2   3   4   5 
2 0.4873403           
3 0.4219408 0.9999974        
4 0.0206341 0.6147144 0.6866539      
5  2e-06 0.0006595 0.0009888 0.084416   
6 0.4219408 0.9999974   1 0.6866539 0.0009888 

reproduzierbaren Datensatz:

df <- structure(list(X = structure(c(1L, 2L, 4L, 7L, 11L, 3L, 5L, 8L, 
12L, 6L, 9L, 13L, 10L, 14L, 15L), .Label = c("2-1", "3-1", "3-2", 
"4-1", "4-2", "4-3", "5-1", "5-2", "5-3", "5-4", "6-1", "6-2", 
"6-3", "6-4", "6-5"), class = "factor"), diff = c(0.213, 0.225, 
0.388, 0.688, 0.225, 0.0125, 0.175, 0.475, 0.0125, 0.163, 0.463, 
1.78e-15, 0.3, -0.163, -0.463), lwr = c(-0.13653578, -0.12403578, 
0.03846422, 0.33846422, -0.12403578, -0.31064434, -0.14814434, 
0.15185566, -0.31064434, -0.16064434, 0.13935566, -0.32314434, 
-0.02314434, -0.48564434, -0.78564434), upr = c(0.5615358, 0.5740358, 
0.7365358, 1.0365358, 0.5740358, 0.3356443, 0.4981443, 0.7981443, 
0.3356443, 0.4856443, 0.7856443, 0.3231443, 0.6231443, 0.1606443, 
-0.1393557), p_adj = c(0.4873403, 0.4219408, 0.0206341, 2e-06, 
0.4219408, 0.9999974, 0.6147144, 0.0006595, 0.9999974, 0.6866539, 
0.0009888, 1, 0.084416, 0.6866539, 0.0009888)), .Names = c("X", 
"diff", "lwr", "upr", "p_adj"), class = "data.frame", row.names = c(NA, 
-15L)) 
Verwandte Themen