Improving performance of Cronbach Alpha code python numpy
numpy, performance, python
Solution
def CronbachAlpha(itemscores):
itemscores = numpy.asarray(itemscores)
itemvars = itemscores.var(axis=1, ddof=1)
tscores = itemscores.sum(axis=0)
nitems = len(itemscores)
return nitems / (nitems-1.) * (1 - itemvars.sum() / tscores.var(ddof=1))
NumPy has a variance function built in. Specifying `ddof=1` uses a denominator of N-1, giving a sample variance. There's also a `sum` builtin.
Problem
I made some code for calculating Cronbach Alpha that works. But I am not too good using lambda functions. Is there a way to reduce the code and improve efficiency by using lambda instead of the svar() function and getting rid of some of the for loops by using numpy arrays? ``` import numpy as np def svar(X): n = float(len(X)) svar=(sum([(x-np.mean(X))**2 for x in X]) / n)* n/(n-1.) return svar def CronbachAlpha(itemscores): itemvars = [svar(item) for item in itemscores] tscores = [0] * len(itemscores[0]) for item in itemscores: for i in range(len(item)): tscores[i]+= item[i] nitems = len(itemscores) #print "total scores=", tscores, 'number of items=', nitems Calpha=nitems/(nitems-1.) * (1-sum(itemvars)/ svar(tscores)) return Calpha ###########Test################ itemscores = [[ 4,14,3,3,23,4,52,3,33,3], [ 5,14,4,3,24,5,55,4,15,3]] print "Cronbach alpha = ", CronbachAlpha(itemscores) ```