Read in the data, and split files into chart review and analysis data entries.
## Read in data
analysis_reliab <- read.csv("~/Library/CloudStorage/Box-Box/CLA RSS Data Sharing/577565_McGrattan_SMA/BABYVFSSIMP/data/SMA_clean_reliability_data_20250811.csv")
analysis <- read.csv("~/Library/CloudStorage/Box-Box/CLA RSS Data Sharing/577565_McGrattan_SMA/BABYVFSSIMP/data/SMA_clean_analysis_data_20250811.csv")
# Kinematics
sma_reliability <- read.csv("~/Library/CloudStorage/Box-Box/CLA RSS Data Sharing/1022295_McGrattan_SMA_KINEMATICS/SMA_Data/SMA_DAT_reliab_last20250811.csv")
#use all reliability ratings for BABYVFSSImp
#subset to capture only the consensus scores
analysis_con <- analysis %>%
filter(ID %in% analysis_reliab$ID)
List the reliability cases (n = 59) to ensure everyone is included:
analysis_reliab %>%
select(studyid_clean, rater_clean) %>%
group_by(studyid_clean) %>%
mutate(raternum = rep(1:2, times = length(unique(studyid_clean)))) %>%
pivot_wider(names_from = raternum,
values_from = rater_clean) %>%
kable()
Create function to calculate proportion of patients who were given each consensus score across each component.
#function for tables
OIprop.table <- function(data, var){
temp <- substitute(var)
data %>%
#filter(!is.na({{var}})) %>%
group_by({{var}}) %>%
summarize(count=n()) %>%
ungroup() %>%
mutate(proportion = round(count/sum(count), 2)) %>%
kable(col.names=c(paste0("Component ", gsub("oi_", "", temp), " Consensus Rating"), "Count", "Proportion"))
}
Create a function to pull out expected and actual frequencies from Kappa and Gwet statistic for pooling:
First, clean up scores and rater ids to create agreement tables, then subset to only include data from cases both rated.
#replace any INF with NA
analysis_reliab[analysis_reliab=="Inf"] <- NA
analysis_reliab[analysis_reliab=="-Inf"] <- NA
analysis_con[analysis_con=="Inf"] <- NA
analysis_con[analysis_con=="-Inf"] <- NA
Set up function to return the agreement tables
pulloutrating <- function(data, component) {
data %>%
mutate(temp = factor({{component}})) %>%
select(studyid_clean, rater_clean, temp) %>%
pivot_wider(names_from = rater_clean,
values_from = temp)
}
The percent agreement as well as three reliability scores are reported below. Each of the reliability estimates calculate the proportion of agreement between raters relative to the likelihood of them agreeing by chance (e.g., the marginal probabilities of agreement). Kappa is traditionally used, and may be most appropriate for most of this data, as responses are more evenly distributed across possible scores. Gwet’s agreement coefficient is also presented as a comparison in cases where Kappa may not be a good fit due to the skew of responses.
Percent Agreement is also reported. This will be higher than Kappa when marginal totals are skewed (e.g., all videos were rated the same way). This is straight agreement, not penalized by the probability raters might agree by chance.
Agreement Coefficient is an alternative to Kappa that may be more appropriate when the responses are highly skewed (e.g., the prevalence of certain ratings is low). This was developed by Gwet (2010) and uses a different method for penalizing agreement due to chance.
Kappa treats data as categorical, and only complete agreements “count” as agreement.
Weighted Kappa, by contrast, will weight disagreements based on how close they were, with closer values counting more than farther apart ratings. By default, equal-spaced or linear weights are used. Weighted Kappa values may be more appropriate for ordinal ratings with 3+ categories.
WHAT TO USE HERE: For this data:
Both types of Kappa can be interpreted based on the static Cohen guidelines (I believe these are the same as the Landis-Koch). Interpret AC1 using the tables - the appropriate Landis-Koch category the highest where CumProb is 0.95 or higher.
Table of Rater Agreement:
c1r <- pulloutrating(analysis_reliab, oi_1)
ftable(c1r$HM, c1r$KLM, dnn = c("HM", "KLM")) %>%
pander()
KLM | 0 | 1 | 2 | |
HM | ||||
0 | 16 | 0 | 0 | |
1 | 0 | 1 | 0 | |
2 | 1 | 0 | 10 |
Percentage Agreement
data.frame(sum(c1r$HM == c1r$KLM, na.rm=T)/nrow(na.omit(c1r))*100) %>%
kable(col.names = "Percent Agreement", digits=1, align = "l")
Percent Agreement |
---|
96.4 |
IRR coefficients:
table <- table(c1r$HM, c1r$KLM, dnn = c("H", "W"))
weights <- Kappa(table)$Weights
bind_rows("Agreement Coefficient" = gwet.ac1.table(table),
"Kappa" = kappa2.table(table),
"Weighted Kappa" = kappa2.table(table, weights=weights), .id="Type") %>%
kable(digits=3)
Type | coeff.name | coeff.val | coeff.se | coeff.ci | coeff.pval |
---|---|---|---|---|---|
Agreement Coefficient | Gwet’s AC1 | 0.952 | 0.047 | (0.855,1) | 0e+00 |
Kappa | Cohen’s Kappa | 0.930 | 0.069 | (0.789,1) | 1.479e-13 |
Weighted Kappa | Cohen’s Kappa | 0.925 | 0.073 | (0.775,1) | 7.738e-13 |
c1wk <- kappa2.table(table, weights=weights)
Interpreting AC1: Gwet recommends to “retain an agreement strength level that is associated with ComProb that exceeds 0.95.”
ac1 <- gwet.ac1.raw(na.omit(c1r[,-1]))$est
landis.koch.bf(ac1$coeff.val, ac1$coeff.se) %>%
kable()
Landis-Koch | CumProb | |
---|---|---|
(0.8 to 1) | Almost Perfect | 0.99908 |
(0.6 to 0.8) | Substantial | 1 |
(0.4 to 0.6) | Moderate | 1 |
(0.2 to 0.4) | Fair | 1 |
(0 to 0.2) | Slight | 1 |
(-1 to 0) | Poor | 1 |
Consensus Agreement:
OIprop.table(analysis_con, oi_1)
Component 1 Consensus Rating | Count | Proportion |
---|---|---|
0 | 16 | 0.27 |
1 | 1 | 0.02 |
2 | 14 | 0.24 |
NA | 28 | 0.47 |
Table of Rater Agreement:
c2r <- pulloutrating(analysis_reliab, oi_2)
ftable(c2r$HM, c2r$KLM, dnn = c("HM", "KLM")) %>%
pander()
KLM | 2 | 3 | 4 | 5 | 6 | 7 | |
HM | |||||||
2 | 1 | 0 | 0 | 0 | 0 | 0 | |
3 | 1 | 1 | 2 | 0 | 0 | 0 | |
4 | 0 | 0 | 2 | 0 | 0 | 1 | |
5 | 0 | 0 | 1 | 1 | 0 | 0 | |
6 | 0 | 0 | 1 | 0 | 4 | 0 | |
7 | 0 | 1 | 0 | 0 | 0 | 11 |
Percentage Agreement
data.frame(sum(c2r$HM == c2r$KLM, na.rm=T)/nrow(na.omit(c2r))*100) %>%
kable(col.names = "Percent Agreement", digits=1, align = "l")
Percent Agreement |
---|
74.1 |
IRR coefficients:
table <- table(c2r$HM, c2r$KLM, dnn = c("H", "W"))
weights <- Kappa(table)$Weights
bind_rows("Agreement Coefficient" = gwet.ac1.table(table),
"Kappa" = kappa2.table(table),
"Weighted Kappa" = kappa2.table(table, weights=weights), .id="Type") %>%
kable(digits=3)
Type | coeff.name | coeff.val | coeff.se | coeff.ci | coeff.pval |
---|---|---|---|---|---|
Agreement Coefficient | Gwet’s AC1 | 0.697 | 0.100 | (0.49,0.903) | 2.28e-07 |
Kappa | Cohen’s Kappa | 0.647 | 0.106 | (0.429,0.865) | 1.905e-06 |
Weighted Kappa | Cohen’s Kappa | 0.733 | 0.104 | (0.518,0.947) | 1.902e-07 |
c2wk <- kappa2.table(table, weights=weights)
Interpreting AC1: Gwet recommends to “retain an agreement strength level that is associated with ComProb that exceeds 0.95.”
ac1 <- gwet.ac1.raw(na.omit(c2r[,-1]))$est
landis.koch.bf(ac1$coeff.val, ac1$coeff.se) %>%
kable()
Landis-Koch | CumProb | |
---|---|---|
(0.8 to 1) | Almost Perfect | 0.15456 |
(0.6 to 0.8) | Substantial | 0.82712 |
(0.4 to 0.6) | Moderate | 0.99813 |
(0.2 to 0.4) | Fair | 1 |
(0 to 0.2) | Slight | 1 |
(-1 to 0) | Poor | 1 |
Consensus Agreement:
OIprop.table(analysis_con, oi_2)
Component 2 Consensus Rating | Count | Proportion |
---|---|---|
2 | 1 | 0.02 |
3 | 2 | 0.03 |
4 | 8 | 0.14 |
5 | 1 | 0.02 |
6 | 4 | 0.07 |
7 | 15 | 0.25 |
NA | 28 | 0.47 |
Table of Rater Agreement:
c3r <- pulloutrating(analysis_reliab, oi_3)
ftable(c3r$HM, c3r$KLM, dnn = c("HM", "KLM")) %>%
pander()
KLM | 0 | 1 | 2 | |
HM | ||||
0 | 0 | 5 | 0 | |
1 | 0 | 11 | 0 | |
2 | 0 | 0 | 13 |
Percentage Agreement
data.frame(sum(c3r$HM == c3r$KLM, na.rm=T)/nrow(na.omit(c3r))*100) %>%
kable(col.names = "Percent Agreement", digits=1, align = "l")
Percent Agreement |
---|
82.8 |
IRR coefficients:
table <- table(c3r$HM, c3r$KLM, dnn = c("H", "W"))
weights <- Kappa(table)$Weights
bind_rows("Agreement Coefficient" = gwet.ac1.table(table),
"Kappa" = kappa2.table(table),
"Weighted Kappa" = kappa2.table(table, weights=weights), .id="Type") %>%
kable(digits=3)
Type | coeff.name | coeff.val | coeff.se | coeff.ci | coeff.pval |
---|---|---|---|---|---|
Agreement Coefficient | Gwet’s AC1 | 0.758 | 0.103 | (0.548,0.968) | 4.918e-08 |
Kappa | Cohen’s Kappa | 0.708 | 0.100 | (0.502,0.913) | 1.149e-07 |
Weighted Kappa | Cohen’s Kappa | 0.742 | 0.081 | (0.575,0.908) | 7.049e-10 |
c3wk <- kappa2.table(table, weights=weights)
Interpreting AC1: Gwet recommends to “retain an agreement strength level that is associated with ComProb that exceeds 0.95.”
ac1 <- gwet.ac1.raw(na.omit(c3r[,-1]))$est
landis.koch.bf(ac1$coeff.val, ac1$coeff.se) %>%
kable()
Landis-Koch | CumProb | |
---|---|---|
(0.8 to 1) | Almost Perfect | 0.33722 |
(0.6 to 0.8) | Substantial | 0.93397 |
(0.4 to 0.6) | Moderate | 0.99969 |
(0.2 to 0.4) | Fair | 1 |
(0 to 0.2) | Slight | 1 |
(-1 to 0) | Poor | 1 |
Consensus Agreement:
OIprop.table(analysis_con, oi_3)
Component 3 Consensus Rating | Count | Proportion |
---|---|---|
0 | 3 | 0.05 |
1 | 16 | 0.27 |
2 | 12 | 0.20 |
NA | 28 | 0.47 |
Table of Rater Agreement:
c4r <- pulloutrating(analysis_reliab, oi_4)
ftable(c4r$HM, c4r$KLM, dnn = c("HM", "KLM")) %>%
pander()
KLM | 2 | |
HM | ||
2 | 57 |
Percentage Agreement
data.frame(sum(c4r$HM == c4r$KLM, na.rm=T)/nrow(na.omit(c4r))*100) %>%
kable(col.names = "Percent Agreement", digits=1, align = "l")
Percent Agreement |
---|
100 |
IRR coefficients:
table <- table(c4r$HM, c4r$KLM, dnn = c("H", "W"))
weights <- Kappa(table)$Weights
bind_rows("Agreement Coefficient" = gwet.ac1.table(table),
"Kappa" = kappa2.table(table),
"Weighted Kappa" = kappa2.table(table, weights=weights), .id="Type") %>%
kable(digits=3)
Type | coeff.name | coeff.val | coeff.se | coeff.ci | coeff.pval |
---|---|---|---|---|---|
Agreement Coefficient | Gwet’s AC1 | NaN | NaN | (NaN,NaN) | NaN |
Kappa | Cohen’s Kappa | NaN | NaN | (NaN,NaN) | NaN |
Weighted Kappa | Cohen’s Kappa | NaN | NaN | (NaN,NaN) | NaN |
c4wk <- kappa2.table(table, weights=weights)
Interpreting AC1: Gwet recommends to “retain an agreement strength level that is associated with ComProb that exceeds 0.95.”
ac1 <- gwet.ac1.raw(na.omit(c4r[,-1]))$est
landis.koch.bf(ac1$coeff.val, ac1$coeff.se) %>%
kable()
Landis-Koch | CumProb | |
---|---|---|
(0.8 to 1) | Almost Perfect | NaN |
(0.6 to 0.8) | Substantial | NaN |
(0.4 to 0.6) | Moderate | NaN |
(0.2 to 0.4) | Fair | NaN |
(0 to 0.2) | Slight | NaN |
(-1 to 0) | Poor | NaN |
Consensus Agreement:
OIprop.table(analysis_con, oi_4)
Component 4 Consensus Rating | Count | Proportion |
---|---|---|
2 | 58 | 0.98 |
NA | 1 | 0.02 |
Table of Rater Agreement:
c5r <- pulloutrating(analysis_reliab, oi_5)
ftable(c5r$HM, c5r$KLM, dnn = c("HM", "KLM")) %>%
pander()
KLM | 0 | 2 | 3 | |
HM | ||||
0 | 2 | 5 | 0 | |
2 | 1 | 46 | 0 | |
3 | 1 | 1 | 3 |
Percentage Agreement
data.frame(sum(c5r$HM == c5r$KLM, na.rm=T)/nrow(na.omit(c5r))*100) %>%
kable(col.names = "Percent Agreement", digits=1, align = "l")
Percent Agreement |
---|
86.4 |
IRR coefficients:
table <- table(c5r$HM, c5r$KLM, dnn = c("H", "W"))
weights <- Kappa(table)$Weights
bind_rows("Agreement Coefficient" = gwet.ac1.table(table),
"Kappa" = kappa2.table(table),
"Weighted Kappa" = kappa2.table(table, weights=weights), .id="Type") %>%
kable(digits=3)
Type | coeff.name | coeff.val | coeff.se | coeff.ci | coeff.pval |
---|---|---|---|---|---|
Agreement Coefficient | Gwet’s AC1 | 0.842 | 0.055 | (0.732,0.952) | 0e+00 |
Kappa | Cohen’s Kappa | 0.525 | 0.138 | (0.249,0.801) | 3.352e-04 |
Weighted Kappa | Cohen’s Kappa | 0.487 | 0.154 | (0.179,0.795) | 2.45e-03 |
c5wk <- kappa2.table(table, weights=weights)
Interpreting AC1: Gwet recommends to “retain an agreement strength level that is associated with ComProb that exceeds 0.95.”
ac1 <- gwet.ac1.raw(na.omit(c5r[,-1]))$est
landis.koch.bf(ac1$coeff.val, ac1$coeff.se) %>%
kable()
Landis-Koch | CumProb | |
---|---|---|
(0.8 to 1) | Almost Perfect | 0.77537 |
(0.6 to 0.8) | Substantial | 0.99999 |
(0.4 to 0.6) | Moderate | 1 |
(0.2 to 0.4) | Fair | 1 |
(0 to 0.2) | Slight | 1 |
(-1 to 0) | Poor | 1 |
Consensus Agreement:
OIprop.table(analysis_con, oi_5)
Component 5 Consensus Rating | Count | Proportion |
---|---|---|
0 | 10 | 0.17 |
2 | 46 | 0.78 |
3 | 3 | 0.05 |
Table of Rater Agreement:
c6r <- pulloutrating(analysis_reliab, oi_6)
ftable(c6r$HM, c6r$KLM, dnn = c("HM", "KLM")) %>%
pander()
KLM | 0 | 1 | 2 | |
HM | ||||
0 | 19 | 7 | 3 | |
1 | 1 | 4 | 2 | |
2 | 4 | 1 | 16 |
Percentage Agreement
data.frame(sum(c6r$HM == c6r$KLM, na.rm=T)/nrow(na.omit(c6r))*100) %>%
kable(col.names = "Percent Agreement", digits=1, align = "l")
Percent Agreement |
---|
68.4 |
IRR coefficients:
table <- table(c6r$HM, c6r$KLM, dnn = c("H", "W"))
weights <- Kappa(table)$Weights
bind_rows("Agreement Coefficient" = gwet.ac1.table(table),
"Kappa" = kappa2.table(table),
"Weighted Kappa" = kappa2.table(table, weights=weights), .id="Type") %>%
kable(digits=3)
Type | coeff.name | coeff.val | coeff.se | coeff.ci | coeff.pval |
---|---|---|---|---|---|
Agreement Coefficient | Gwet’s AC1 | 0.542 | 0.091 | (0.359,0.725) | 1.996e-07 |
Kappa | Cohen’s Kappa | 0.494 | 0.094 | (0.305,0.683) | 2.583e-06 |
Weighted Kappa | Cohen’s Kappa | 0.546 | 0.097 | (0.352,0.741) | 6.27e-07 |
c6wk <- kappa2.table(table, weights=weights)
Interpreting AC1: Gwet recommends to “retain an agreement strength level that is associated with ComProb that exceeds 0.95.”
ac1 <- gwet.ac1.raw(na.omit(c6r[,-1]))$est
landis.koch.bf(ac1$coeff.val, ac1$coeff.se) %>%
kable()
Landis-Koch | CumProb | |
---|---|---|
(0.8 to 1) | Almost Perfect | 0.00261 |
(0.6 to 0.8) | Substantial | 0.26563 |
(0.4 to 0.6) | Moderate | 0.93834 |
(0.2 to 0.4) | Fair | 0.9999 |
(0 to 0.2) | Slight | 1 |
(-1 to 0) | Poor | 1 |
Consensus Agreement:
OIprop.table(analysis_con, oi_6)
Component 6 Consensus Rating | Count | Proportion |
---|---|---|
0 | 25 | 0.42 |
1 | 11 | 0.19 |
2 | 23 | 0.39 |
Table of Rater Agreement:
c7r <- pulloutrating(analysis_reliab, oi_7)
ftable(c7r$HM, c7r$KLM, dnn = c("HM", "KLM")) %>%
pander()
KLM | 0 | 1 | 2 | 3 | |
HM | |||||
0 | 16 | 2 | 5 | 0 | |
1 | 1 | 7 | 5 | 0 | |
2 | 1 | 1 | 9 | 1 | |
3 | 1 | 0 | 5 | 3 |
Percentage Agreement
data.frame(sum(c7r$HM == c7r$KLM, na.rm=T)/nrow(na.omit(c7r))*100) %>%
kable(col.names = "Percent Agreement", digits=1, align = "l")
Percent Agreement |
---|
61.4 |
IRR coefficients:
table <- table(c7r$HM, c7r$KLM, dnn = c("H", "W"))
weights <- Kappa(table)$Weights
bind_rows("Agreement Coefficient" = gwet.ac1.table(table),
"Kappa" = kappa2.table(table),
"Weighted Kappa" = kappa2.table(table, weights=weights), .id="Type") %>%
kable(digits=3)
Type | coeff.name | coeff.val | coeff.se | coeff.ci | coeff.pval |
---|---|---|---|---|---|
Agreement Coefficient | Gwet’s AC1 | 0.494 | 0.085 | (0.323,0.665) | 3.363e-07 |
Kappa | Cohen’s Kappa | 0.468 | 0.084 | (0.3,0.637) | 7.462e-07 |
Weighted Kappa | Cohen’s Kappa | 0.551 | 0.084 | (0.382,0.72) | 2.121e-08 |
c7wk <- kappa2.table(table, weights=weights)
Interpreting AC1: Gwet recommends to “retain an agreement strength level that is associated with ComProb that exceeds 0.95.”
ac1 <- gwet.ac1.raw(na.omit(c7r[,-1]))$est
landis.koch.bf(ac1$coeff.val, ac1$coeff.se) %>%
kable()
Landis-Koch | CumProb | |
---|---|---|
(0.8 to 1) | Almost Perfect | 0.00019 |
(0.6 to 0.8) | Substantial | 0.10966 |
(0.4 to 0.6) | Moderate | 0.86285 |
(0.2 to 0.4) | Fair | 0.99968 |
(0 to 0.2) | Slight | 1 |
(-1 to 0) | Poor | 1 |
Consensus Agreement:
OIprop.table(analysis_con, oi_7)
Component 7 Consensus Rating | Count | Proportion |
---|---|---|
0 | 26 | 0.44 |
1 | 11 | 0.19 |
2 | 15 | 0.25 |
3 | 7 | 0.12 |
Table of Rater Agreement:
c8r <- pulloutrating(analysis_reliab, oi_8)
ftable(c8r$HM, c8r$KLM, dnn = c("HM", "KLM")) %>%
pander()
KLM | 0 | 1 | 2 | |
HM | ||||
0 | 18 | 4 | 3 | |
1 | 2 | 4 | 2 | |
2 | 1 | 4 | 19 |
Percentage Agreement
data.frame(sum(c8r$HM == c8r$KLM, na.rm=T)/nrow(na.omit(c8r))*100) %>%
kable(col.names = "Percent Agreement", digits=1, align = "l")
Percent Agreement |
---|
71.9 |
IRR coefficients:
table <- table(c8r$HM, c8r$KLM, dnn = c("H", "W"))
weights <- Kappa(table)$Weights
bind_rows("Agreement Coefficient" = gwet.ac1.table(table),
"Kappa" = kappa2.table(table),
"Weighted Kappa" = kappa2.table(table, weights=weights), .id="Type") %>%
kable(digits=3)
Type | coeff.name | coeff.val | coeff.se | coeff.ci | coeff.pval |
---|---|---|---|---|---|
Agreement Coefficient | Gwet’s AC1 | 0.590 | 0.089 | (0.412,0.769) | 1.521e-08 |
Kappa | Cohen’s Kappa | 0.556 | 0.089 | (0.378,0.734) | 5.906e-08 |
Weighted Kappa | Cohen’s Kappa | 0.639 | 0.084 | (0.471,0.806) | 3.106e-10 |
c8wk <- kappa2.table(table, weights=weights)
Interpreting AC1: Gwet recommends to “retain an agreement strength level that is associated with ComProb that exceeds 0.95.”
ac1 <- gwet.ac1.raw(na.omit(c8r[,-1]))$est
landis.koch.bf(ac1$coeff.val, ac1$coeff.se) %>%
kable()
Landis-Koch | CumProb | |
---|---|---|
(0.8 to 1) | Almost Perfect | 0.01004 |
(0.6 to 0.8) | Substantial | 0.45793 |
(0.4 to 0.6) | Moderate | 0.98273 |
(0.2 to 0.4) | Fair | 0.99999 |
(0 to 0.2) | Slight | 1 |
(-1 to 0) | Poor | 1 |
Consensus Agreement:
OIprop.table(analysis_con, oi_8)
Component 8 Consensus Rating | Count | Proportion |
---|---|---|
0 | 25 | 0.42 |
1 | 11 | 0.19 |
2 | 23 | 0.39 |
Table of Rater Agreement:
c9r <- pulloutrating(analysis_reliab, oi_9)
ftable(c9r$HM, c9r$KLM, dnn = c("HM", "KLM")) %>%
pander()
KLM | 0 | 1 | 2 | 3 | |
HM | |||||
0 | 3 | 1 | 2 | 0 | |
1 | 0 | 3 | 3 | 0 | |
2 | 3 | 2 | 29 | 0 | |
3 | 1 | 1 | 4 | 4 |
Percentage Agreement
data.frame(sum(c9r$HM == c9r$KLM, na.rm=T)/nrow(na.omit(c9r))*100) %>%
kable(col.names = "Percent Agreement", digits=1, align = "l")
Percent Agreement |
---|
69.6 |
IRR coefficients:
table <- table(c9r$HM, c9r$KLM, dnn = c("H", "W"))
weights <- Kappa(table)$Weights
bind_rows("Agreement Coefficient" = gwet.ac1.table(table),
"Kappa" = kappa2.table(table),
"Weighted Kappa" = kappa2.table(table, weights=weights), .id="Type") %>%
kable(digits=3)
Type | coeff.name | coeff.val | coeff.se | coeff.ci | coeff.pval |
---|---|---|---|---|---|
Agreement Coefficient | Gwet’s AC1 | 0.629 | 0.079 | (0.471,0.787) | 8.897e-11 |
Kappa | Cohen’s Kappa | 0.447 | 0.104 | (0.239,0.654) | 6.889e-05 |
Weighted Kappa | Cohen’s Kappa | 0.433 | 0.116 | (0.201,0.664) | 4.349e-04 |
c9wk <- kappa2.table(table, weights=weights)
Interpreting AC1: Gwet recommends to “retain an agreement strength level that is associated with ComProb that exceeds 0.95.”
ac1 <- gwet.ac1.raw(na.omit(c9r[,-1]))$est
landis.koch.bf(ac1$coeff.val, ac1$coeff.se) %>%
kable()
Landis-Koch | CumProb | |
---|---|---|
(0.8 to 1) | Almost Perfect | 0.01572 |
(0.6 to 0.8) | Substantial | 0.64327 |
(0.4 to 0.6) | Moderate | 0.99805 |
(0.2 to 0.4) | Fair | 1 |
(0 to 0.2) | Slight | 1 |
(-1 to 0) | Poor | 1 |
Consensus Agreement:
OIprop.table(analysis_con, oi_9)
Component 9 Consensus Rating | Count | Proportion |
---|---|---|
0 | 4 | 0.07 |
1 | 5 | 0.08 |
2 | 41 | 0.69 |
3 | 9 | 0.15 |
Table of Rater Agreement:
c10r <- pulloutrating(analysis_reliab, oi_10)
c10r$HM <- factor(c10r$HM, levels=0:3)
c10r$KLM <- factor(c10r$KLM, levels=0:3)
ftable(c10r$HM, c10r$KLM, dnn = c("HM", "KLM")) %>%
pander()
KLM | 0 | 1 | 2 | 3 | |
HM | |||||
0 | 6 | 8 | 0 | 0 | |
1 | 0 | 18 | 6 | 0 | |
2 | 0 | 4 | 8 | 2 | |
3 | 1 | 0 | 3 | 0 |
Percentage Agreement
data.frame(sum(c10r$HM == c10r$KLM, na.rm=T)/nrow(na.omit(c10r))*100) %>%
kable(col.names = "Percent Agreement", digits=1, align = "l")
Percent Agreement |
---|
57.1 |
IRR coefficients:
table <- table(c10r$HM, c10r$KLM, dnn = c("H", "W"))
weights <- Kappa(table)$Weights
bind_rows("Agreement Coefficient" = gwet.ac1.table(table),
"Kappa" = kappa2.table(table),
"Weighted Kappa" = kappa2.table(table, weights=weights), .id="Type") %>%
kable(digits=3)
Type | coeff.name | coeff.val | coeff.se | coeff.ci | coeff.pval |
---|---|---|---|---|---|
Agreement Coefficient | Gwet’s AC1 | 0.452 | 0.087 | (0.278,0.626) | 2.953e-06 |
Kappa | Cohen’s Kappa | 0.351 | 0.094 | (0.163,0.539) | 4.293e-04 |
Weighted Kappa | Cohen’s Kappa | 0.458 | 0.084 | (0.29,0.627) | 1.196e-06 |
c10wk <- kappa2.table(table, weights=weights)
Interpreting AC1: Gwet recommends to “retain an agreement strength level that is associated with ComProb that exceeds 0.95.”
ac1 <- gwet.ac1.raw(na.omit(c10r[,-1]))$est
landis.koch.bf(ac1$coeff.val, ac1$coeff.se) %>%
kable()
Landis-Koch | CumProb | |
---|---|---|
(0.8 to 1) | Almost Perfect | 4e-05 |
(0.6 to 0.8) | Substantial | 0.04587 |
(0.4 to 0.6) | Moderate | 0.72432 |
(0.2 to 0.4) | Fair | 0.998 |
(0 to 0.2) | Slight | 1 |
(-1 to 0) | Poor | 1 |
Consensus Agreement:
OIprop.table(analysis_con, oi_10)
Component 10 Consensus Rating | Count | Proportion |
---|---|---|
0 | 6 | 0.10 |
1 | 29 | 0.49 |
2 | 18 | 0.31 |
3 | 6 | 0.10 |
Table of Rater Agreement:
c11r <- pulloutrating(analysis_reliab, oi_11)
ftable(c11r$HM, c11r$KLM, dnn = c("HM", "KLM")) %>%
pander()
KLM | 0 | 1 | 2 | 3 | 4 | |
HM | ||||||
0 | 5 | 0 | 2 | 0 | 1 | |
1 | 0 | 1 | 0 | 0 | 1 | |
2 | 1 | 0 | 17 | 1 | 2 | |
3 | 0 | 0 | 0 | 0 | 0 | |
4 | 1 | 0 | 4 | 3 | 18 |
Percentage Agreement
data.frame(sum(c11r$HM == c11r$KLM, na.rm=T)/nrow(na.omit(c11r))*100) %>%
kable(col.names = "Percent Agreement", digits=1, align = "l")
Percent Agreement |
---|
71.9 |
IRR coefficients:
table <- table(c11r$HM, c11r$KLM, dnn = c("H", "W"))
weights <- Kappa(table)$Weights
bind_rows("Agreement Coefficient" = gwet.ac1.table(table),
"Kappa" = kappa2.table(table),
"Weighted Kappa" = kappa2.table(table, weights=weights), .id="Type") %>%
kable(digits=3)
Type | coeff.name | coeff.val | coeff.se | coeff.ci | coeff.pval |
---|---|---|---|---|---|
Agreement Coefficient | Gwet’s AC1 | 0.664 | 0.072 | (0.52,0.808) | 7.363e-13 |
Kappa | Cohen’s Kappa | 0.573 | 0.087 | (0.399,0.747) | 1.661e-08 |
Weighted Kappa | Cohen’s Kappa | 0.609 | 0.093 | (0.424,0.795) | 1.689e-08 |
c11wk <- kappa2.table(table, weights=weights)
Interpreting AC1: Gwet recommends to “retain an agreement strength level that is associated with ComProb that exceeds 0.95.”
ac1 <- gwet.ac1.raw(na.omit(c11r[,-1]))$est
landis.koch.bf(ac1$coeff.val, ac1$coeff.se) %>%
kable()
Landis-Koch | CumProb | |
---|---|---|
(0.8 to 1) | Almost Perfect | 0.03075 |
(0.6 to 0.8) | Substantial | 0.81263 |
(0.4 to 0.6) | Moderate | 0.99987 |
(0.2 to 0.4) | Fair | 1 |
(0 to 0.2) | Slight | 1 |
(-1 to 0) | Poor | 1 |
Consensus Agreement:
OIprop.table(analysis_con, oi_11)
Component 11 Consensus Rating | Count | Proportion |
---|---|---|
0 | 7 | 0.12 |
1 | 2 | 0.03 |
2 | 22 | 0.37 |
4 | 28 | 0.47 |
Original
Table of Rater Agreement:
c12r <- pulloutrating(analysis_reliab, oi_12)
ftable(c12r$HM, c12r$KLM, dnn = c("HM", "KLM")) %>%
pander()
KLM | 0 | 1 | 2 | |
HM | ||||
0 | 5 | 1 | 2 | |
1 | 0 | 3 | 3 | |
2 | 3 | 4 | 37 |
Percentage Agreement
data.frame(sum(c12r$HM == c12r$KLM, na.rm=T)/nrow(na.omit(c12r))*100) %>%
kable(col.names = "Percent Agreement", digits=1, align = "l")
Percent Agreement |
---|
77.6 |
IRR coefficients:
table <- table(c12r$HM, c12r$KLM, dnn = c("H", "W"))
weights <- Kappa(table)$Weights
bind_rows("Agreement Coefficient" = gwet.ac1.table(table),
"Kappa" = kappa2.table(table),
"Weighted Kappa" = kappa2.table(table, weights=weights), .id="Type") %>%
kable(digits=3)
Type | coeff.name | coeff.val | coeff.se | coeff.ci | coeff.pval |
---|---|---|---|---|---|
Agreement Coefficient | Gwet’s AC1 | 0.717 | 0.074 | (0.568,0.865) | 1.288e-13 |
Kappa | Cohen’s Kappa | 0.463 | 0.122 | (0.218,0.708) | 3.644e-04 |
Weighted Kappa | Cohen’s Kappa | 0.501 | 0.128 | (0.245,0.757) | 2.426e-04 |
c12wk <- kappa2.table(table, weights=weights)
Interpreting AC1: Gwet recommends to “retain an agreement strength level that is associated with ComProb that exceeds 0.95.”
ac1 <- gwet.ac1.raw(na.omit(c12r[,-1]))$est
landis.koch.bf(ac1$coeff.val, ac1$coeff.se) %>%
kable()
Landis-Koch | CumProb | |
---|---|---|
(0.8 to 1) | Almost Perfect | 0.13314 |
(0.6 to 0.8) | Substantial | 0.94086 |
(0.4 to 0.6) | Moderate | 0.99999 |
(0.2 to 0.4) | Fair | 1 |
(0 to 0.2) | Slight | 1 |
(-1 to 0) | Poor | 1 |
Consensus Agreement:
OIprop.table(analysis_con, oi_12)
Component 12 Consensus Rating | Count | Proportion |
---|---|---|
0 | 7 | 0.12 |
1 | 6 | 0.10 |
2 | 46 | 0.78 |
Update: Recode to Binary 0 and 1
Table of Rater Agreement:
analysis_reliab$oi_12_binary <- ifelse(analysis_reliab$oi_12 == 0, 0, 1)
analysis_con$oi_12_binary <- ifelse(analysis_con$oi_12 == 0, 0, 1)
c12r <- pulloutrating(analysis_reliab, oi_12_binary)
ftable(c12r$HM, c12r$KLM, dnn = c("HM", "KLM")) %>%
pander()
KLM | 0 | 1 | |
HM | |||
0 | 5 | 3 | |
1 | 3 | 47 |
Percentage Agreement
data.frame(sum(c12r$HM == c12r$KLM, na.rm=T)/nrow(na.omit(c12r))*100) %>%
kable(col.names = "Percent Agreement", digits=1, align = "l")
Percent Agreement |
---|
89.7 |
IRR coefficients:
table <- table(c12r$HM, c12r$KLM, dnn = c("H", "W"))
weights <- Kappa(table)$Weights
bind_rows("Agreement Coefficient" = gwet.ac1.table(table),
"Kappa" = kappa2.table(table),
"Weighted Kappa" = kappa2.table(table, weights=weights), .id="Type") %>%
kable(digits=3)
Type | coeff.name | coeff.val | coeff.se | coeff.ci | coeff.pval |
---|---|---|---|---|---|
Agreement Coefficient | Gwet’s AC1 | 0.864 | 0.057 | (0.749,0.979) | 0e+00 |
Kappa | Cohen’s Kappa | 0.565 | 0.159 | (0.247,0.883) | 7.492e-04 |
Weighted Kappa | Cohen’s Kappa | 0.565 | 0.159 | (0.247,0.883) | 7.492e-04 |
c12bwk <- kappa2.table(table, weights=weights)
Interpreting AC1: Gwet recommends to “retain an agreement strength level that is associated with ComProb that exceeds 0.95.”
ac1 <- gwet.ac1.raw(na.omit(c12r[,-1]))$est
landis.koch.bf(ac1$coeff.val, ac1$coeff.se) %>%
kable()
Landis-Koch | CumProb | |
---|---|---|
(0.8 to 1) | Almost Perfect | 0.86513 |
(0.6 to 0.8) | Substantial | 1 |
(0.4 to 0.6) | Moderate | 1 |
(0.2 to 0.4) | Fair | 1 |
(0 to 0.2) | Slight | 1 |
(-1 to 0) | Poor | 1 |
Consensus Agreement:
OIprop.table(analysis_con, oi_12_binary)
Component 12_binary Consensus Rating | Count | Proportion |
---|---|---|
0 | 7 | 0.12 |
1 | 52 | 0.88 |
Table of Rater Agreement:
c13r <- pulloutrating(analysis_reliab, oi_13)
ftable(c13r$HM, c13r$KLM, dnn = c("HM", "KLM")) %>%
pander()
KLM | 0 | 1 | 2 | 3 | |
HM | |||||
0 | 5 | 0 | 1 | 2 | |
1 | 0 | 1 | 2 | 1 | |
2 | 3 | 1 | 22 | 2 | |
3 | 0 | 1 | 4 | 13 |
Percentage Agreement
data.frame(sum(c13r$HM == c13r$KLM, na.rm=T)/nrow(na.omit(c13r))*100) %>%
kable(col.names = "Percent Agreement", digits=1, align = "l")
Percent Agreement |
---|
70.7 |
IRR coefficients:
table <- table(c13r$HM, c13r$KLM, dnn = c("H", "W"))
weights <- Kappa(table)$Weights
bind_rows("Agreement Coefficient" = gwet.ac1.table(table),
"Kappa" = kappa2.table(table),
"Weighted Kappa" = kappa2.table(table, weights=weights), .id="Type") %>%
kable(digits=3)
Type | coeff.name | coeff.val | coeff.se | coeff.ci | coeff.pval |
---|---|---|---|---|---|
Agreement Coefficient | Gwet’s AC1 | 0.627 | 0.077 | (0.472,0.782) | 4.575e-11 |
Kappa | Cohen’s Kappa | 0.542 | 0.090 | (0.361,0.723) | 1.477e-07 |
Weighted Kappa | Cohen’s Kappa | 0.527 | 0.105 | (0.316,0.738) | 5.617e-06 |
c13wk <- kappa2.table(table, weights=weights)
Interpreting AC1: Gwet recommends to “retain an agreement strength level that is associated with ComProb that exceeds 0.95.”
ac1 <- gwet.ac1.raw(na.omit(c13r[,-1]))$est
landis.koch.bf(ac1$coeff.val, ac1$coeff.se) %>%
kable()
Landis-Koch | CumProb | |
---|---|---|
(0.8 to 1) | Almost Perfect | 0.01357 |
(0.6 to 0.8) | Substantial | 0.63756 |
(0.4 to 0.6) | Moderate | 0.99821 |
(0.2 to 0.4) | Fair | 1 |
(0 to 0.2) | Slight | 1 |
(-1 to 0) | Poor | 1 |
Consensus Agreement:
OIprop.table(analysis_con, oi_13)
Component 13 Consensus Rating | Count | Proportion |
---|---|---|
0 | 7 | 0.12 |
1 | 4 | 0.07 |
2 | 28 | 0.47 |
3 | 20 | 0.34 |
Original
Table of Rater Agreement:
c14r <- pulloutrating(analysis_reliab, oi_14)
ftable(c14r$HM, c14r$KLM, dnn = c("HM", "KLM")) %>%
pander()
KLM | 0 | 1 | 2 | |
HM | ||||
0 | 24 | 2 | 2 | |
1 | 3 | 5 | 4 | |
2 | 0 | 2 | 16 |
Percentage Agreement
data.frame(sum(c14r$HM == c14r$KLM, na.rm=T)/nrow(na.omit(c14r))*100) %>%
kable(col.names = "Percent Agreement", digits=1, align = "l")
Percent Agreement |
---|
77.6 |
IRR coefficients:
table <- table(c14r$HM, c14r$KLM, dnn = c("H", "W"))
weights <- Kappa(table)$Weights
bind_rows("Agreement Coefficient" = gwet.ac1.table(table),
"Kappa" = kappa2.table(table),
"Weighted Kappa" = kappa2.table(table, weights=weights), .id="Type") %>%
kable(digits=3)
Type | coeff.name | coeff.val | coeff.se | coeff.ci | coeff.pval |
---|---|---|---|---|---|
Agreement Coefficient | Gwet’s AC1 | 0.674 | 0.082 | (0.51,0.838) | 2.874e-11 |
Kappa | Cohen’s Kappa | 0.642 | 0.083 | (0.476,0.807) | 1.758e-10 |
Weighted Kappa | Cohen’s Kappa | 0.729 | 0.071 | (0.587,0.871) | 1.377e-14 |
c14wk <- kappa2.table(table, weights=weights)
Interpreting AC1: Gwet recommends to “retain an agreement strength level that is associated with ComProb that exceeds 0.95.”
ac1 <- gwet.ac1.raw(na.omit(c14r[,-1]))$est
landis.koch.bf(ac1$coeff.val, ac1$coeff.se) %>%
kable()
Landis-Koch | CumProb | |
---|---|---|
(0.8 to 1) | Almost Perfect | 0.0642 |
(0.6 to 0.8) | Substantial | 0.8157 |
(0.4 to 0.6) | Moderate | 0.99955 |
(0.2 to 0.4) | Fair | 1 |
(0 to 0.2) | Slight | 1 |
(-1 to 0) | Poor | 1 |
Consensus Agreement:
OIprop.table(analysis_con, oi_14)
Component 14 Consensus Rating | Count | Proportion |
---|---|---|
0 | 26 | 0.44 |
1 | 12 | 0.20 |
2 | 21 | 0.36 |
Update - Recode to Binary
Table of Rater Agreement:
analysis_reliab$oi_14_binary <- ifelse(analysis_reliab$oi_14 == 0, 0, 1)
analysis_con$oi_14_binary <- ifelse(analysis_con$oi_14 == 0, 0, 1)
c14r <- pulloutrating(analysis_reliab, oi_14_binary)
ftable(c14r$HM, c14r$KLM, dnn = c("HM", "KLM")) %>%
pander()
KLM | 0 | 1 | |
HM | |||
0 | 24 | 4 | |
1 | 3 | 27 |
Percentage Agreement
data.frame(sum(c14r$HM == c14r$KLM, na.rm=T)/nrow(na.omit(c14r))*100) %>%
kable(col.names = "Percent Agreement", digits=1, align = "l")
Percent Agreement |
---|
87.9 |
IRR coefficients:
table <- table(c14r$HM, c14r$KLM, dnn = c("H", "W"))
weights <- Kappa(table)$Weights
bind_rows("Agreement Coefficient" = gwet.ac1.table(table),
"Kappa" = kappa2.table(table),
"Weighted Kappa" = kappa2.table(table, weights=weights), .id="Type") %>%
kable(digits=3)
Type | coeff.name | coeff.val | coeff.se | coeff.ci | coeff.pval |
---|---|---|---|---|---|
Agreement Coefficient | Gwet’s AC1 | 0.759 | 0.085 | (0.588,0.93) | 2.366e-12 |
Kappa | Cohen’s Kappa | 0.758 | 0.086 | (0.586,0.93) | 2.761e-12 |
Weighted Kappa | Cohen’s Kappa | 0.758 | 0.086 | (0.586,0.93) | 2.761e-12 |
c14wk <- kappa2.table(table, weights=weights)
Interpreting AC1: Gwet recommends to “retain an agreement strength level that is associated with ComProb that exceeds 0.95.”
ac1 <- gwet.ac1.raw(na.omit(c14r[,-1]))$est
landis.koch.bf(ac1$coeff.val, ac1$coeff.se) %>%
kable()
Landis-Koch | CumProb | |
---|---|---|
(0.8 to 1) | Almost Perfect | 0.31644 |
(0.6 to 0.8) | Substantial | 0.9676 |
(0.4 to 0.6) | Moderate | 0.99998 |
(0.2 to 0.4) | Fair | 1 |
(0 to 0.2) | Slight | 1 |
(-1 to 0) | Poor | 1 |
Consensus Agreement:
OIprop.table(analysis_con, oi_14_binary)
Component 14_binary Consensus Rating | Count | Proportion |
---|---|---|
0 | 26 | 0.44 |
1 | 33 | 0.56 |
Table of Rater Agreement:
c15r <- pulloutrating(analysis_reliab, oi_15)
ftable(c15r$HM, c15r$KLM, dnn = c("HM", "KLM")) %>%
pander()
KLM | 0 | 1 | 2 | 3 | |
HM | |||||
0 | 24 | 2 | 2 | 0 | |
1 | 2 | 4 | 9 | 0 | |
2 | 1 | 1 | 8 | 0 | |
3 | 0 | 1 | 1 | 3 |
Percentage Agreement
data.frame(sum(c15r$HM == c15r$KLM, na.rm=T)/nrow(na.omit(c15r))*100) %>%
kable(col.names = "Percent Agreement", digits=1, align = "l")
Percent Agreement |
---|
67.2 |
IRR coefficients:
table <- table(c15r$HM, c15r$KLM, dnn = c("H", "W"))
weights <- Kappa(table)$Weights
bind_rows("Agreement Coefficient" = gwet.ac1.table(table),
"Kappa" = kappa2.table(table),
"Weighted Kappa" = kappa2.table(table, weights=weights), .id="Type") %>%
kable(digits=3)
Type | coeff.name | coeff.val | coeff.se | coeff.ci | coeff.pval |
---|---|---|---|---|---|
Agreement Coefficient | Gwet’s AC1 | 0.579 | 0.082 | (0.416,0.743) | 2.255e-09 |
Kappa | Cohen’s Kappa | 0.515 | 0.082 | (0.35,0.68) | 5.306e-08 |
Weighted Kappa | Cohen’s Kappa | 0.632 | 0.077 | (0.478,0.786) | 2.894e-11 |
c15wk <- kappa2.table(table, weights=weights)
Interpreting AC1: Gwet recommends to “retain an agreement strength level that is associated with ComProb that exceeds 0.95.”
ac1 <- gwet.ac1.raw(na.omit(c15r[,-1]))$est
landis.koch.bf(ac1$coeff.val, ac1$coeff.se) %>%
kable()
Landis-Koch | CumProb | |
---|---|---|
(0.8 to 1) | Almost Perfect | 0.0037 |
(0.6 to 0.8) | Substantial | 0.40066 |
(0.4 to 0.6) | Moderate | 0.98518 |
(0.2 to 0.4) | Fair | 1 |
(0 to 0.2) | Slight | 1 |
(-1 to 0) | Poor | 1 |
Consensus Agreement:
OIprop.table(analysis_con, oi_15)
Component 15 Consensus Rating | Count | Proportion |
---|---|---|
0 | 26 | 0.44 |
1 | 11 | 0.19 |
2 | 18 | 0.31 |
3 | 4 | 0.07 |
Table of Rater Agreement:
c16r <- pulloutrating(analysis_reliab, oi_16)
ftable(c16r$HM, c16r$KLM, dnn = c("HM", "KLM")) %>%
pander()
KLM | 0 | 1 | 2 | |
HM | ||||
0 | 9 | 2 | 0 | |
1 | 4 | 14 | 1 | |
2 | 0 | 3 | 23 |
Percentage Agreement
data.frame(sum(c16r$HM == c16r$KLM, na.rm=T)/nrow(na.omit(c16r))*100) %>%
kable(col.names = "Percent Agreement", digits=1, align = "l")
Percent Agreement |
---|
82.1 |
IRR coefficients:
table <- table(c16r$HM, c16r$KLM, dnn = c("H", "W"))
weights <- Kappa(table)$Weights
bind_rows("Agreement Coefficient" = gwet.ac1.table(table),
"Kappa" = kappa2.table(table),
"Weighted Kappa" = kappa2.table(table, weights=weights), .id="Type") %>%
kable(digits=3)
Type | coeff.name | coeff.val | coeff.se | coeff.ci | coeff.pval |
---|---|---|---|---|---|
Agreement Coefficient | Gwet’s AC1 | 0.737 | 0.076 | (0.585,0.89) | 1.83e-13 |
Kappa | Cohen’s Kappa | 0.721 | 0.078 | (0.564,0.878) | 1.009e-12 |
Weighted Kappa | Cohen’s Kappa | 0.785 | 0.062 | (0.661,0.91) | 0e+00 |
c16wk <- kappa2.table(table, weights=weights)
Interpreting AC1: Gwet recommends to “retain an agreement strength level that is associated with ComProb that exceeds 0.95.”
ac1 <- gwet.ac1.raw(na.omit(c16r[,-1]))$est
landis.koch.bf(ac1$coeff.val, ac1$coeff.se) %>%
kable()
Landis-Koch | CumProb | |
---|---|---|
(0.8 to 1) | Almost Perfect | 0.20793 |
(0.6 to 0.8) | Substantial | 0.96297 |
(0.4 to 0.6) | Moderate | 0.99999 |
(0.2 to 0.4) | Fair | 1 |
(0 to 0.2) | Slight | 1 |
(-1 to 0) | Poor | 1 |
Consensus Agreement:
OIprop.table(analysis_con, oi_16)
Component 16 Consensus Rating | Count | Proportion |
---|---|---|
0 | 12 | 0.20 |
1 | 20 | 0.34 |
2 | 27 | 0.46 |
Table of Rater Agreement:
c17r <- pulloutrating(analysis_reliab, oi_17)
ftable(c17r$HM, c17r$KLM, dnn = c("HM", "KLM")) %>%
pander()
KLM | 1 | 2 | 3 | 4 | |
HM | |||||
1 | 1 | 1 | 0 | 0 | |
2 | 0 | 23 | 2 | 0 | |
3 | 0 | 7 | 18 | 0 | |
4 | 0 | 0 | 4 | 0 |
Percentage Agreement
data.frame(sum(c17r$HM == c17r$KLM, na.rm=T)/nrow(na.omit(c17r))*100) %>%
kable(col.names = "Percent Agreement", digits=1, align = "l")
Percent Agreement |
---|
75 |
IRR coefficients:
table <- table(c17r$HM, c17r$KLM, dnn = c("H", "W"))
weights <- Kappa(table)$Weights
bind_rows("Agreement Coefficient" = gwet.ac1.table(table),
"Kappa" = kappa2.table(table),
"Weighted Kappa" = kappa2.table(table, weights=weights), .id="Type") %>%
kable(digits=3)
Type | coeff.name | coeff.val | coeff.se | coeff.ci | coeff.pval |
---|---|---|---|---|---|
Agreement Coefficient | Gwet’s AC1 | 0.693 | 0.072 | (0.548,0.838) | 2.345e-13 |
Kappa | Cohen’s Kappa | 0.554 | 0.096 | (0.361,0.748) | 4.116e-07 |
Weighted Kappa | Cohen’s Kappa | 0.601 | 0.084 | (0.432,0.77) | 2.336e-09 |
c17wk <- kappa2.table(table, weights=weights)
Interpreting AC1: Gwet recommends to “retain an agreement strength level that is associated with ComProb that exceeds 0.95.”
ac1 <- gwet.ac1.raw(na.omit(c17r[,-1]))$est
landis.koch.bf(ac1$coeff.val, ac1$coeff.se) %>%
kable()
Landis-Koch | CumProb | |
---|---|---|
(0.8 to 1) | Almost Perfect | 0.07097 |
(0.6 to 0.8) | Substantial | 0.89931 |
(0.4 to 0.6) | Moderate | 0.99997 |
(0.2 to 0.4) | Fair | 1 |
(0 to 0.2) | Slight | 1 |
(-1 to 0) | Poor | 1 |
Consensus Agreement:
OIprop.table(analysis_con, oi_17)
Component 17 Consensus Rating | Count | Proportion |
---|---|---|
1 | 1 | 0.02 |
2 | 27 | 0.46 |
3 | 28 | 0.47 |
4 | 3 | 0.05 |
Original
Table of Rater Agreement:
c18r <- pulloutrating(analysis_reliab, oi_18)
ftable(c18r$HM, c18r$KLM, dnn = c("HM", "KLM")) %>%
pander()
KLM | 0 | 1 | 2 | |
HM | ||||
0 | 10 | 11 | 0 | |
1 | 2 | 16 | 1 | |
2 | 1 | 6 | 9 |
Percentage Agreement
data.frame(sum(c18r$HM == c18r$KLM, na.rm=T)/nrow(na.omit(c18r))*100) %>%
kable(col.names = "Percent Agreement", digits=1, align = "l")
Percent Agreement |
---|
62.5 |
IRR coefficients:
table <- table(c18r$HM, c18r$KLM, dnn = c("H", "W"))
weights <- Kappa(table)$Weights
bind_rows("Agreement Coefficient" = gwet.ac1.table(table),
"Kappa" = kappa2.table(table),
"Weighted Kappa" = kappa2.table(table, weights=weights), .id="Type") %>%
kable(digits=3)
Type | coeff.name | coeff.val | coeff.se | coeff.ci | coeff.pval |
---|---|---|---|---|---|
Agreement Coefficient | Gwet’s AC1 | 0.449 | 0.095 | (0.259,0.64) | 1.623e-05 |
Kappa | Cohen’s Kappa | 0.434 | 0.094 | (0.245,0.622) | 2.38e-05 |
Weighted Kappa | Cohen’s Kappa | 0.506 | 0.091 | (0.324,0.688) | 7.622e-07 |
c18wk <- kappa2.table(table, weights=weights)
Interpreting AC1: Gwet recommends to “retain an agreement strength level that is associated with ComProb that exceeds 0.95.”
ac1 <- gwet.ac1.raw(na.omit(c18r[,-1]))$est
landis.koch.bf(ac1$coeff.val, ac1$coeff.se) %>%
kable()
Landis-Koch | CumProb | |
---|---|---|
(0.8 to 1) | Almost Perfect | 0.00013 |
(0.6 to 0.8) | Substantial | 0.05786 |
(0.4 to 0.6) | Moderate | 0.696 |
(0.2 to 0.4) | Fair | 0.99532 |
(0 to 0.2) | Slight | 1 |
(-1 to 0) | Poor | 1 |
Consensus Agreement:
OIprop.table(analysis_con, oi_18)
Component 18 Consensus Rating | Count | Proportion |
---|---|---|
0 | 16 | 0.27 |
1 | 27 | 0.46 |
2 | 16 | 0.27 |
Update: Recode to Binary 0 and 1
Table of Rater Agreement:
analysis_reliab$oi_18_binary <- ifelse(analysis_reliab$oi_18 == 0, 0, 1)
analysis_con$oi_18_binary <- ifelse(analysis_con$oi_18 == 0, 0, 1)
c18r <- pulloutrating(analysis_reliab, oi_18_binary)
ftable(c18r$HM, c18r$KLM, dnn = c("HM", "KLM")) %>%
pander()
KLM | 0 | 1 | |
HM | |||
0 | 10 | 11 | |
1 | 3 | 32 |
Percentage Agreement
data.frame(sum(c18r$HM == c18r$KLM, na.rm=T)/nrow(na.omit(c18r))*100) %>%
kable(col.names = "Percent Agreement", digits=1, align = "l")
Percent Agreement |
---|
75 |
IRR coefficients:
table <- table(c18r$HM, c18r$KLM, dnn = c("H", "W"))
weights <- Kappa(table)$Weights
bind_rows("Agreement Coefficient" = gwet.ac1.table(table),
"Kappa" = kappa2.table(table),
"Weighted Kappa" = kappa2.table(table, weights=weights), .id="Type") %>%
kable(digits=3)
Type | coeff.name | coeff.val | coeff.se | coeff.ci | coeff.pval |
---|---|---|---|---|---|
Agreement Coefficient | Gwet’s AC1 | 0.567 | 0.113 | (0.34,0.793) | 5.835e-06 |
Kappa | Cohen’s Kappa | 0.423 | 0.123 | (0.176,0.67) | 1.156e-03 |
Weighted Kappa | Cohen’s Kappa | 0.423 | 0.123 | (0.176,0.67) | 1.156e-03 |
c18bwk <- kappa2.table(table, weights=weights)
Interpreting AC1: Gwet recommends to “retain an agreement strength level that is associated with ComProb that exceeds 0.95.”
ac1 <- gwet.ac1.raw(na.omit(c18r[,-1]))$est
landis.koch.bf(ac1$coeff.val, ac1$coeff.se) %>%
kable()
Landis-Koch | CumProb | |
---|---|---|
(0.8 to 1) | Almost Perfect | 0.02037 |
(0.6 to 0.8) | Substantial | 0.38558 |
(0.4 to 0.6) | Moderate | 0.92831 |
(0.2 to 0.4) | Fair | 0.99935 |
(0 to 0.2) | Slight | 1 |
(-1 to 0) | Poor | 1 |
Consensus Agreement:
OIprop.table(analysis_con, oi_18_binary)
Component 18_binary Consensus Rating | Count | Proportion |
---|---|---|
0 | 16 | 0.27 |
1 | 43 | 0.73 |
Table of Rater Agreement:
c19r <- pulloutrating(analysis_reliab, oi_19)
ftable(c19r$HM, c19r$KLM, dnn = c("HM", "KLM")) %>%
pander()
KLM | 1 | 2 | 3 | 4 | |
HM | |||||
1 | 6 | 4 | 0 | 0 | |
2 | 2 | 20 | 2 | 0 | |
3 | 0 | 2 | 8 | 4 | |
4 | 0 | 3 | 1 | 4 |
Percentage Agreement
data.frame(sum(c19r$HM == c19r$KLM, na.rm=T)/nrow(na.omit(c19r))*100) %>%
kable(col.names = "Percent Agreement", digits=1, align = "l")
Percent Agreement |
---|
67.9 |
IRR coefficients:
table <- table(c19r$HM, c19r$KLM, dnn = c("H", "W"))
weights <- Kappa(table)$Weights
bind_rows("Agreement Coefficient" = gwet.ac1.table(table),
"Kappa" = kappa2.table(table),
"Weighted Kappa" = kappa2.table(table, weights=weights), .id="Type") %>%
kable(digits=3)
Type | coeff.name | coeff.val | coeff.se | coeff.ci | coeff.pval |
---|---|---|---|---|---|
Agreement Coefficient | Gwet’s AC1 | 0.584 | 0.082 | (0.42,0.749) | 2.396e-09 |
Kappa | Cohen’s Kappa | 0.529 | 0.089 | (0.351,0.708) | 2.078e-07 |
Weighted Kappa | Cohen’s Kappa | 0.618 | 0.079 | (0.46,0.776) | 1.571e-10 |
c19wk <- kappa2.table(table, weights=weights)
Interpreting AC1: Gwet recommends to “retain an agreement strength level that is associated with ComProb that exceeds 0.95.”
ac1 <- gwet.ac1.raw(na.omit(c19r[,-1]))$est
landis.koch.bf(ac1$coeff.val, ac1$coeff.se) %>%
kable()
Landis-Koch | CumProb | |
---|---|---|
(0.8 to 1) | Almost Perfect | 0.00461 |
(0.6 to 0.8) | Substantial | 0.4251 |
(0.4 to 0.6) | Moderate | 0.987 |
(0.2 to 0.4) | Fair | 1 |
(0 to 0.2) | Slight | 1 |
(-1 to 0) | Poor | 1 |
Consensus Agreement:
OIprop.table(analysis_con, oi_19)
Component 19 Consensus Rating | Count | Proportion |
---|---|---|
1 | 9 | 0.15 |
2 | 23 | 0.39 |
3 | 12 | 0.20 |
4 | 15 | 0.25 |
Table of Rater Agreement:
c20r <- pulloutrating(analysis_reliab, oi_20)
ftable(c20r$HM, c20r$KLM, dnn = c("HM", "KLM")) %>%
pander()
KLM | 0 | 1 | 2 | 3 | 4 | |
HM | ||||||
0 | 3 | 5 | 0 | 0 | 0 | |
1 | 0 | 3 | 3 | 0 | 0 | |
2 | 0 | 3 | 14 | 3 | 0 | |
3 | 0 | 0 | 2 | 8 | 4 | |
4 | 0 | 0 | 2 | 2 | 4 |
Percentage Agreement
data.frame(sum(c20r$HM == c20r$KLM, na.rm=T)/nrow(na.omit(c20r))*100) %>%
kable(col.names = "Percent Agreement", digits=1, align = "l")
Percent Agreement |
---|
57.1 |
IRR coefficients:
table <- table(c20r$HM, c20r$KLM, dnn = c("H", "W"))
weights <- Kappa(table)$Weights
bind_rows("Agreement Coefficient" = gwet.ac1.table(table),
"Kappa" = kappa2.table(table),
"Weighted Kappa" = kappa2.table(table, weights=weights), .id="Type") %>%
kable(digits=3)
Type | coeff.name | coeff.val | coeff.se | coeff.ci | coeff.pval |
---|---|---|---|---|---|
Agreement Coefficient | Gwet’s AC1 | 0.472 | 0.082 | (0.307,0.637) | 4.484e-07 |
Kappa | Cohen’s Kappa | 0.435 | 0.084 | (0.266,0.604) | 3.546e-06 |
Weighted Kappa | Cohen’s Kappa | 0.636 | 0.062 | (0.511,0.76) | 2.42e-14 |
c20wk <- kappa2.table(table, weights=weights)
Interpreting AC1: Gwet recommends to “retain an agreement strength level that is associated with ComProb that exceeds 0.95.”
ac1 <- gwet.ac1.raw(na.omit(c20r[,-1]))$est
landis.koch.bf(ac1$coeff.val, ac1$coeff.se) %>%
kable()
Landis-Koch | CumProb | |
---|---|---|
(0.8 to 1) | Almost Perfect | 4e-05 |
(0.6 to 0.8) | Substantial | 0.06153 |
(0.4 to 0.6) | Moderate | 0.80585 |
(0.2 to 0.4) | Fair | 0.99946 |
(0 to 0.2) | Slight | 1 |
(-1 to 0) | Poor | 1 |
Consensus Agreement:
OIprop.table(analysis_con, oi_20)
Component 20 Consensus Rating | Count | Proportion |
---|---|---|
0 | 3 | 0.05 |
1 | 11 | 0.19 |
2 | 18 | 0.31 |
3 | 12 | 0.20 |
4 | 15 | 0.25 |
Table of Rater Agreement:
c21r <- pulloutrating(analysis_reliab, oi_21)
ftable(c21r$HM, c21r$KLM, dnn = c("HM", "KLM")) %>%
pander()
KLM | 0 | 1 | 2 | 3 | |
HM | |||||
0 | 9 | 8 | 0 | 0 | |
1 | 1 | 11 | 2 | 0 | |
2 | 0 | 2 | 11 | 4 | |
3 | 0 | 0 | 4 | 4 |
Percentage Agreement
data.frame(sum(c21r$HM == c21r$KLM, na.rm=T)/nrow(na.omit(c21r))*100) %>%
kable(col.names = "Percent Agreement", digits=1, align = "l")
Percent Agreement |
---|
62.5 |
IRR coefficients:
table <- table(c21r$HM, c21r$KLM, dnn = c("H", "W"))
weights <- Kappa(table)$Weights
bind_rows("Agreement Coefficient" = gwet.ac1.table(table),
"Kappa" = kappa2.table(table),
"Weighted Kappa" = kappa2.table(table, weights=weights), .id="Type") %>%
kable(digits=3)
Type | coeff.name | coeff.val | coeff.se | coeff.ci | coeff.pval |
---|---|---|---|---|---|
Agreement Coefficient | Gwet’s AC1 | 0.504 | 0.086 | (0.332,0.676) | 2.614e-07 |
Kappa | Cohen’s Kappa | 0.493 | 0.085 | (0.322,0.664) | 3.654e-07 |
Weighted Kappa | Cohen’s Kappa | 0.663 | 0.059 | (0.544,0.782) | 8.882e-16 |
c21wk <- kappa2.table(table, weights=weights)
Interpreting AC1: Gwet recommends to “retain an agreement strength level that is associated with ComProb that exceeds 0.95.”
ac1 <- gwet.ac1.raw(na.omit(c21r[,-1]))$est
landis.koch.bf(ac1$coeff.val, ac1$coeff.se) %>%
kable()
Landis-Koch | CumProb | |
---|---|---|
(0.8 to 1) | Almost Perfect | 0.00032 |
(0.6 to 0.8) | Substantial | 0.13408 |
(0.4 to 0.6) | Moderate | 0.88504 |
(0.2 to 0.4) | Fair | 0.99977 |
(0 to 0.2) | Slight | 1 |
(-1 to 0) | Poor | 1 |
Consensus Agreement:
OIprop.table(analysis_con, oi_21)
Component 21 Consensus Rating | Count | Proportion |
---|---|---|
0 | 16 | 0.27 |
1 | 15 | 0.25 |
2 | 13 | 0.22 |
3 | 15 | 0.25 |
#combine all in table
wkappavals <- data.frame()
for (i in grep("c[[:digit:]]{1,2}wk", ls(), value=T)) {
temp <- get(i)
temp$component = gsub("c|wk", "", i)
wkappavals <- bind_rows(wkappavals, temp)
}
wkappavals %>%
relocate(component) %>%
arrange(coeff.val) %>%
kable(digits = 3)
component | coeff.name | coeff.val | coeff.se | coeff.ci | coeff.pval |
---|---|---|---|---|---|
9 | Cohen’s Kappa | 0.433 | 0.116 | (0.201,0.664) | 4.349e-04 |
10 | Cohen’s Kappa | 0.458 | 0.084 | (0.29,0.627) | 1.196e-06 |
5 | Cohen’s Kappa | 0.487 | 0.154 | (0.179,0.795) | 2.45e-03 |
12 | Cohen’s Kappa | 0.501 | 0.128 | (0.245,0.757) | 2.426e-04 |
18 | Cohen’s Kappa | 0.506 | 0.091 | (0.324,0.688) | 7.622e-07 |
13 | Cohen’s Kappa | 0.527 | 0.105 | (0.316,0.738) | 5.617e-06 |
6 | Cohen’s Kappa | 0.546 | 0.097 | (0.352,0.741) | 6.27e-07 |
7 | Cohen’s Kappa | 0.551 | 0.084 | (0.382,0.72) | 2.121e-08 |
17 | Cohen’s Kappa | 0.601 | 0.084 | (0.432,0.77) | 2.336e-09 |
11 | Cohen’s Kappa | 0.609 | 0.093 | (0.424,0.795) | 1.689e-08 |
19 | Cohen’s Kappa | 0.618 | 0.079 | (0.46,0.776) | 1.571e-10 |
15 | Cohen’s Kappa | 0.632 | 0.077 | (0.478,0.786) | 2.894e-11 |
20 | Cohen’s Kappa | 0.636 | 0.062 | (0.511,0.76) | 2.42e-14 |
8 | Cohen’s Kappa | 0.639 | 0.084 | (0.471,0.806) | 3.106e-10 |
21 | Cohen’s Kappa | 0.663 | 0.059 | (0.544,0.782) | 8.882e-16 |
2 | Cohen’s Kappa | 0.733 | 0.104 | (0.518,0.947) | 1.902e-07 |
3 | Cohen’s Kappa | 0.742 | 0.081 | (0.575,0.908) | 7.049e-10 |
14 | Cohen’s Kappa | 0.758 | 0.086 | (0.586,0.93) | 2.761e-12 |
16 | Cohen’s Kappa | 0.785 | 0.062 | (0.661,0.91) | 0e+00 |
1 | Cohen’s Kappa | 0.925 | 0.073 | (0.775,1) | 7.738e-13 |
4 | Cohen’s Kappa | NaN | NaN | (NaN,NaN) | NaN |
Need the reliability exams/raters and which measures (best, worst, mean) to use for reliability.
Because this data is continuous, rather than ordinal like the BabyVFSSimP, an intraclass correlation coefficient will be used to assess reliability between the two raters.
# add rater
sma_reliability1 <- sma_reliability %>%
filter(Measurement_name == "PESop" | Measurement_name == "PCR") %>%
select(Subject.ID, datafile, Measurement_name, Mean, Worst_OI, Best_OI, Worst_OI_5p) %>%
pivot_wider(names_from = "Measurement_name",
values_from = c("Mean", "Worst_OI", "Best_OI", "Worst_OI_5p")) %>%
group_by(Subject.ID) %>%
arrange(datafile) %>%
mutate(rater = 1:2)
mpcr <- sma_reliability1 %>%
select(Subject.ID, rater, Mean_PCR) %>%
pivot_wider(names_from = rater,
values_from = Mean_PCR,
names_prefix = "rater") %>%
ungroup() %>%
select(-Subject.ID)
icc(mpcr, model= "twoway", type = "consistency", unit = "average")
Average Score Intraclass Correlation
Model: twoway
Type : consistency
Subjects = 15
Raters = 2
ICC(C,2) = 0.777
F-Test, H0: r0 = 0 ; H1: r0 > 0
F(14,14) = 4.49 , p = 0.00405
95%-Confidence Interval for ICC Population Values:
0.337 < ICC < 0.925
bpcr <- sma_reliability1 %>%
select(Subject.ID, rater, Best_OI_PCR) %>%
pivot_wider(names_from = rater,
values_from = Best_OI_PCR,
names_prefix = "rater") %>%
ungroup() %>%
select(-Subject.ID)
icc(bpcr, model= "twoway", type = "consistency", unit = "single")
Single Score Intraclass Correlation
Model: twoway
Type : consistency
Subjects = 15
Raters = 2
ICC(C,1) = -0.02
F-Test, H0: r0 = 0 ; H1: r0 > 0
F(14,14) = 0.961 , p = 0.529
95%-Confidence Interval for ICC Population Values:
-0.512 < ICC < 0.482
wpcr <- sma_reliability1 %>%
select(Subject.ID, rater, Worst_OI_PCR) %>%
pivot_wider(names_from = rater,
values_from = Worst_OI_PCR,
names_prefix = "rater") %>%
ungroup() %>%
select(-Subject.ID)
icc(wpcr, model= "twoway", type = "consistency", unit = "single")
Single Score Intraclass Correlation
Model: twoway
Type : consistency
Subjects = 15
Raters = 2
ICC(C,1) = 0.376
F-Test, H0: r0 = 0 ; H1: r0 > 0
F(14,14) = 2.21 , p = 0.0754
95%-Confidence Interval for ICC Population Values:
-0.149 < ICC < 0.736
w5pcr <- sma_reliability1 %>%
select(Subject.ID, rater, Worst_OI_5p_PCR) %>%
pivot_wider(names_from = rater,
values_from = Worst_OI_5p_PCR,
names_prefix = "rater") %>%
ungroup() %>%
select(-Subject.ID)
icc(w5pcr, model= "twoway", type = "consistency", unit = "single")
Single Score Intraclass Correlation
Model: twoway
Type : consistency
Subjects = 15
Raters = 2
ICC(C,1) = 0.543
F-Test, H0: r0 = 0 ; H1: r0 > 0
F(14,14) = 3.38 , p = 0.0148
95%-Confidence Interval for ICC Population Values:
0.063 < ICC < 0.819
mpesop <- sma_reliability1 %>%
select(Subject.ID, rater, Mean_PESop) %>%
pivot_wider(names_from = rater,
values_from = Mean_PESop,
names_prefix = "rater") %>%
ungroup() %>%
select(-Subject.ID)
icc(mpesop, model= "twoway", type = "consistency", unit = "average")
Average Score Intraclass Correlation
Model: twoway
Type : consistency
Subjects = 14
Raters = 2
ICC(C,2) = 0.716
F-Test, H0: r0 = 0 ; H1: r0 > 0
F(13,13) = 3.52 , p = 0.0154
95%-Confidence Interval for ICC Population Values:
0.116 < ICC < 0.909
bpesop <- sma_reliability1 %>%
select(Subject.ID, rater, Best_OI_PESop) %>%
pivot_wider(names_from = rater,
values_from = Best_OI_PESop,
names_prefix = "rater") %>%
ungroup() %>%
select(-Subject.ID)
icc(bpesop, model= "twoway", type = "consistency", unit = "single")
Single Score Intraclass Correlation
Model: twoway
Type : consistency
Subjects = 14
Raters = 2
ICC(C,1) = 0.19
F-Test, H0: r0 = 0 ; H1: r0 > 0
F(13,13) = 1.47 , p = 0.249
95%-Confidence Interval for ICC Population Values:
-0.359 < ICC < 0.641
wpesop <- sma_reliability1 %>%
select(Subject.ID, rater, Worst_OI_PESop) %>%
pivot_wider(names_from = rater,
values_from = Worst_OI_PESop,
names_prefix = "rater") %>%
ungroup() %>%
select(-Subject.ID)
icc(wpesop, model= "twoway", type = "consistency", unit = "single")
Single Score Intraclass Correlation
Model: twoway
Type : consistency
Subjects = 14
Raters = 2
ICC(C,1) = 0.0803
F-Test, H0: r0 = 0 ; H1: r0 > 0
F(13,13) = 1.17 , p = 0.388
95%-Confidence Interval for ICC Population Values:
-0.452 < ICC < 0.571
w5pesop <- sma_reliability1 %>%
select(Subject.ID, rater, Worst_OI_5p_PESop) %>%
pivot_wider(names_from = rater,
values_from = Worst_OI_5p_PESop,
names_prefix = "rater") %>%
ungroup() %>%
select(-Subject.ID)
icc(w5pesop, model= "twoway", type = "consistency", unit = "single")
Single Score Intraclass Correlation
Model: twoway
Type : consistency
Subjects = 14
Raters = 2
ICC(C,1) = -0.0128
F-Test, H0: r0 = 0 ; H1: r0 > 0
F(13,13) = 0.975 , p = 0.518
95%-Confidence Interval for ICC Population Values:
-0.523 < ICC < 0.505