Skip to content

Commit

Permalink
Update ICC functions
Browse files Browse the repository at this point in the history
  • Loading branch information
jmgirard committed Nov 14, 2022
1 parent 1a18a5b commit 25489c0
Show file tree
Hide file tree
Showing 6 changed files with 73 additions and 86 deletions.
27 changes: 7 additions & 20 deletions DARMA.prj
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
<deployment-project plugin="plugin.ezdeploy" plugin-version="1.0">
<configuration file="D:\GitHub\DARMA\DARMA.prj" location="D:\GitHub\DARMA" name="DARMA" target="target.ezdeploy.standalone" target-name="Application Compiler">
<configuration file="C:\Users\j553g371\DARMA\DARMA.prj" location="C:\Users\j553g371\DARMA" name="DARMA" target="target.ezdeploy.standalone" target-name="Application Compiler">
<param.appname>DARMA</param.appname>
<param.icon />
<param.icons />
<param.version>6.09</param.version>
<param.version>6.10</param.version>
<param.authnamewatermark>Jeffrey M. Girard</param.authnamewatermark>
<param.email>me@jmgirard.com</param.email>
<param.company />
Expand Down Expand Up @@ -91,27 +91,14 @@
<fileset.package />
<fileset.depfun />
<build-deliverables>
<file location="${PROJECT_ROOT}\DARMA\for_testing" name="splash.png" optional="false">D:\GitHub\DARMA\DARMA\for_testing\splash.png</file>
<file location="${PROJECT_ROOT}\DARMA\for_testing" name="DARMA.exe" optional="false">D:\GitHub\DARMA\DARMA\for_testing\DARMA.exe</file>
<file location="${PROJECT_ROOT}\DARMA\for_testing" name="readme.txt" optional="true">D:\GitHub\DARMA\DARMA\for_testing\readme.txt</file>
<file location="${PROJECT_ROOT}\DARMA\for_testing" name="readme.txt" optional="true">C:\Users\j553g371\DARMA\DARMA\for_testing\readme.txt</file>
<file location="${PROJECT_ROOT}\DARMA\for_testing" name="splash.png" optional="false">C:\Users\j553g371\DARMA\DARMA\for_testing\splash.png</file>
<file location="${PROJECT_ROOT}\DARMA\for_testing" name="DARMA.exe" optional="false">C:\Users\j553g371\DARMA\DARMA\for_testing\DARMA.exe</file>
</build-deliverables>
<workflow />
<matlab>
<root>C:\Program Files\MATLAB\R2019b</root>
<toolboxes>
<toolbox name="matlabcoder" />
<toolbox name="gpucoder" />
</toolboxes>
<toolbox>
<matlabcoder>
<enabled>true</enabled>
</matlabcoder>
</toolbox>
<toolbox>
<gpucoder>
<enabled>true</enabled>
</gpucoder>
</toolbox>
<root>C:\Program Files\MATLAB\R2022b</root>
<toolboxes />
</matlab>
<platform>
<unix>false</unix>
Expand Down
36 changes: 18 additions & 18 deletions Functions/ICC_A_1.m
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
function [ICC,LB,UB] = ICC_A_1(DATA,ALPHA)
function [ICC, LB, UB] = ICC_A_1(DATA, ALPHA)
% Calculate the single rater agreement intraclass correlation coefficient
% [ICC,LB,UB] = ICC_A_1(DATA)
%
Expand All @@ -16,31 +16,31 @@
%
% Reference: McGraw, K. O., & Wong, S. P. (1996).
% Forming inferences about some intraclass correlation coefficients.
% Psychological Methods, 1(1), 30–46.
% Psychological Methods, 1(1), 30–46.

%% Remove any missing values
[rowindex,~] = find(~isfinite(DATA));
DATA(rowindex,:) = [];
[rowindex, ~] = find(~isfinite(DATA));
DATA(rowindex, :) = [];
%% Calculate mean squares from two-way ANOVA
[~,tbl,~] = anova2(DATA,1,'off');
MSC = tbl{2,4};
MSR = tbl{3,4};
MSE = tbl{4,4};
[~, tbl, ~] = anova2(DATA, 1, 'off');
MSC = max([0, tbl{2, 4}]);
MSR = max([0, tbl{3, 4}]);
MSE = max([0, tbl{4, 4}]);
%% Calculate single rater agreement ICC
[n,k] = size(DATA);
ICC = (MSR - MSE) / (MSR + MSE*(k - 1) + (k/n)*(MSC - MSE));
[n, k] = size(DATA);
ICC = (MSR - MSE) / (MSR + MSE * (k - 1) + (k / n) * (MSC - MSE));
%% Calculate the confidence interval if requested
if nargout > 1
if nargin < 2
ALPHA = 0.05;
end
a = (k*ICC) / (n*(1 - ICC));
b = 1 + (k*ICC*(n - 1))/(n*(1 - ICC));
v = ((a*MSC + b*MSE)^2) / (((a*MSC)^2)/(k - 1) + ((b*MSE)^2)/((n - 1)*(k - 1)));
FL = finv((1 - ALPHA/2),(n - 1),v);
FU = finv((1 - ALPHA/2),v,(n - 1));
LB = (n*(MSR - FL*MSE)) / (FL*(k*MSC + MSE*(k*n - k - n)) + n*MSR);
UB = (n*(FU*MSR - MSE)) / (k*MSC + MSE*(k*n - k - n) + n*FU*MSR);
a = (k * ICC) / (n * (1 - ICC));
b = 1 + (k * ICC * (n - 1)) / (n * (1 - ICC));
v = ((a * MSC + b * MSE) ^ 2) / (((a * MSC) ^ 2) / (k - 1) + ((b * MSE) ^ 2) / ((n - 1) * (k - 1)));
FL = finv((1 - ALPHA / 2), (n - 1), v);
FU = finv((1 - ALPHA / 2), v, (n - 1));
LB = (n * (MSR - FL * MSE)) / (FL * (k * MSC + MSE * (k * n - k - n)) + n * MSR);
UB = (n * (FU * MSR - MSE)) / (k * MSC + MSE * (k * n - k - n) + n * FU * MSR);
end

end
end
38 changes: 19 additions & 19 deletions Functions/ICC_A_k.m
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
function [ICC,LB,UB] = ICC_A_k(DATA,ALPHA)
function [ICC, LB, UB] = ICC_A_k(DATA, ALPHA)
% Calculate the average rater agreement intraclass correlation coefficient
% [ICC,LB,UB] = ICC_A_k(DATA)
% [ICC, LB, UB] = ICC_A_k(DATA)
%
% DATA is a numerical matrix of ratings (missing values = NaN).
% Each row is a single item and each column is a single rater.
Expand All @@ -16,31 +16,31 @@
%
% Reference: McGraw, K. O., & Wong, S. P. (1996).
% Forming inferences about some intraclass correlation coefficients.
% Psychological Methods, 1(1), 30–46.
% Psychological Methods, 1(1), 30–46.

%% Remove any missing values
[rowindex,~] = find(~isfinite(DATA));
DATA(rowindex,:) = [];
[rowindex, ~] = find(~isfinite(DATA));
DATA(rowindex, :) = [];
%% Calculate mean squares from two-way ANOVA
[~,tbl,~] = anova2(DATA,1,'off');
MSC = tbl{2,4};
MSR = tbl{3,4};
MSE = tbl{4,4};
[~, tbl, ~] = anova2(DATA, 1, 'off');
MSC = max([0 tbl{2, 4}]);
MSR = max([0 tbl{3, 4}]);
MSE = max([0 tbl{4, 4}]);
%% Calculate average rater agreement ICC
[n,k] = size(DATA);
ICC = (MSR - MSE) / (MSR + (MSC - MSE)/n);
[n, k] = size(DATA);
ICC = (MSR - MSE) / (MSR + (MSC - MSE) / n);
%% Calculate the confidence interval if requested
if nargout > 1
if nargin < 2
ALPHA = 0.05;
end
c = ICC / (n*1 - ICC);
d = 1 + (p*(n - 1)) / (n*(1 - ICC));
v = ((c*MSC + d*MSE)^2) / (((c*MSC)^2)/(k - 1) + ((d*MSE)^2)/((n - 1)*(k - 1)));
FL = finv((1 - ALPHA/2),(n - 1),v);
FU = finv((1 - ALPHA/2),v,(n - 1));
LB = (n*(MSR - FL*MSE)) / (FL*(MSC - MSE) + n*MSR);
UB = (n*(FU*MSR - MSE)) / (MSC - MSE + n*FU*MSR);
c = ICC / (n * (1 - ICC));
d = 1 + (ICC * (n - 1)) / (n * (1 - ICC));
v = ((c * MSC + d * MSE) ^ 2) / (((c * MSC) ^ 2) / (k - 1) + ((d * MSE) ^ 2) / ((n - 1) * (k - 1)));
FL = finv((1 - ALPHA / 2), (n - 1), v);
FU = finv((1 - ALPHA / 2), v, (n - 1));
LB = (n * (MSR - FL * MSE)) / (FL * (MSC - MSE) + n * MSR);
UB = (n * (FU * MSR - MSE)) / (MSC - MSE + n * FU * MSR);
end

end
end
26 changes: 13 additions & 13 deletions Functions/ICC_C_1.m
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
function [ICC,LB,UB] = ICC_C_1(DATA,ALPHA)
function [ICC, LB, UB] = ICC_C_1(DATA, ALPHA)
% Calculate the single rater consistency intraclass correlation coefficient
% [ICC,LB,UB] = ICC_C_1(DATA)
% [ICC, LB, UB] = ICC_C_1(DATA)
%
% DATA is a numerical matrix of ratings (missing values = NaN).
% Each row is a single item and each column is a single rater.
Expand All @@ -16,27 +16,27 @@
%
% Reference: McGraw, K. O., & Wong, S. P. (1996).
% Forming inferences about some intraclass correlation coefficients.
% Psychological Methods, 1(1), 30–46.
% Psychological Methods, 1(1), 30–46.

%% Remove any missing values
[rowindex,~] = find(~isfinite(DATA));
DATA(rowindex,:) = [];
[rowindex, ~] = find(~isfinite(DATA));
DATA(rowindex, :) = [];
%% Calculate mean squares from two-way ANOVA
[~,tbl,~] = anova2(DATA,1,'off');
MSR = tbl{3,4};
MSE = tbl{4,4};
[~, tbl, ~] = anova2(DATA, 1, 'off');
MSR = max([0, tbl{3, 4}]);
MSE = max([0, tbl{4, 4}]);
%% Calculate single rater consistency ICC
[n,k] = size(DATA);
ICC = (MSR - MSE) / (MSR + MSE*(k-1));
[n, k] = size(DATA);
ICC = (MSR - MSE) / (MSR + MSE * (k - 1));
%% Calculate the confidence interval if requested
if nargout > 1
if nargin < 2
ALPHA = 0.05;
end
FL = (MSR/MSE) / finv((1-ALPHA/2),(n - 1),(n - 1)*(k - 1));
FU = (MSR/MSE) / finv((1-ALPHA/2),(n - 1)*(k - 1),(n - 1));
FL = (MSR / MSE) / finv((1 - ALPHA / 2), (n - 1), (n - 1) * (k - 1));
FU = (MSR / MSE) / finv((1 - ALPHA / 2), (n - 1) * (k - 1), (n - 1));
LB = (FL - 1) / (FL + k - 1);
UB = (FU - 1) / (FU + k - 1);
end

end
end
28 changes: 14 additions & 14 deletions Functions/ICC_C_k.m
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
function [ICC,LB,UB] = ICC_C_k(DATA,ALPHA)
function [ICC, LB, UB] = ICC_C_k(DATA, ALPHA)
% Calculate the average rater consistency intraclass correlation coefficient
% [ICC,LB,UB] = ICC_C_k(DATA)
% [ICC, LB, UB] = ICC_C_k(DATA)
%
% DATA is a numerical matrix of ratings (missing values = NaN).
% Each row is a single item and each column is a single rater.
Expand All @@ -16,27 +16,27 @@
%
% Reference: McGraw, K. O., & Wong, S. P. (1996).
% Forming inferences about some intraclass correlation coefficients.
% Psychological Methods, 1(1), 30–46.
% Psychological Methods, 1(1), 30–46.

%% Remove any missing values
[rowindex,~] = find(~isfinite(DATA));
DATA(rowindex,:) = [];
[rowindex, ~] = find(~isfinite(DATA));
DATA(rowindex, :) = [];
%% Calculate mean squares from two-way ANOVA
[~,tbl,~] = anova2(DATA,1,'off');
MSR = tbl{3,4};
MSE = tbl{4,4};
[~, tbl, ~] = anova2(DATA, 1, 'off');
MSR = max([0, tbl{3, 4}]);
MSE = max([0, tbl{4, 4}]);
%% Calculate average rater consistency ICC
[n,k] = size(DATA);
[n, k] = size(DATA);
ICC = (MSR - MSE) / MSR;
%% Calculate the confidence interval if requested
if nargout > 1
if nargin < 2
ALPHA = 0.05;
end
FL = (MSR/MSE) / finv((1-ALPHA/2),(n - 1),(n - 1)*(k - 1));
FU = (MSR/MSE) / finv((1-ALPHA/2),(n - 1)*(k - 1),(n - 1));
LB = 1 - 1/FL;
UB = 1 - 1/FU;
FL = (MSR / MSE) / finv((1 - ALPHA / 2), (n - 1), (n - 1) * (k - 1));
FU = (MSR / MSE) / finv((1 - ALPHA / 2), (n - 1) * (k - 1), (n - 1));
LB = 1 - 1 / FL;
UB = 1 - 1 / FU;
end

end
end
4 changes: 2 additions & 2 deletions fig_launcher.m
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@
% License: https://github.com/jmgirard/DARMA/blob/master/LICENSE.txt

global version year;
version = 6.09;
year = 2019;
version = 6.10;
year = 2022;
% Create and center main window
defaultBackground = get(0,'defaultUicontrolBackgroundColor');
handles.figure_launcher = figure( ...
Expand Down

0 comments on commit 25489c0

Please sign in to comment.