2017-05-13 2 views
2

Ich habe einen Datensatz mit 1o Fragen (Q1-Q10). Ich möchte P-Werte von paarweisen Stuart-Maxwell-Tests extrahieren und sie in einer Matrix mit Kopfzeilen von Spaltennamen so drucken, dass ich erkennen kann, welcher P-Wert sich auf welchen paarweisen Vergleich bezieht. Ich habe Hilfe von einem Experten erhalten, wie man den Test durchführt und die Ergebnisse extrahiert, und ich habe versucht, die Matrix mit Überschriften zu machen, aber ich scheitere. Ich schätze es, wenn jemand meinen Code unten ändern kann.Wie Matrix der p-Werte für mehrere Stuart-Maxwell-Test in R erhalten? Fragen Sie

data <- data.frame(Q1=sample(1:5, 20, replace=T), 
       Q2=sample(1:5, 20, replace=T), 
       Q3=sample(1:5, 20, replace=T), 
       Q4=sample(1:5, 20, replace=T), 
       Q5=sample(1:5, 20, replace=T), 
       Q6=sample(1:5, 20, replace=T), 
       Q7=sample(1:5, 20, replace=T), 
       Q8=sample(1:5, 20, replace=T), 
       Q9=sample(1:5, 20, replace=T), 
       Q10=sample(1:5, 20,replace=T)) #fake data 
Labels<- names(data) 
# Matrix to store the result 
enter code here 
groups <- unique(Labels) 
result <- matrix(NA, nc=length(groups), nr=length(groups)) 
colnames(result) <- rownames(result) <- groups 
# Loop 
for(g1 in groups) { 
for(g2 in groups) { 
result[ g1, g2 ] <- 
     sapply(labels <-combn(groups, 2, simplify = FALSE), function(i) { 


    require(irr) 

    xtab <- table(data[,i[1]], data[,i[2]]) 
    test <- try(stuart.maxwell.mh(xtab)) 
    ifelse(class(test) == "try-error", NA, test$p) 
}) 



} 

} 

result 

Antwort

2

Sie waren ziemlich nah dran. Sie haben gerade zwei Methoden verwechselt. Sie sollten entweder mit combn oder die doppelte for-loop s verwenden. In Ihrem Fall und basierend auf der Ausgabe möchten Sie for-loop s scheinen leichter:

require(irr) 
data <- data.frame(Q1=sample(1:5, 20, replace=T), 
        Q2=sample(1:5, 20, replace=T), 
        Q3=sample(1:5, 20, replace=T), 
        Q4=sample(1:5, 20, replace=T), 
        Q5=sample(1:5, 20, replace=T), 
        Q6=sample(1:5, 20, replace=T), 
        Q7=sample(1:5, 20, replace=T), 
        Q8=sample(1:5, 20, replace=T), 
        Q9=sample(1:5, 20, replace=T), 
        Q10=sample(1:5, 20,replace=T)) #fake data 

# Loop 
labels<- names(data) 
groups <- unique(labels) 
result <- matrix(NA, nc=length(groups), nr=length(groups)) 
colnames(result) <- labels 
rownames(result) <- labels 

for(g1 in groups) { 
for(g2 in groups) { 

    xtab <- table(data[,g1], data[,g2]) 
    test <- try(stuart.maxwell.mh(xtab), silent = TRUE) 
    pval <- ifelse(class(test) == "try-error", NA, test$p) 
    result[g1, g2] <- pval 

} 
} 

Ausgang:

> result 
      Q1   Q2   Q3  Q4  Q5  Q6   Q7   Q8 
Q1   NA 0.05881900 0.26298902  NA 0.7790233 0.5177394 0.73754470 0.30610257 
Q2 0.0588190   NA 0.58635825  NA 0.1005838 0.3678794 0.17078180 0.05626191 
Q3 0.2629890 0.58635825   NA 0.3173105 0.3916252 0.2541583 0.09984288 0.07472086 
Q4 0.3173105 0.36787944   NA  NA  NA  NA   NA   NA 
Q5 0.7790233 0.10058381 0.39162518 0.2231302  NA 0.3114032 0.14247485 0.17708783 
Q6 0.5177394 0.36787944 0.25415830  NA 0.3114032  NA 0.21636999 1.00000000 
Q7 0.7375447 0.17078180 0.09984288  NA 0.1424749 0.2163700   NA 0.41099506 
Q8 0.3061026 0.05626191 0.07472086 0.3173105 0.1770878 1.0000000 0.41099506   NA 
Q9 0.6712714 0.53408090 0.16832466 0.3173105 0.2110881 0.2635971 0.28933534 0.31414685 
Q10 0.2220359 0.38332585 0.05941603 1.0000000 0.1652989 0.2578472 0.23889094 0.08826479 

#the output is truncated