The lower and upper hinges are the midhinges of the left and right subsamples with the midhinge removed, i.e, the sample has been split into two. Assume for example that [1,2,3,4,5,6,7] is the sample. the mid hinge is 4 and the lower hinge is the midhinge of [1,2,3] which is 2 and the upper hinge is the midhinge of [5,6,7] or 6.
On the other hand, for the sample [1,2,3,4,5,6], the midhinge is the mean of 3 and 4 which is (3.5).
Then the lower hinge is the midhinge of the remaining lef subsample[1,2,3] which is 2 and the upper hinge is the midhinge of the remaining right subsample [4, 5,6 ] which is 5.
Here is hinges.py, a Python program for computing the hinges of a sample.
""" file hinges.py author Ernesto P. Adorio ernesto.adorio@gmail.com UPDEPP(UP at Clarkfield) version 0.0.1 August 15, 2010 """ def midhinge(X): n= len(X) if n == 1: return X[0] if n == 0: return None if n % 2== 0: # even number. a, b = n//2 - 1, n//2 return (X[a] + X[b])* 0.5 else: m = (n-1) //2 return X[m] def lowerhinge(X): n = len(X) if n % 2 == 0: return midhinge(X[:n//2]) else: return midhinge(X[:(n-1)//2]) def upperhinge(X): n = len(X) if n %2 == 0: return midhinge(X[n//2:]) else: return midhinge(X[n//2+1:]) def fivenum(X): """ Five number summary for sample X. added aug.16, 2010 """ return (min(X), lowerhinge(X), midhinge(X), upperhinge(X), max(X)) if __name__== "__main__": X = range(1, 11) for i in range(10): print "X=", X, ":","n=",len(X) ,"hinges=", print lowerhinge(X), midhinge(X), upperhinge(X) X=X[:-1]
When the above program runs, it outputs:
python hinges.py
python hinges.py
X= [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] : n= 10 hinges= 3 5.5 8
X= [1, 2, 3, 4, 5, 6, 7, 8, 9] : n= 9 hinges= 2.5 5 7.5
X= [1, 2, 3, 4, 5, 6, 7, 8] : n= 8 hinges= 2.5 4.5 6.5
X= [1, 2, 3, 4, 5, 6, 7] : n= 7 hinges= 2 4 6
X= [1, 2, 3, 4, 5, 6] : n= 6 hinges= 2 3.5 5
X= [1, 2, 3, 4, 5] : n= 5 hinges= 1.5 3 4.5
X= [1, 2, 3, 4] : n= 4 hinges= 1.5 2.5 3.5
X= [1, 2, 3] : n= 3 hinges= 1 2 3
X= [1, 2] : n= 2 hinges= 1 1.5 2
X= [1] : n= 1 hinges= None 1 None
Don't forget to sort the input data sample for computing its hinges!!
We are confident that the program is correct. But we need independent confirmation.
Also I would appreciate any revisions which will make the above code more compact.
TBD: fivenum will be incorporated in the next version of hinges.py. Done! But the version number
stays at 0.0.1
No comments:
Post a Comment