簡體   English   中英

ANOVA重復測量多個數據幀r

[英]ANOVA repeated measure on multiple data frames r

我有數百個數據框。 我需要對這些數據幀中的每一個執行 ANOVA RM 測試。 output 應該是一個具有每個 p 值平均值的單個數據幀。

我試過了:

#crate dataframes
df1 <- data.frame(replicate(16,sample(-10:10,10,rep=TRUE)))
df2 <- data.frame(replicate(16,sample(-10:10,10,rep=TRUE)))
df3 <- data.frame(replicate(16,sample(-10:10,10,rep=TRUE)))
Group <- c(rep("A",8),rep("B",8))
Time <- c(rep("before",4),rep("after",4),rep("before",4),rep("after",4))
Name <- rep(rep(1:4, 4))
conds <- data.frame(Name,Time,Group)
#create list
list <- list(df1,df2,df3)

#for loop ANOVA repeated measures
for ( i in list){
  data <- cbind(conds,i)
  t=NULL
  name <- colnames(data)[4:ncol(data)]
  for(i in 4:ncol(data)) { z <- aov(data[,i] ~ Group*Time+Error(Name/(Group*Time)), data=data) 
  sz <- as.list(summary(z))
  t <- as.data.frame(c(t,sz[4]$`Error: Name:Group:Time`[[1]]$`Pr(>F)`[1]))
  t
  }
}
mean(t)

R 作為矢量化語言旨在盡可能避免for循環。 你可以做一個sapply的方法。

當您列出您的數據框時,請使用df1=之類的名稱,這res有助於確定其中哪些已完成計算。

(並且不要將list用作 object 名稱,因為您會感到困惑,因為還有一個list function。此外, datadf和 friends 是“壞”名稱,您可以隨時檢查,使用例如?list如果名稱已經占據。)

list1 <- list(df1=df1, df2=df2, df3=df3)

res <- sapply(list1, function(x) {
  dat <- cbind(conds, x)
  sapply(dat[-(1:3)], function(y) {
    z <- aov(y ~ Group*Time + Error(Name/(Group*Time)), data=dat)
    sz <- summary(z)
    p <- sz$`Error: Name:Group:Time`[[1]][1, 5]
    p
  })
})

從得到的矩陣中,我們采用列均值。

colMeans(res)
#       df1       df2       df3 
# 0.4487419 0.4806528 0.4847789

數據:

set.seed(42)
df1 <- data.frame(replicate(16,sample(-10:10,16,rep=TRUE)))
df2 <- data.frame(replicate(16,sample(-10:10,16,rep=TRUE)))
df3 <- data.frame(replicate(16,sample(-10:10,16,rep=TRUE)))
conds <- data.frame(Name=c(rep("A",8),rep("B",8)), 
                    Time=c(rep("before",4),rep("after",4),
                           rep("before",4),rep("after",4)),
                    Group=rep(1:4, 4))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM