R version 3.0.2 (2013-09-25) -- "Frisbee Sailing" Copyright (C) 2013 The R Foundation for Statistical Computing Platform: i686-pc-linux-gnu (32-bit) R is free software and comes with ABSOLUTELY NO WARRANTY. You are welcome to redistribute it under certain conditions. Type 'license()' or 'licence()' for distribution details. R is a collaborative project with many contributors. Type 'contributors()' for more information and 'citation()' on how to cite R or R packages in publications. Type 'demo()' for some demos, 'help()' for on-line help, or 'help.start()' for an HTML browser interface to help. Type 'q()' to quit R. > x <- c(329.6 + ,327.2 + ,326.3 + ,315.4 + ,308.6 + ,302.6 + ,295.6 + ,291.5 + ,288.1 + ,281.1 + ,282.4 + ,284.9 + ,274.2 + ,265.7 + ,259.7 + ,253.7 + ,249.5 + ,244.6 + ,243 + ,239.2 + ,235.7 + ,231.1 + ,226.7 + ,221.7 + ,219.4 + ,214.2 + ,211.7 + ,207.7 + ,204.7 + ,201.2 + ,199.9 + ,197.8 + ,195.2 + ,194.3 + ,192.8 + ,188.5 + ,183.2 + ,181.4 + ,180.5 + ,180.2 + ,179.2 + ,177.1 + ,174.2 + ,172.1 + ,171.1 + ,169.8 + ,169.5 + ,165.5 + ,167.2 + ,167.6 + ,171.8 + ,175.9 + ,180 + ,184.9 + ,184.6 + ,187.6 + ,191.5 + ,195.5 + ,201.6 + ,203.5 + ,209.1 + ,217.1 + ,227.6 + ,237.2 + ,245.6 + ,253.2 + ,260.5 + ,266.1 + ,273 + ,280.8 + ,284.4 + ,288.5 + ,284.8 + ,288.9 + ,299.6 + ,307.8 + ,311.4 + ,322 + ,317.8 + ,319.1 + ,322.3 + ,323.1 + ,322.8 + ,325 + ,323.2 + ,318.8 + ,328.2 + ,329.2 + ,326.5 + ,330.1 + ,323.8 + ,321.8 + ,319.6 + ,315.5 + ,310.7 + ,306.5 + ,295.1 + ,288 + ,293.9 + ,289.3 + ,287.4 + ,282.6 + ,276.9 + ,272.7 + ,267.9 + ,262.8 + ,256.6 + ,250.7 + ,243.2 + ,235.1 + ,229.6 + ,222.9 + ,217.6 + ,214.1 + ,210.8 + ,208 + ,202.6 + ,199 + ,195.5 + ,192.1 + ,189.4 + ,182.4 + ,179.2 + ,176.5 + ,174 + ,171.7 + ,169.8 + ,168.3 + ,166.4 + ,165.9 + ,166.4 + ,170.6 + ,177.6 + ,183.4 + ,191.9 + ,201.7 + ,210.6 + ,221.6 + ,232.2 + ,240.4 + ,248.4 + ,258.5 + ,265 + ,271.7 + ,273.9 + ,277.8 + ,273.4 + ,270.9 + ,268.3 + ,264.7 + ,264.1 + ,264.5 + ,262.2 + ,258.6 + ,259.4 + ,262.7 + ,264.9 + ,260.5 + ,256.4 + ,254.7 + ,254.8 + ,255.3 + ,256.8 + ,258.7 + ,259.8 + ,261.7 + ,264.7 + ,269.1 + ,279 + ,283.4 + ,285.5 + ,288.2 + ,292.1 + ,295.6 + ,302.4 + ,308.5 + ,314.1 + ,319.8 + ,329.7 + ,339.7) > ylimmax = '' > ylimmin = '' > main = 'Robustness of Central Tendency' > #'GNU S' R Code compiled by R2WASP v. 1.2.291 () > #Author: root > #To cite this work: Wessa, P., (2012), Central Tendency (v1.0.4) in Free Statistics Software (v$_version), Office for Research Development and Education, URL http://www.wessa.net/rwasp_centraltendency.wasp/ > #Source of accompanying publication: Office for Research, Development, and Education > # > geomean <- function(x) { + return(exp(mean(log(x)))) + } > harmean <- function(x) { + return(1/mean(1/x)) + } > quamean <- function(x) { + return(sqrt(mean(x*x))) + } > winmean <- function(x) { + x <-sort(x[!is.na(x)]) + n<-length(x) + denom <- 3 + nodenom <- n/denom + if (nodenom>40) denom <- n/40 + sqrtn = sqrt(n) + roundnodenom = floor(nodenom) + win <- array(NA,dim=c(roundnodenom,2)) + for (j in 1:roundnodenom) { + win[j,1] <- (j*x[j+1]+sum(x[(j+1):(n-j)])+j*x[n-j])/n + win[j,2] <- sd(c(rep(x[j+1],j),x[(j+1):(n-j)],rep(x[n-j],j)))/sqrtn + } + return(win) + } > trimean <- function(x) { + x <-sort(x[!is.na(x)]) + n<-length(x) + denom <- 3 + nodenom <- n/denom + if (nodenom>40) denom <- n/40 + sqrtn = sqrt(n) + roundnodenom = floor(nodenom) + tri <- array(NA,dim=c(roundnodenom,2)) + for (j in 1:roundnodenom) { + tri[j,1] <- mean(x,trim=j/n) + tri[j,2] <- sd(x[(j+1):(n-j)]) / sqrt(n-j*2) + } + return(tri) + } > midrange <- function(x) { + return((max(x)+min(x))/2) + } > q1 <- function(data,n,p,i,f) { + np <- n*p; + i <<- floor(np) + f <<- np - i + qvalue <- (1-f)*data[i] + f*data[i+1] + } > q2 <- function(data,n,p,i,f) { + np <- (n+1)*p + i <<- floor(np) + f <<- np - i + qvalue <- (1-f)*data[i] + f*data[i+1] + } > q3 <- function(data,n,p,i,f) { + np <- n*p + i <<- floor(np) + f <<- np - i + if (f==0) { + qvalue <- data[i] + } else { + qvalue <- data[i+1] + } + } > q4 <- function(data,n,p,i,f) { + np <- n*p + i <<- floor(np) + f <<- np - i + if (f==0) { + qvalue <- (data[i]+data[i+1])/2 + } else { + qvalue <- data[i+1] + } + } > q5 <- function(data,n,p,i,f) { + np <- (n-1)*p + i <<- floor(np) + f <<- np - i + if (f==0) { + qvalue <- data[i+1] + } else { + qvalue <- data[i+1] + f*(data[i+2]-data[i+1]) + } + } > q6 <- function(data,n,p,i,f) { + np <- n*p+0.5 + i <<- floor(np) + f <<- np - i + qvalue <- data[i] + } > q7 <- function(data,n,p,i,f) { + np <- (n+1)*p + i <<- floor(np) + f <<- np - i + if (f==0) { + qvalue <- data[i] + } else { + qvalue <- f*data[i] + (1-f)*data[i+1] + } + } > q8 <- function(data,n,p,i,f) { + np <- (n+1)*p + i <<- floor(np) + f <<- np - i + if (f==0) { + qvalue <- data[i] + } else { + if (f == 0.5) { + qvalue <- (data[i]+data[i+1])/2 + } else { + if (f < 0.5) { + qvalue <- data[i] + } else { + qvalue <- data[i+1] + } + } + } + } > midmean <- function(x,def) { + x <-sort(x[!is.na(x)]) + n<-length(x) + if (def==1) { + qvalue1 <- q1(x,n,0.25,i,f) + qvalue3 <- q1(x,n,0.75,i,f) + } + if (def==2) { + qvalue1 <- q2(x,n,0.25,i,f) + qvalue3 <- q2(x,n,0.75,i,f) + } + if (def==3) { + qvalue1 <- q3(x,n,0.25,i,f) + qvalue3 <- q3(x,n,0.75,i,f) + } + if (def==4) { + qvalue1 <- q4(x,n,0.25,i,f) + qvalue3 <- q4(x,n,0.75,i,f) + } + if (def==5) { + qvalue1 <- q5(x,n,0.25,i,f) + qvalue3 <- q5(x,n,0.75,i,f) + } + if (def==6) { + qvalue1 <- q6(x,n,0.25,i,f) + qvalue3 <- q6(x,n,0.75,i,f) + } + if (def==7) { + qvalue1 <- q7(x,n,0.25,i,f) + qvalue3 <- q7(x,n,0.75,i,f) + } + if (def==8) { + qvalue1 <- q8(x,n,0.25,i,f) + qvalue3 <- q8(x,n,0.75,i,f) + } + midm <- 0 + myn <- 0 + roundno4 <- round(n/4) + round3no4 <- round(3*n/4) + for (i in 1:n) { + if ((x[i]>=qvalue1) & (x[i]<=qvalue3)){ + midm = midm + x[i] + myn = myn + 1 + } + } + midm = midm / myn + return(midm) + } > (arm <- mean(x)) [1] 247.7583 > sqrtn <- sqrt(length(x)) > (armse <- sd(x) / sqrtn) [1] 3.813281 > (armose <- arm / armse) [1] 64.97248 > (geo <- geomean(x)) [1] 242.3119 > (har <- harmean(x)) [1] 236.7621 > (qua <- quamean(x)) [1] 252.9566 > (win <- winmean(x)) [,1] [,2] [1,] 247.7072 3.806197 [2,] 247.7083 3.804995 [3,] 247.7067 3.804795 [4,] 247.7156 3.801615 [5,] 247.6989 3.796995 [6,] 247.6889 3.790328 [7,] 247.7083 3.781722 [8,] 247.7128 3.779151 [9,] 247.6478 3.771651 [10,] 247.6256 3.758952 [11,] 247.6194 3.751323 [12,] 247.6528 3.746028 [13,] 247.6383 3.742776 [14,] 247.6228 3.735785 [15,] 247.7561 3.715272 [16,] 247.7561 3.711319 [17,] 247.7278 3.672778 [18,] 247.7678 3.664049 [19,] 247.7783 3.651413 [20,] 247.8006 3.641784 [21,] 247.8706 3.609144 [22,] 247.5894 3.579029 [23,] 247.6789 3.566800 [24,] 247.5322 3.545689 [25,] 247.1989 3.502393 [26,] 247.2278 3.478274 [27,] 247.0628 3.430605 [28,] 247.1717 3.415984 [29,] 247.0911 3.401334 [30,] 247.0744 3.358972 [31,] 246.4544 3.288348 [32,] 246.8989 3.235271 [33,] 246.5506 3.169781 [34,] 245.9650 3.083055 [35,] 246.3733 3.041548 [36,] 246.3533 3.024470 [37,] 246.1478 2.998253 [38,] 245.9156 2.949853 [39,] 246.1106 2.905962 [40,] 245.8217 2.843844 [41,] 245.7989 2.829285 [42,] 245.7056 2.821359 [43,] 246.1833 2.761067 [44,] 246.4522 2.730388 [45,] 246.6522 2.706476 [46,] 246.8311 2.661462 [47,] 246.4394 2.609577 [48,] 246.3061 2.593676 [49,] 246.5239 2.567935 [50,] 246.6628 2.534853 [51,] 246.7194 2.479090 [52,] 247.3550 2.378566 [53,] 247.3844 2.365472 [54,] 247.3244 2.302716 [55,] 247.6911 2.252865 [56,] 247.1933 2.201538 [57,] 247.0983 2.144706 [58,] 247.5817 2.050596 [59,] 246.7294 1.977899 [60,] 247.5961 1.881935 > (tri <- trimean(x)) [,1] [,2] [1,] 247.7039 3.793094 [2,] 247.7006 3.778843 [3,] 247.6966 3.764017 [4,] 247.6930 3.747988 [5,] 247.6871 3.731504 [6,] 247.6845 3.714695 [7,] 247.6837 3.697779 [8,] 247.6799 3.680909 [9,] 247.6753 3.662953 [10,] 247.6788 3.644503 [11,] 247.6848 3.626125 [12,] 247.6917 3.607047 [13,] 247.6917 3.586868 [14,] 247.7007 3.565225 [15,] 247.7073 3.542383 [16,] 247.7034 3.519613 [17,] 247.6993 3.495143 [18,] 247.6972 3.472192 [19,] 247.6923 3.447890 [20,] 247.6864 3.422450 [21,] 247.6790 3.395451 [22,] 247.6669 3.368786 [23,] 247.6716 3.342170 [24,] 247.6712 3.313964 [25,] 247.6792 3.284754 [26,] 247.6792 3.256281 [27,] 247.7325 3.226905 [28,] 247.7685 3.198459 [29,] 247.8000 3.168191 [30,] 247.8367 3.135871 [31,] 247.8754 3.103607 [32,] 247.9466 3.073602 [33,] 247.9982 3.044668 [34,] 248.0687 3.017709 [35,] 248.1700 2.994441 [36,] 248.2556 2.971664 [37,] 248.3453 2.947235 [38,] 248.4481 2.921641 [39,] 248.5657 2.896552 [40,] 248.6790 2.871745 [41,] 248.8102 2.848528 [42,] 248.9479 2.823028 [43,] 249.0957 2.794302 [44,] 249.2283 2.766961 [45,] 249.3544 2.738301 [46,] 249.4773 2.707452 [47,] 249.5977 2.676101 [48,] 249.7417 2.644455 [49,] 249.7417 2.608964 [50,] 250.0538 2.570304 [51,] 250.2103 2.528691 [52,] 250.2103 2.486077 [53,] 250.5135 2.447837 [54,] 250.6611 2.403967 [55,] 250.8200 2.359375 [56,] 250.9706 2.312738 [57,] 251.1545 2.262875 [58,] 251.3547 2.210308 [59,] 251.5435 2.160624 [60,] 251.7883 2.108902 > (midr <- midrange(x)) [1] 252.6 > midm <- array(NA,dim=8) > for (j in 1:8) midm[j] <- midmean(x,j) > midm [1] 248.8011 249.3544 248.8011 249.3544 249.3544 248.8011 249.3544 249.2283 > postscript(file="/var/wessaorg/rcomp/tmp/1zdf01393268961.ps",horizontal=F,onefile=F,pagecentre=F,paper="special",width=8.3333333333333,height=5.5555555555556) > lb <- win[,1] - 2*win[,2] > ub <- win[,1] + 2*win[,2] > if ((ylimmin == '') | (ylimmax == '')) plot(win[,1],type='b',main=main, xlab='j', pch=19, ylab='Winsorized Mean(j/n)', ylim=c(min(lb),max(ub))) else plot(win[,1],type='l',main=main, xlab='j', pch=19, ylab='Winsorized Mean(j/n)', ylim=c(ylimmin,ylimmax)) > lines(ub,lty=3) > lines(lb,lty=3) > grid() > dev.off() null device 1 > postscript(file="/var/wessaorg/rcomp/tmp/2j2rr1393268961.ps",horizontal=F,onefile=F,pagecentre=F,paper="special",width=8.3333333333333,height=5.5555555555556) > lb <- tri[,1] - 2*tri[,2] > ub <- tri[,1] + 2*tri[,2] > if ((ylimmin == '') | (ylimmax == '')) plot(tri[,1],type='b',main=main, xlab='j', pch=19, ylab='Trimmed Mean(j/n)', ylim=c(min(lb),max(ub))) else plot(tri[,1],type='l',main=main, xlab='j', pch=19, ylab='Trimmed Mean(j/n)', ylim=c(ylimmin,ylimmax)) > lines(ub,lty=3) > lines(lb,lty=3) > grid() > dev.off() null device 1 > > #Note: the /var/wessaorg/rcomp/createtable file can be downloaded at http://www.wessa.net/cretab > load(file="/var/wessaorg/rcomp/createtable") > > a<-table.start() > a<-table.row.start(a) > a<-table.element(a,'Central Tendency - Ungrouped Data',4,TRUE) > a<-table.row.end(a) > a<-table.row.start(a) > a<-table.element(a,'Measure',header=TRUE) > a<-table.element(a,'Value',header=TRUE) > a<-table.element(a,'S.E.',header=TRUE) > a<-table.element(a,'Value/S.E.',header=TRUE) > a<-table.row.end(a) > a<-table.row.start(a) > a<-table.element(a,hyperlink('http://www.xycoon.com/arithmetic_mean.htm', 'Arithmetic Mean', 'click to view the definition of the Arithmetic Mean'),header=TRUE) > a<-table.element(a,arm) > a<-table.element(a,hyperlink('http://www.xycoon.com/arithmetic_mean_standard_error.htm', armse, 'click to view the definition of the Standard Error of the Arithmetic Mean')) > a<-table.element(a,armose) > a<-table.row.end(a) > a<-table.row.start(a) > a<-table.element(a,hyperlink('http://www.xycoon.com/geometric_mean.htm', 'Geometric Mean', 'click to view the definition of the Geometric Mean'),header=TRUE) > a<-table.element(a,geo) > a<-table.element(a,'') > a<-table.element(a,'') > a<-table.row.end(a) > a<-table.row.start(a) > a<-table.element(a,hyperlink('http://www.xycoon.com/harmonic_mean.htm', 'Harmonic Mean', 'click to view the definition of the Harmonic Mean'),header=TRUE) > a<-table.element(a,har) > a<-table.element(a,'') > a<-table.element(a,'') > a<-table.row.end(a) > a<-table.row.start(a) > a<-table.element(a,hyperlink('http://www.xycoon.com/quadratic_mean.htm', 'Quadratic Mean', 'click to view the definition of the Quadratic Mean'),header=TRUE) > a<-table.element(a,qua) > a<-table.element(a,'') > a<-table.element(a,'') > a<-table.row.end(a) > for (j in 1:length(win[,1])) { + a<-table.row.start(a) + mylabel <- paste('Winsorized Mean (',j) + mylabel <- paste(mylabel,'/') + mylabel <- paste(mylabel,length(win[,1])) + mylabel <- paste(mylabel,')') + a<-table.element(a,hyperlink('http://www.xycoon.com/winsorized_mean.htm', mylabel, 'click to view the definition of the Winsorized Mean'),header=TRUE) + a<-table.element(a,win[j,1]) + a<-table.element(a,win[j,2]) + a<-table.element(a,win[j,1]/win[j,2]) + a<-table.row.end(a) + } > for (j in 1:length(tri[,1])) { + a<-table.row.start(a) + mylabel <- paste('Trimmed Mean (',j) + mylabel <- paste(mylabel,'/') + mylabel <- paste(mylabel,length(tri[,1])) + mylabel <- paste(mylabel,')') + a<-table.element(a,hyperlink('http://www.xycoon.com/arithmetic_mean.htm', mylabel, 'click to view the definition of the Trimmed Mean'),header=TRUE) + a<-table.element(a,tri[j,1]) + a<-table.element(a,tri[j,2]) + a<-table.element(a,tri[j,1]/tri[j,2]) + a<-table.row.end(a) + } > a<-table.row.start(a) > a<-table.element(a,hyperlink('http://www.xycoon.com/median_1.htm', 'Median', 'click to view the definition of the Median'),header=TRUE) > a<-table.element(a,median(x)) > a<-table.element(a,'') > a<-table.element(a,'') > a<-table.row.end(a) > a<-table.row.start(a) > a<-table.element(a,hyperlink('http://www.xycoon.com/midrange.htm', 'Midrange', 'click to view the definition of the Midrange'),header=TRUE) > a<-table.element(a,midr) > a<-table.element(a,'') > a<-table.element(a,'') > a<-table.row.end(a) > a<-table.row.start(a) > mymid <- hyperlink('http://www.xycoon.com/midmean.htm', 'Midmean', 'click to view the definition of the Midmean') > mylabel <- paste(mymid,hyperlink('http://www.xycoon.com/method_1.htm','Weighted Average at Xnp',''),sep=' - ') > a<-table.element(a,mylabel,header=TRUE) > a<-table.element(a,midm[1]) > a<-table.element(a,'') > a<-table.element(a,'') > a<-table.row.end(a) > a<-table.row.start(a) > mymid <- hyperlink('http://www.xycoon.com/midmean.htm', 'Midmean', 'click to view the definition of the Midmean') > mylabel <- paste(mymid,hyperlink('http://www.xycoon.com/method_2.htm','Weighted Average at X(n+1)p',''),sep=' - ') > a<-table.element(a,mylabel,header=TRUE) > a<-table.element(a,midm[2]) > a<-table.element(a,'') > a<-table.element(a,'') > a<-table.row.end(a) > a<-table.row.start(a) > mymid <- hyperlink('http://www.xycoon.com/midmean.htm', 'Midmean', 'click to view the definition of the Midmean') > mylabel <- paste(mymid,hyperlink('http://www.xycoon.com/method_3.htm','Empirical Distribution Function',''),sep=' - ') > a<-table.element(a,mylabel,header=TRUE) > a<-table.element(a,midm[3]) > a<-table.element(a,'') > a<-table.element(a,'') > a<-table.row.end(a) > a<-table.row.start(a) > mymid <- hyperlink('http://www.xycoon.com/midmean.htm', 'Midmean', 'click to view the definition of the Midmean') > mylabel <- paste(mymid,hyperlink('http://www.xycoon.com/method_4.htm','Empirical Distribution Function - Averaging',''),sep=' - ') > a<-table.element(a,mylabel,header=TRUE) > a<-table.element(a,midm[4]) > a<-table.element(a,'') > a<-table.element(a,'') > a<-table.row.end(a) > a<-table.row.start(a) > mymid <- hyperlink('http://www.xycoon.com/midmean.htm', 'Midmean', 'click to view the definition of the Midmean') > mylabel <- paste(mymid,hyperlink('http://www.xycoon.com/method_5.htm','Empirical Distribution Function - Interpolation',''),sep=' - ') > a<-table.element(a,mylabel,header=TRUE) > a<-table.element(a,midm[5]) > a<-table.element(a,'') > a<-table.element(a,'') > a<-table.row.end(a) > a<-table.row.start(a) > mymid <- hyperlink('http://www.xycoon.com/midmean.htm', 'Midmean', 'click to view the definition of the Midmean') > mylabel <- paste(mymid,hyperlink('http://www.xycoon.com/method_6.htm','Closest Observation',''),sep=' - ') > a<-table.element(a,mylabel,header=TRUE) > a<-table.element(a,midm[6]) > a<-table.element(a,'') > a<-table.element(a,'') > a<-table.row.end(a) > a<-table.row.start(a) > mymid <- hyperlink('http://www.xycoon.com/midmean.htm', 'Midmean', 'click to view the definition of the Midmean') > mylabel <- paste(mymid,hyperlink('http://www.xycoon.com/method_7.htm','True Basic - Statistics Graphics Toolkit',''),sep=' - ') > a<-table.element(a,mylabel,header=TRUE) > a<-table.element(a,midm[7]) > a<-table.element(a,'') > a<-table.element(a,'') > a<-table.row.end(a) > a<-table.row.start(a) > mymid <- hyperlink('http://www.xycoon.com/midmean.htm', 'Midmean', 'click to view the definition of the Midmean') > mylabel <- paste(mymid,hyperlink('http://www.xycoon.com/method_8.htm','MS Excel (old versions)',''),sep=' - ') > a<-table.element(a,mylabel,header=TRUE) > a<-table.element(a,midm[8]) > a<-table.element(a,'') > a<-table.element(a,'') > a<-table.row.end(a) > a<-table.row.start(a) > a<-table.element(a,'Number of observations',header=TRUE) > a<-table.element(a,length(x)) > a<-table.element(a,'') > a<-table.element(a,'') > a<-table.row.end(a) > a<-table.end(a) > table.save(a,file="/var/wessaorg/rcomp/tmp/3i2jh1393268962.tab") > > try(system("convert tmp/1zdf01393268961.ps tmp/1zdf01393268961.png",intern=TRUE)) character(0) > try(system("convert tmp/2j2rr1393268961.ps tmp/2j2rr1393268961.png",intern=TRUE)) character(0) > > > proc.time() user system elapsed 2.419 0.458 2.878