BEGIN { srand(); OFS=","; generate() } function generate(a,b,c,d, recall,\ bd, bdMin, bdMax, \ acc, accMin, accMax, \ prec, precMin,precMax, \ all,m,key,sum,sumSq,n,com,div) { com = "sort -n -t, +0"; div = 0.025; bdMin = 0.03; bdMax = 0.2; accMin = 0.7; accMax = 1.0; precMin = 0.15; precMax = 0.4; print "#precision,recall-mean, recall-sd, n" while (m <= 10000 ) { all++; a = rand(); b = rand(); c = rand(); d = rand(); bd = b + d; acc = (a+d)/(a+b+c+d); prec = d/(c+d); recall = d/(b+d); if ( bd >= bdMin && bd <= bdMax && acc >= accMin && acc <= accMax ) { m++; key = int(prec/div) * div sum[key] += recall sumSq[key] += recall * recall n[key]++ } } for(key in sum) print 100*key, 100*mean(sum[key],n[key]), 100*sd(sumSq[key],sum[key],n[key]), n[key] | com; } function mean(sumX,n) { return sumX/n } function sd(sumSq,sumX,n) { return sqrt((sumSq-((sumX*sumX)/n))/(n-1)) }