我有一个基于问卷的数据框,所有参与者都回答了 2 次问卷。在此基础上,形成了一个包含所有参与者和问卷项目的数据框。
数据框如下所示,(每一行都是不同的参与者(具有唯一 ID)。项目“_1”和“_2”代表所有参与者回答(两次)的问卷 1 和问卷 2 的数据。每个项目是一个问题,有20项(问题)):
edited df specific for icc
df <- data.frame(matrix(NA, nrow = 20, ncol = 130))
# Add the column names
colnames(df) <- c(paste0("ID", rep(1:65, each = 2), "_", rep(1:2)))
# Fill the dataframe with random 1's and 0's
df[] <- sample(0:1, size = nrow(df) * ncol(df), replace = TRUE)
# Set the row names
row.names(df) <- paste0("item", 1:20)
# View the dataframe
df
根据每个参与者填写的两份问卷的数据,我正在尝试计算每个项目的 ICC。
但是,目前我只能对整个数据框而不是每个项目执行 ICC。我试过:
icc_items <- function(item, df) {
iccc <- ICC(df[item])
data.frame(
model =iccc$Model,
type = iccc$Type,
lowerbound = iccc$"lower bound"
upperbound = iccc$"upper bound"
p = iccc$p.value,
icc = iccc$ICC,
f = iccc$F.value )}
icc_col_names <- grep("^item", names(df), value = TRUE)
icc_col_names_list <- split(icc_col_names, factor(gsub("_[1|2]$", "", icc_col_names), levels = unique(gsub("_[1|2]$", "", icc_col_names))))
icc_items_list <- lapply(icc_col_names_list, \(item)
icc_items(item, df))
icc_items_df <- do.call(rbind, icc_items_list)
icc_items_df
上面的代码本来是用来计算不同的测试的,但是我调整了它以适应ICC,或者至少我试过了,但是它给了我一个错误。
在这里,我对数据进行子集化以仅获取与项目名称匹配的列。
names(df)[startsWith(names(df), "item1_")]
[1] "item1_1" "item1_2"
然后我将日期子集化为只有那些用于
icc
计算的列。然后将结果存储到数据框中。我包括了每个变量,但是任何不希望出现在最终结果中的变量都可以在icc_item
函数中注释掉。我还为 Item
添加了一列,以在最终结果中包含它的名称。
在我的循环中,我通过删除下划线后面的计数器(即
Item##_1
或Item##_2
)并仅保留项目名称(即Item##_
)来遍历项目。这样,我们就不会遍历每一列的项目。
library(irr)
#> Loading required package: lpSolve
icc_item <- function(item, df) {
items <- names(df)[startsWith(names(df), item)]
iccc <- icc(df[items])
data.frame(
Item = gsub("_", "", item),
Unit = iccc$unit,
Model = iccc$model,
Type = iccc$type,
Subjects = iccc$subjects,
Raters = iccc$raters,
ICC_Name = iccc$icc.name,
ICC_Value = iccc$value,
R_zero = iccc$r0,
f_value = iccc$Fvalue,
p_value = iccc$p.value,
Conf_level = iccc$conf.level,
LowerBound = iccc$lbound,
UpperBound = iccc$ubound
)
}
do.call(rbind, lapply(unique(gsub("_\\d+$", "_", names(df)[-1])),
function(item) icc_item(item, df)))
#> Item Unit Model Type Subjects Raters ICC_Name ICC_Value
#> 1 item1 single oneway consistency 51 2 ICC(1) 0.210110585
#> 2 item2 single oneway consistency 51 2 ICC(1) 0.059561129
#> 3 item3 single oneway consistency 51 2 ICC(1) -0.050583658
#> 4 item4 single oneway consistency 51 2 ICC(1) -0.009693053
#> 5 item5 single oneway consistency 51 2 ICC(1) 0.065420561
#> 6 item6 single oneway consistency 51 2 ICC(1) 0.015748031
#> 7 item7 single oneway consistency 51 2 ICC(1) -0.170960187
#> 8 item8 single oneway consistency 51 2 ICC(1) 0.217527387
#> 9 item9 single oneway consistency 51 2 ICC(1) -0.010101010
#> 10 item10 single oneway consistency 51 2 ICC(1) -0.050583658
#> 11 item11 single oneway consistency 51 2 ICC(1) -0.206225681
#> 12 item12 single oneway consistency 51 2 ICC(1) 0.068322981
#> 13 item13 single oneway consistency 51 2 ICC(1) 0.107835531
#> 14 item14 single oneway consistency 51 2 ICC(1) -0.257861635
#> 15 item15 single oneway consistency 51 2 ICC(1) -0.170960187
#> 16 item16 single oneway consistency 51 2 ICC(1) -0.170960187
#> 17 item17 single oneway consistency 51 2 ICC(1) 0.065420561
#> 18 item18 single oneway consistency 51 2 ICC(1) 0.065420561
#> 19 item19 single oneway consistency 51 2 ICC(1) -0.055512119
#> 20 item20 single oneway consistency 51 2 ICC(1) 0.068322981
#> R_zero f_value p_value Conf_level LowerBound UpperBound
#> 1 0 1.5320000 0.06622934 0.95 -0.06518802 0.45630382
#> 2 0 1.1266667 0.33631555 0.95 -0.21550364 0.32656452
#> 3 0 0.9037037 0.63942044 0.95 -0.31779681 0.22481267
#> 4 0 0.9808000 0.52695053 0.95 -0.28053345 0.26330168
#> 5 0 1.1400000 0.32128434 0.95 -0.20988735 0.33180948
#> 6 0 1.0320000 0.45529397 0.95 -0.25692969 0.28681788
#> 7 0 0.7080000 0.88804823 0.95 -0.42290398 0.10628753
#> 8 0 1.5560000 0.05951290 0.95 -0.05744511 0.46243585
#> 9 0 0.9800000 0.52809859 0.95 -0.28090929 0.26292193
#> 10 0 0.9037037 0.63942044 0.95 -0.31779681 0.22481267
#> 11 0 0.6580645 0.92951155 0.95 -0.45246363 0.07000525
#> 12 0 1.1466667 0.31394054 0.95 -0.20709863 0.33440144
#> 13 0 1.2417391 0.22185838 0.95 -0.16868338 0.36929158
#> 14 0 0.5900000 0.96800884 0.95 -0.49479045 0.01552848
#> 15 0 0.7080000 0.88804823 0.95 -0.42290398 0.10628753
#> 16 0 0.7080000 0.88804823 0.95 -0.42290398 0.10628753
#> 17 0 1.1400000 0.32128434 0.95 -0.20988735 0.33180948
#> 18 0 1.1400000 0.32128434 0.95 -0.20988735 0.33180948
#> 19 0 0.8948148 0.65240456 0.95 -0.32223304 0.22011490
#> 20 0 1.1466667 0.31394054 0.95 -0.20709863 0.33440144
创建于 2023-05-05 与 reprex v2.0.2