Class: Statsample::Reliability::ICC
- Includes:
- Summarizable
- Defined in:
- lib/statsample/reliability/icc.rb
Overview
Intra-class correlation
According to Shrout & Fleiss (1979, p.422): “ICC is the correlation between one measurement (either a single rating or a mean of several ratings) on a target and another measurement obtained on that target”
Usage
require 'statsample'
size = 1000
a = Daru::Vector.new(size.times.map {rand(10)})
b = a.recode{|i|i+rand(4)-2}
c = a.recode{|i|i+rand(4)-2}
d = a.recode{|i|i+rand(4)-2}
ds = Daru::DataFrame.new({:a => a,:b => b,:c => c,:d => d})
# Use :type attribute to set type to summarize
icc=Statsample::Reliability::ICC.new(ds, :type=>:icc_1_k)
puts icc.summary
Reference
-
Shrout,P. & Fleiss, J. (1979). Intraclass Correlation: Uses in assessing rater reliability. Psychological Bulletin, 86(2), 420-428
-
McGraw, K. & Wong, S.P. (1996). Forming Inferences About Some Intraclass Correlation Coefficients. Psychological methods, 1(1), 30-46.
Instance Attribute Summary collapse
-
#alpha ⇒ Object
Returns the value of attribute alpha.
-
#df_bj ⇒ Object
readonly
Returns the value of attribute df_bj.
-
#df_bt ⇒ Object
readonly
Create a ICC analysis for a given dataset Each vector is a different measurement.
-
#df_residual ⇒ Object
readonly
Returns the value of attribute df_residual.
-
#df_wt ⇒ Object
readonly
Returns the value of attribute df_wt.
-
#f ⇒ Object
readonly
Returns the value of attribute f.
-
#g_rho ⇒ Object
Returns the value of attribute g_rho.
-
#icc_1 ⇒ Object
readonly
:section: McGraw and Wong ICC denominations.
-
#icc_1_1 ⇒ Object
readonly
:section: Shrout and Fleiss ICC denominations.
-
#icc_1_k ⇒ Object
readonly
Returns the value of attribute icc_1_k.
-
#icc_2_1 ⇒ Object
readonly
Returns the value of attribute icc_2_1.
-
#icc_2_k ⇒ Object
readonly
Returns the value of attribute icc_2_k.
-
#icc_3_1 ⇒ Object
readonly
Returns the value of attribute icc_3_1.
-
#icc_3_k ⇒ Object
readonly
Returns the value of attribute icc_3_k.
-
#icc_a_1 ⇒ Object
readonly
Returns the value of attribute icc_a_1.
-
#icc_a_k ⇒ Object
readonly
Returns the value of attribute icc_a_k.
-
#icc_c_1 ⇒ Object
readonly
Returns the value of attribute icc_c_1.
-
#icc_c_k ⇒ Object
readonly
Returns the value of attribute icc_c_k.
-
#icc_k ⇒ Object
readonly
Returns the value of attribute icc_k.
-
#k ⇒ Object
readonly
Returns the value of attribute k.
-
#lbound ⇒ Object
readonly
Returns the value of attribute lbound.
-
#ms_bj ⇒ Object
(also: #jms, #msc)
readonly
Returns the value of attribute ms_bj.
-
#ms_bt ⇒ Object
(also: #bms, #msr)
readonly
Returns the value of attribute ms_bt.
-
#ms_residual ⇒ Object
(also: #ems, #mse)
readonly
Returns the value of attribute ms_residual.
-
#ms_wt ⇒ Object
(also: #wms, #msw)
readonly
Returns the value of attribute ms_wt.
-
#n ⇒ Object
readonly
Returns the value of attribute n.
-
#name ⇒ Object
Returns the value of attribute name.
-
#r ⇒ Object
readonly
ICC value, set with :type.
-
#total_mean ⇒ Object
readonly
Returns the value of attribute total_mean.
-
#type ⇒ Object
Type of analysis, for easy summarization By default, set to :icc_1 * Shrout & Fleiss(1979) denominations * :icc_1_1 * :icc_2_1 * :icc_3_1 * :icc_1_k * :icc_2_k * :icc_3_k * McGraw & Wong (1996) denominations * :icc_1 * :icc_k * :icc_c_1 * :icc_c_k * :icc_a_1 * :icc_a_k.
-
#ubound ⇒ Object
readonly
Returns the value of attribute ubound.
Instance Method Summary collapse
- #compute ⇒ Object
-
#icc_1_1_ci(alpha = 0.05) ⇒ Object
Intervale of confidence for ICC (1,1).
- #icc_1_f(rho = 0.0) ⇒ Object
-
#icc_1_f_shrout ⇒ Object
F test for ICC Case 1.
-
#icc_1_k_ci(alpha = 0.05) ⇒ Object
Intervale of confidence for ICC (1,k).
-
#icc_1_k_f(rho = 0) ⇒ Object
One way random F, type k.
- #icc_2_1_ci(alpha = 0.05) ⇒ Object
-
#icc_2_1_ci_mcgraw(alpha = 0.05) ⇒ Object
Confidence interval ICC(A,1), McGawn.
-
#icc_2_1_fs(pp, alpha = 0.05) ⇒ Object
F* for ICC(2,1) and ICC(2,k).
-
#icc_2_f ⇒ Object
F test for ICC Case 2.
- #icc_2_k_ci(alpha = 0.05) ⇒ Object
- #icc_2_k_ci_mcgraw(alpha = 0.05) ⇒ Object
- #icc_2_k_ci_shrout(alpha = 0.05) ⇒ Object
- #icc_3_1_ci(alpha = 0.05) ⇒ Object
- #icc_3_f ⇒ Object
- #icc_3_k_ci(alpha = 0.05) ⇒ Object
- #icc_a_1_f(rho = 0) ⇒ Object
- #icc_a_k_f(rho = 0) ⇒ Object
- #icc_c_1_f(rho = 0) ⇒ Object
- #icc_c_k_ci(alpha = 0.05) ⇒ Object
- #icc_c_k_f(rho = 0) ⇒ Object
-
#initialize(ds, opts = Hash.new) ⇒ ICC
constructor
A new instance of ICC.
- #report_building(b) ⇒ Object
Methods included from Summarizable
Constructor Details
#initialize(ds, opts = Hash.new) ⇒ ICC
Returns a new instance of ICC.
98 99 100 101 102 103 104 105 106 107 108 109 110 111 |
# File 'lib/statsample/reliability/icc.rb', line 98 def initialize(ds, opts=Hash.new) ds.update @ds=ds.dup_only_valid @vectors=@ds.map { |e| e } @n=@ds.nrows @k=@ds.ncols compute @g_rho=0 @alpha=0.05 @icc_name=nil opts_default={:name=>"Intra-class correlation", :type=>:icc_1} @opts=opts_default.merge(opts) @opts.each{|k,v| self.send("#{k}=",v) if self.respond_to? k } end |
Instance Attribute Details
#alpha ⇒ Object
Returns the value of attribute alpha.
96 97 98 |
# File 'lib/statsample/reliability/icc.rb', line 96 def alpha @alpha end |
#df_bj ⇒ Object (readonly)
Returns the value of attribute df_bj.
33 34 35 |
# File 'lib/statsample/reliability/icc.rb', line 33 def df_bj @df_bj end |
#df_bt ⇒ Object (readonly)
Create a ICC analysis for a given dataset Each vector is a different measurement. Only uses complete data (listwise deletion).
31 32 33 |
# File 'lib/statsample/reliability/icc.rb', line 31 def df_bt @df_bt end |
#df_residual ⇒ Object (readonly)
Returns the value of attribute df_residual.
34 35 36 |
# File 'lib/statsample/reliability/icc.rb', line 34 def df_residual @df_residual end |
#df_wt ⇒ Object (readonly)
Returns the value of attribute df_wt.
32 33 34 |
# File 'lib/statsample/reliability/icc.rb', line 32 def df_wt @df_wt end |
#f ⇒ Object (readonly)
Returns the value of attribute f.
91 92 93 |
# File 'lib/statsample/reliability/icc.rb', line 91 def f @f end |
#g_rho ⇒ Object
Returns the value of attribute g_rho.
95 96 97 |
# File 'lib/statsample/reliability/icc.rb', line 95 def g_rho @g_rho end |
#icc_1 ⇒ Object (readonly)
:section: McGraw and Wong ICC denominations
61 62 63 |
# File 'lib/statsample/reliability/icc.rb', line 61 def icc_1 @icc_1 end |
#icc_1_1 ⇒ Object (readonly)
:section: Shrout and Fleiss ICC denominations
52 53 54 |
# File 'lib/statsample/reliability/icc.rb', line 52 def icc_1_1 @icc_1_1 end |
#icc_1_k ⇒ Object (readonly)
Returns the value of attribute icc_1_k.
55 56 57 |
# File 'lib/statsample/reliability/icc.rb', line 55 def icc_1_k @icc_1_k end |
#icc_2_1 ⇒ Object (readonly)
Returns the value of attribute icc_2_1.
53 54 55 |
# File 'lib/statsample/reliability/icc.rb', line 53 def icc_2_1 @icc_2_1 end |
#icc_2_k ⇒ Object (readonly)
Returns the value of attribute icc_2_k.
56 57 58 |
# File 'lib/statsample/reliability/icc.rb', line 56 def icc_2_k @icc_2_k end |
#icc_3_1 ⇒ Object (readonly)
Returns the value of attribute icc_3_1.
54 55 56 |
# File 'lib/statsample/reliability/icc.rb', line 54 def icc_3_1 @icc_3_1 end |
#icc_3_k ⇒ Object (readonly)
Returns the value of attribute icc_3_k.
57 58 59 |
# File 'lib/statsample/reliability/icc.rb', line 57 def icc_3_k @icc_3_k end |
#icc_a_1 ⇒ Object (readonly)
Returns the value of attribute icc_a_1.
63 64 65 |
# File 'lib/statsample/reliability/icc.rb', line 63 def icc_a_1 @icc_a_1 end |
#icc_a_k ⇒ Object (readonly)
Returns the value of attribute icc_a_k.
66 67 68 |
# File 'lib/statsample/reliability/icc.rb', line 66 def icc_a_k @icc_a_k end |
#icc_c_1 ⇒ Object (readonly)
Returns the value of attribute icc_c_1.
62 63 64 |
# File 'lib/statsample/reliability/icc.rb', line 62 def icc_c_1 @icc_c_1 end |
#icc_c_k ⇒ Object (readonly)
Returns the value of attribute icc_c_k.
65 66 67 |
# File 'lib/statsample/reliability/icc.rb', line 65 def icc_c_k @icc_c_k end |
#icc_k ⇒ Object (readonly)
Returns the value of attribute icc_k.
64 65 66 |
# File 'lib/statsample/reliability/icc.rb', line 64 def icc_k @icc_k end |
#k ⇒ Object (readonly)
Returns the value of attribute k.
69 70 71 |
# File 'lib/statsample/reliability/icc.rb', line 69 def k @k end |
#lbound ⇒ Object (readonly)
Returns the value of attribute lbound.
92 93 94 |
# File 'lib/statsample/reliability/icc.rb', line 92 def lbound @lbound end |
#ms_bj ⇒ Object (readonly) Also known as: jms, msc
Returns the value of attribute ms_bj.
38 39 40 |
# File 'lib/statsample/reliability/icc.rb', line 38 def ms_bj @ms_bj end |
#ms_bt ⇒ Object (readonly) Also known as: bms, msr
Returns the value of attribute ms_bt.
36 37 38 |
# File 'lib/statsample/reliability/icc.rb', line 36 def ms_bt @ms_bt end |
#ms_residual ⇒ Object (readonly) Also known as: ems, mse
Returns the value of attribute ms_residual.
39 40 41 |
# File 'lib/statsample/reliability/icc.rb', line 39 def ms_residual @ms_residual end |
#ms_wt ⇒ Object (readonly) Also known as: wms, msw
Returns the value of attribute ms_wt.
37 38 39 |
# File 'lib/statsample/reliability/icc.rb', line 37 def ms_wt @ms_wt end |
#n ⇒ Object (readonly)
Returns the value of attribute n.
69 70 71 |
# File 'lib/statsample/reliability/icc.rb', line 69 def n @n end |
#name ⇒ Object
Returns the value of attribute name.
97 98 99 |
# File 'lib/statsample/reliability/icc.rb', line 97 def name @name end |
#r ⇒ Object (readonly)
ICC value, set with :type
90 91 92 |
# File 'lib/statsample/reliability/icc.rb', line 90 def r @r end |
#total_mean ⇒ Object (readonly)
Returns the value of attribute total_mean.
70 71 72 |
# File 'lib/statsample/reliability/icc.rb', line 70 def total_mean @total_mean end |
#type ⇒ Object
Type of analysis, for easy summarization By default, set to :icc_1
-
Shrout & Fleiss(1979) denominations
-
:icc_1_1
-
:icc_2_1
-
:icc_3_1
-
:icc_1_k
-
:icc_2_k
-
:icc_3_k
-
-
McGraw & Wong (1996) denominations
-
:icc_1
-
:icc_k
-
:icc_c_1
-
:icc_c_k
-
:icc_a_1
-
:icc_a_k
-
88 89 90 |
# File 'lib/statsample/reliability/icc.rb', line 88 def type @type end |
#ubound ⇒ Object (readonly)
Returns the value of attribute ubound.
93 94 95 |
# File 'lib/statsample/reliability/icc.rb', line 93 def ubound @ubound end |
Instance Method Details
#compute ⇒ Object
197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 |
# File 'lib/statsample/reliability/icc.rb', line 197 def compute @df_bt=n-1 @df_wt=n*(k-1) @df_bj=k-1 @df_residual=(n-1)*(k-1) @total_mean=@vectors.inject(0){|ac,v| ac+v.sum}.quo(n*k) vm=@ds.vector_mean @ss_bt=k*vm.ss(@total_mean) @ms_bt=@ss_bt.quo(@df_bt) @ss_bj=n*@vectors.inject(0){|ac,v| ac+(v.mean-@total_mean).square} @ms_bj=@ss_bj.quo(@df_bj) @ss_wt=@vectors.inject(0){|ac,v| ac+(v-vm).ss(0)} @ms_wt=@ss_wt.quo(@df_wt) @ss_residual=@ss_wt-@ss_bj @ms_residual=@ss_residual.quo(@df_residual) ### # Shrout and Fleiss denomination ### # ICC(1,1) / ICC(1) @icc_1_1=(bms-wms).quo(bms+(k-1)*wms) # ICC(2,1) / ICC(A,1) @icc_2_1=(bms-ems).quo(bms+(k-1)*ems+k*(jms - ems).quo(n)) # ICC(3,1) / ICC(C,1) @icc_3_1=(bms-ems).quo(bms+(k-1)*ems) # ICC(1,K) / ICC(K) @icc_1_k=(bms-wms).quo(bms) # ICC(2,K) / ICC(A,k) @icc_2_k=(bms-ems).quo(bms+(jms-ems).quo(n)) # ICC(3,K) / ICC(C,k) = Cronbach's alpha @icc_3_k=(bms-ems).quo(bms) ### # McGraw and Wong ### end |
#icc_1_1_ci(alpha = 0.05) ⇒ Object
Intervale of confidence for ICC (1,1)
313 314 315 316 317 318 319 320 |
# File 'lib/statsample/reliability/icc.rb', line 313 def icc_1_1_ci(alpha=0.05) per=1-(0.5*alpha) fu=icc_1_f.f*Distribution::F.p_value(per, @df_wt, @df_bt) fl=icc_1_f.f.quo(Distribution::F.p_value(per, @df_bt, @df_wt)) [(fl-1).quo(fl+k-1), (fu-1).quo(fu+k-1)] end |
#icc_1_f(rho = 0.0) ⇒ Object
241 242 243 244 245 |
# File 'lib/statsample/reliability/icc.rb', line 241 def icc_1_f(rho=0.0) num=msr*(1-rho) den=msw*(1+(k-1)*rho) Statsample::Test::F.new(num, den, @df_bt, @df_wt) end |
#icc_1_f_shrout ⇒ Object
F test for ICC Case 1. Shrout and Fleiss
308 309 310 |
# File 'lib/statsample/reliability/icc.rb', line 308 def icc_1_f_shrout Statsample::Test::F.new(bms, wms, @df_bt, @df_wt) end |
#icc_1_k_ci(alpha = 0.05) ⇒ Object
Intervale of confidence for ICC (1,k)
323 324 325 326 327 328 |
# File 'lib/statsample/reliability/icc.rb', line 323 def icc_1_k_ci(alpha=0.05) per=1-(0.5*alpha) fu=icc_1_f.f*Distribution::F.p_value(per, @df_wt, @df_bt) fl=icc_1_f.f.quo(Distribution::F.p_value(per, @df_bt, @df_wt)) [1-1.quo(fl), 1-1.quo(fu)] end |
#icc_1_k_f(rho = 0) ⇒ Object
One way random F, type k
247 248 249 250 251 |
# File 'lib/statsample/reliability/icc.rb', line 247 def icc_1_k_f(rho=0) num=msr*(1-rho) den=msw Statsample::Test::F.new(num, den, @df_bt, @df_wt) end |
#icc_2_1_ci(alpha = 0.05) ⇒ Object
351 352 353 |
# File 'lib/statsample/reliability/icc.rb', line 351 def icc_2_1_ci(alpha=0.05) icc_2_1_ci_mcgraw end |
#icc_2_1_ci_mcgraw(alpha = 0.05) ⇒ Object
Confidence interval ICC(A,1), McGawn
357 358 359 360 361 362 |
# File 'lib/statsample/reliability/icc.rb', line 357 def icc_2_1_ci_mcgraw(alpha=0.05) fd,fu=icc_2_1_fs(icc_2_1,alpha) cl=(n*(msr-fd*mse)).quo(fd*(k*msc+(k*n-k-n)*mse)+n*msr) cu=(n*(fu*msr-mse)).quo(k*msc+(k*n-k-n)*mse+n*fu*msr) [cl,cu] end |
#icc_2_1_fs(pp, alpha = 0.05) ⇒ Object
F* for ICC(2,1) and ICC(2,k)
339 340 341 342 343 344 345 346 347 348 |
# File 'lib/statsample/reliability/icc.rb', line 339 def icc_2_1_fs(pp,alpha=0.05) fj=jms.quo(ems) per=1-(0.5*alpha) vn=(k-1)*(n-1)*((k*pp*fj+n*(1+(k-1)*pp)-k*pp)**2) vd=(n-1)*(k**2)*(pp**2)*(fj**2)+((n*(1+(k-1)*pp)-k*pp)**2) v=vn.quo(vd) f1=Distribution::F.p_value(per, n-1,v) f2=Distribution::F.p_value(per, v, n-1) [f1,f2] end |
#icc_2_f ⇒ Object
F test for ICC Case 2
331 332 333 |
# File 'lib/statsample/reliability/icc.rb', line 331 def icc_2_f Statsample::Test::F.new(bms, ems, @df_bt, @df_residual) end |
#icc_2_k_ci(alpha = 0.05) ⇒ Object
364 365 366 |
# File 'lib/statsample/reliability/icc.rb', line 364 def icc_2_k_ci(alpha=0.05) icc_2_k_ci_mcgraw(alpha) end |
#icc_2_k_ci_mcgraw(alpha = 0.05) ⇒ Object
368 369 370 371 372 373 374 375 |
# File 'lib/statsample/reliability/icc.rb', line 368 def icc_2_k_ci_mcgraw(alpha=0.05) f1,f2=icc_2_1_fs(icc_2_k,alpha) [ (n*(msr-f1*mse)).quo(f1*(msc-mse)+n*msr), (n*(f2*msr-mse)).quo(msc-mse+n*f2*msr) ] end |
#icc_2_k_ci_shrout(alpha = 0.05) ⇒ Object
376 377 378 379 |
# File 'lib/statsample/reliability/icc.rb', line 376 def icc_2_k_ci_shrout(alpha=0.05) ci=icc_2_1_ci(alpha) [(ci[0]*k).quo(1+(k-1)*ci[0]), (ci[1]*k).quo(1+(k-1)*ci[1])] end |
#icc_3_1_ci(alpha = 0.05) ⇒ Object
386 387 388 389 390 391 |
# File 'lib/statsample/reliability/icc.rb', line 386 def icc_3_1_ci(alpha=0.05) per=1-(0.5*alpha) fl=icc_3_f.f.quo(Distribution::F.p_value(per, @df_bt, @df_residual)) fu=icc_3_f.f*Distribution::F.p_value(per, @df_residual, @df_bt) [(fl-1).quo(fl+k-1), (fu-1).quo(fu+k-1)] end |
#icc_3_f ⇒ Object
382 383 384 |
# File 'lib/statsample/reliability/icc.rb', line 382 def icc_3_f Statsample::Test::F.new(bms, ems, @df_bt, @df_residual) end |
#icc_3_k_ci(alpha = 0.05) ⇒ Object
393 394 395 396 397 398 |
# File 'lib/statsample/reliability/icc.rb', line 393 def icc_3_k_ci(alpha=0.05) per=1-(0.5*alpha) fl=icc_3_f.f.quo(Distribution::F.p_value(per, @df_bt, @df_residual)) fu=icc_3_f.f*Distribution::F.p_value(per, @df_residual, @df_bt) [1-1.quo(fl),1-1.quo(fu)] end |
#icc_a_1_f(rho = 0) ⇒ Object
280 281 282 283 284 285 286 287 288 289 |
# File 'lib/statsample/reliability/icc.rb', line 280 def icc_a_1_f(rho=0) fj=jms.quo(ems) num=msr den=a(rho)*msc+b(rho)*mse pp = @icc_2_1 vn=(k-1)*(n-1)*((k*pp*fj+n*(1+(k-1)*pp)-k*pp)**2) vd=(n-1)*(k**2)*(pp**2)*(fj**2)+((n*(1+(k-1)*pp)-k*pp)**2) v=vn.quo(vd) Statsample::Test::F.new(num, den, @df_bt, v) end |
#icc_a_k_f(rho = 0) ⇒ Object
291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 |
# File 'lib/statsample/reliability/icc.rb', line 291 def icc_a_k_f(rho=0) num=msr den=c(rho)*msc+d(rho)*mse fj=jms.quo(ems) pp = @icc_2_k vn=(k-1)*(n-1)*((k*pp*fj+n*(1+(k-1)*pp)-k*pp)**2) vd=(n-1)*(k**2)*(pp**2)*(fj**2)+((n*(1+(k-1)*pp)-k*pp)**2) v=vn.quo(vd) Statsample::Test::F.new(num, den, @df_bt,v) end |
#icc_c_1_f(rho = 0) ⇒ Object
253 254 255 256 257 |
# File 'lib/statsample/reliability/icc.rb', line 253 def icc_c_1_f(rho=0) num=msr*(1-rho) den=mse*(1+(k-1)*rho) Statsample::Test::F.new(num, den, @df_bt, @df_residual) end |
#icc_c_k_ci(alpha = 0.05) ⇒ Object
400 401 402 403 404 405 |
# File 'lib/statsample/reliability/icc.rb', line 400 def icc_c_k_ci(alpha=0.05) per=1-(0.5*alpha) fl=icc_c_k_f.f.quo(Distribution::F.p_value(per, @df_bt, @df_residual)) fu=icc_c_k_f.f*Distribution::F.p_value(per, @df_residual, @df_bt) [1-1.quo(fl),1-1.quo(fu)] end |
#icc_c_k_f(rho = 0) ⇒ Object
258 259 260 261 262 |
# File 'lib/statsample/reliability/icc.rb', line 258 def icc_c_k_f(rho=0) num=(1-rho) den=1-@icc_3_k Statsample::Test::F.new(num, den, @df_bt, @df_residual) end |
#report_building(b) ⇒ Object
406 407 408 409 410 411 412 413 |
# File 'lib/statsample/reliability/icc.rb', line 406 def report_building(b) b.section(:name=>name) do |s| s.text @icc_name s.text _("ICC: %0.4f") % @r s.parse_element(@f) s.text _("CI (%0.2f): [%0.4f - %0.4f]") % [(1-@alpha)*100, @lbound, @ubound] end end |