x <- c(1418
,869
,1530
,2172
,901
,463
,3201
,371
,1192
,1583
,1439
,1764
,1495
,1373
,2187
,1491
,4041
,1706
,2152
,1036
,1882
,1929
,2242
,1220
,1289
,2515
,2147
,2352
,1638
,1222
,1812
,1677
,1579
,1731
,807
,2452
,829
,1940
,2662
,186
,1499
,865
,1793
,2527
,2747
,1324
,2702
,1383
,1179
,2099
,4308
,918
,1831
,3373
,1713
,1438
,496
,2253
,744
,1161
,2352
,2144
,4691
,1112
,2694
,1973
,1769
,3148
,2474
,2084
,1954
,1226
,1389
,1496
,2269
,1833
,1268
,1943
,893
,1762
,1403
,1425
,1857
,1840
,1502
,1441
,1420
,1416
,2970
,1317
,1644
,870
,1654
,1054
,937
,3004
,2008
,2547
,1885
,1626
,1468
,2445
,1964
,1381
,1369
,1659
,2888
,1290
,2845
,1982
,1904
,1391
,602
,1743
,1559
,2014
,2143
,2146
,874
,1590
,1590
,1210
,2072
,1281
,1401
,834
,1105
,1272
,1944
,391
,761
,1605
,530
,1988
,1386
,2395
,387
,1742
,620
,449
,800
,1684
,1050
,2699
,1606
,1502
,1204
,1138
,568
,1459
,2158
,1111
,1421
,2833
,1955
,2922
,1002
,1060
,956
,2186
,3604
,1035
,1417
,3261
,1587
,1424
,1701
,1249
,946
,1926
,3352
,1641
,2035
,2312
,1369
,1577
,2201
,961
,1900
,1254
,1335
,1597
,207
,1645
,2429
,151
,474
,141
,1639
,872
,1318
,1018
,1383
,1314
,1335
,1403
,910
,616
,1407
,771
,766
,473
,1376
,1232
,1521
,572
,1059
,1544
,1230
,1206
,1205
,1255
,613
,721
,1109
,740
,1126
,728
,689
,592
,995
,1613
,2048
,705
,301
,1803
,799
,861
,1186
,1451
,628
,1161
,1463
,742
,979
,675
,1241
,676
,1049
,620
,1081
,1688
,736
,617
,812
,1051
,1656
,705
,945
,554
,1597
,982
,222
,1212
,1143
,435
,532
,882
,608
,459
,578
,826
,509
,717
,637
,857
,830
,652
,707
,954
,1461
,672
,778
,1141
,680
,1090
,616
,285
,1145
,733
,888
,849
,1182
,528
,642
,947
,819
,757
,894)
#'GNU S' R Code compiled by R2WASP v. 1.2.291 ()
#Author: root
#To cite this work: Wessa P., (2012), Percentiles (v1.0.6) in Free Statistics Software (v$_version), Office for Research Development and Education, URL http://www.wessa.net/rwasp_percentiles.wasp/
#Source of accompanying publication: Office for Research, Development, and Education
#
x <-sort(x[!is.na(x)])
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]
}
}
}
}
lx <- length(x)
qval <- array(NA,dim=c(99,8))
mystep <- 25
mystart <- 25
if (lx>10){
mystep=10
mystart=10
}
if (lx>20){
mystep=5
mystart=5
}
if (lx>50){
mystep=2
mystart=2
}
if (lx>=100){
mystep=1
mystart=1
}
for (perc in seq(mystart,99,mystep)) {
qval[perc,1] <- q1(x,lx,perc/100,i,f)
qval[perc,2] <- q2(x,lx,perc/100,i,f)
qval[perc,3] <- q3(x,lx,perc/100,i,f)
qval[perc,4] <- q4(x,lx,perc/100,i,f)
qval[perc,5] <- q5(x,lx,perc/100,i,f)
qval[perc,6] <- q6(x,lx,perc/100,i,f)
qval[perc,7] <- q7(x,lx,perc/100,i,f)
qval[perc,8] <- q8(x,lx,perc/100,i,f)
}
postscript(file="/var/wessaorg/rcomp/tmp/1n2on1355832498.ps",horizontal=F,onefile=F,pagecentre=F,paper="special",width=8.3333333333333,height=5.5555555555556) 
myqqnorm <- qqnorm(x,col=2)
qqline(x)
grid()
dev.off()

#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,'Percentiles - Ungrouped Data',9,TRUE)
a<-table.row.end(a)
a<-table.row.start(a)
a<-table.element(a,'p',1,TRUE)
a<-table.element(a,hyperlink('http://www.xycoon.com/method_1.htm', 'Weighted Average at Xnp',''),1,TRUE)
a<-table.element(a,hyperlink('http://www.xycoon.com/method_2.htm','Weighted Average at X(n+1)p',''),1,TRUE)
a<-table.element(a,hyperlink('http://www.xycoon.com/method_3.htm','Empirical Distribution Function',''),1,TRUE)
a<-table.element(a,hyperlink('http://www.xycoon.com/method_4.htm','Empirical Distribution Function - Averaging',''),1,TRUE)
a<-table.element(a,hyperlink('http://www.xycoon.com/method_5.htm','Empirical Distribution Function - Interpolation',''),1,TRUE)
a<-table.element(a,hyperlink('http://www.xycoon.com/method_6.htm','Closest Observation',''),1,TRUE)
a<-table.element(a,hyperlink('http://www.xycoon.com/method_7.htm','True Basic - Statistics Graphics Toolkit',''),1,TRUE)
a<-table.element(a,hyperlink('http://www.xycoon.com/method_8.htm','MS Excel (old versions)',''),1,TRUE)
a<-table.row.end(a)
for (perc in seq(mystart,99,mystep)) {
a<-table.row.start(a)
a<-table.element(a,round(perc/100,2),1,TRUE)
for (j in 1:8) {
a<-table.element(a,round(qval[perc,j],6))
}
a<-table.row.end(a)
}
a<-table.end(a)
table.save(a,file="/var/wessaorg/rcomp/tmp/2i6xv1355832498.tab") 

try(system("convert tmp/1n2on1355832498.ps tmp/1n2on1355832498.png",intern=TRUE))

