user7413842
user7413842

Reputation: 21

R: calculating ICC across multiple columns in two dataframes

I am calculating the ICC's for 301 variables of 2 readers. Results are saved in two files with 301 columns each. The first column of file1 (reader1$Var1) corresponds to the first column of file2 (reader2$Var302). I can perform the ICC manually (see below), but I need help to automate this process using apply or a loop. Thank you.

library(irr)
irr::icc()
a= data.frame(reader1$Var1)
b= data.frame(reader2$Var302)
X= data.frame (a,b)
function.ICC <- function (X) {irr::icc(X, model =c("oneway"), type = c("consistency"), unit =("single"), r0 = 0, conf.level = 0.95)}
Results <- function.ICC(X)
Results[7]

Upvotes: 2

Views: 759

Answers (1)

lrnzcig
lrnzcig

Reputation: 3947

A combination of lapply and do.call could do for your case (although there's quite a few options). You don't provide a sample of your data, so I assume you first do a cbind of your 2 dataframes one after the other, so that in this toy example

> X = data.frame(cbind(1:10, 11:20, 21:30, 21:30))
> X
   X1 X2 X3 X4
1   1 11 21 21
2   2 12 22 22
3   3 13 23 23
4   4 14 24 24
5   5 15 25 25
6   6 16 26 26
7   7 17 27 27
8   8 18 28 28
9   9 19 29 29
10 10 20 30 30

you would like to run icc of X1 vs X3 and X2 versus X4. It would be something like the following, relying on function.ICC as you've defined it:

> do.call(cbind, lapply(1:2, function(i) function.ICC(X[,c(i, i+2)])))
           [,1]          [,2]         
subjects   10            10           
raters     2             2            
model      "oneway"      "oneway"     
type       "consistency" "consistency"
unit       "single"      "single"     
icc.name   "ICC(1)"      "ICC(1)"     
value      -0.8320611    -0.4634146   
r0         0             0            
Fvalue     0.09166667    0.3666667    
df1        9             9            
df2        10            10           
p.value    0.9993158     0.926668     
conf.level 0.95          0.95         
lbound     -0.9526347    -0.8231069   
ubound     -0.4669701    0.1848105  

So, for your cbind'ed dataframes with 301 columns, omething similar to this should work:

do.call(cbind, lapply(1:301, function(i) function.ICC(X[,c(i, i+301)])))

Upvotes: 1

Related Questions