2017-01-26 8 views
0

私は初心者/中級のRユーザーです。私は昨日私がデータセット全体のWilcoxonテストを実行できる素晴らしいコードを見つけました。しかし、エフェクトのサイズを計算するのも好きですし、その関数を既存のコードに追加できないようです。あなたが持っているすべての入力は非常に高く評価されます。既存のループでWilcoxonのエフェクトサイズを計算する

ウィルコクソンループ:

test.fun <- function(data, col) { 

c1 <- combn(unique(data$group),2) 
sigs <- list() 
for(i in 1:ncol(c1)) { 
    sigs[[i]] <- wilcox.test(
        as.numeric(data[data$group == c1[1,i],col]), 
        as.numeric(data[data$group == c1[2,i],col]) 
       ) 
    } 
    names(sigs) <- paste("Group",c1[1,],"by Group",c1[2,]) 

tests <- data.frame(Test=names(sigs), 
        W=unlist(lapply(sigs,function(x) x$statistic)), 
        p=unlist(lapply(sigs,function(x) x$p.value)),row.names=NULL) 


return(tests) 
} 

私は、このコードにペーストしたい機能:事前に

rFromWilcox <-function(wilcoxModel, N){ 
z<- qnorm(wilcoxModel$p.value/2) 
r<- z/ sqrt(N) 
cat(wilcoxModel$data.name, "Effect Size, r = ", r) 
} 
rFromWilcox(wilcoxModel, N) 

おかげで、あなたが必要とする何かがある場合は私に知らせてください。

答えて

0

ここでは、これらの機能を組み合わせた試みを示します。

私は長年の経験で熟練していないと私のプロフィールには注意しないでください - 私のSOに答えたいという私の動機は、a)興味とb)自分の改善です。だから、信じる前に結果を慎重に確認してください。他の誰かが私の間違いを取り除くまで、少なくともそれはあなたを得るでしょう:)。

だから、このことを念頭に置いて:

まずあなたがrFromWilcoxonからcat行を削除する必要があり、そしてちょうどこのようtest.fun変更後r

に置き換えます

test.fun <- function(data, col, group = 'group') { 

    c1 <- combn(unique(data[[group]]),2) 
    N <- nrow(data)/ncol(c1) # Calculates N assuming all groups are equal size 
    sigs <- list() 

    for(i in 1:ncol(c1)) { 
      sigs[[i]] <- wilcox.test(
       as.numeric(data[data[[group]] == c1[1, i], col]), 
       as.numeric(data[data[[group]] == c1[2, i], col]) 
     ) 
    } 


    r <- lapply(sigs, function(i) rFromWilcox(i, N)) # Applies rFromWilcox function 

    names(sigs) <- paste("Group",c1[1,],"by Group",c1[2,]) 

    tests <- data.frame(Test = names(sigs), 
         W = unlist(lapply(sigs,function(x) x$statistic)), 
         p = unlist(lapply(sigs,function(x) x$p.value)),row.names=NULL, 
         r = unlist(r)) 
tests 
} 
また

ないことを私はすべてのグループが等しいサイズであると仮定しました。あなたのグループが不等であれば、私はNを計算し、各組み合わせのforループ内にrFromWilcoxを呼び出すだけでよいと思います。

追加の注記:投稿した元の機能では、テストするグループは「グループ」という列になければなりませんでした。 test.fun(iris, 1, 'Species')は、irisデータセットのSepal.Lengthで 'Species'を使用してテストを実行します。

+0

チャームのように機能しました。どうもありがとう! – Tho

関連する問題