Calculate Confidence Intervals for Crosstabs with Categorical Questions

From Q
Jump to: navigation, search

This example may be used to compute confidence intervals for crosstabs where there is a categorical question (Pick One or Pick Any) selected in the Blue and Brown drop-down menu. As the rule borrows statistics from the table (by default it takes over the Index and Missing n statistics), you should rename these statistics by right-clicking your table, selecting Table Options, and changing the names of Index and Missing n to Upper Confidence Interval and Lower Confidence Interval in the Override Text column of the Output Text column.

To use this snippet:

  1. Select your table.
  2. Select Automate > Custom Rule.
  3. Paste in the code from below.
  4. (Optional) change the statistics used in upper_statistic_to_replace and lower_statistic_to_replace.
  5. Click the 'play' icon and close.
  6. Choose your Significance level. By default this is 0.05 to match Q's default Overall Significance Level setting, but if you are testing at a different level then change this number.
  7. Right-click on your table and select Statistics - Cells > Index and Missing n.
  8. Right-click your table, select Table Options, click Output Text, and change the names of Index and Missing n to Upper Confidence Interval and Lower Confidence Interval in the column of the Override Text column.


// Add confidence intervals to crosstabs

// Use jstat for computing t distribution quantiles
// Source: https://github.com/jstat/jstat
// Documentation: https://github.com/jstat/jstat/blob/master/doc/md/distributions.md
// This version was current as of 2014-05-14
// Copyright (c) 2013 jStat
// 
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
// 
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
// 
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
this.j$=this.jStat=function(a,b){function f(b,c){var d=b>c?b:c;return a.pow(10,17-~~(a.log(d>0?d:-d)*a.LOG10E))}function h(a){return e.call(a)==="[object Function]"}function i(a){return typeof a=="number"&&a===a}function j(a){return c.apply([],a)}function k(){return new k._init(arguments)}function l(){return 0}function m(){return 1}function n(a,b){return a===b?1:0}var c=Array.prototype.concat,d=Array.prototype.slice,e=Object.prototype.toString,g=Array.isArray||function(b){return e.call(b)==="[object Array]"};k.fn=k.prototype,k._init=function(b){var c;if(g(b[0]))if(g(b[0][0])){h(b[1])&&(b[0]=k.map(b[0],b[1]));for(c=0;c<b[0].length;c++)this[c]=b[0][c];this.length=b[0].length}else this[0]=h(b[1])?k.map(b[0],b[1]):b[0],this.length=1;else if(i(b[0]))this[0]=k.seq.apply(null,b),this.length=1;else{if(b[0]instanceof k)return k(b[0].toArray());this[0]=[],this.length=1}return this},k._init.prototype=k.prototype,k._init.constructor=k,k.utils={calcRdx:f,isArray:g,isFunction:h,isNumber:i,toVector:j},k.extend=function(b){var c,d;if(arguments.length===1){for(d in b)k[d]=b[d];return this}for(c=1;c<arguments.length;c++)for(d in arguments[c])b[d]=arguments[c][d];return b},k.rows=function(b){return b.length||1},k.cols=function(b){return b[0].length||1},k.dimensions=function(b){return{rows:k.rows(b),cols:k.cols(b)}},k.row=function(b,c){return b[c]},k.col=function(b,c){var d=new Array(b.length);for(var e=0;e<b.length;e++)d[e]=[b[e][c]];return d},k.diag=function(b){var c=k.rows(b),d=new Array(c);for(var e=0;e<c;e++)d[e]=[b[e][e]];return d},k.antidiag=function(b){var c=k.rows(b)-1,d=new Array(c);for(var e=0;c>=0;c--,e++)d[e]=[b[e][c]];return d},k.transpose=function(b){var c=[],d,e,f,h,i;g(b[0])||(b=[b]),e=b.length,f=b[0].length;for(i=0;i<f;i++){d=new Array(e);for(h=0;h<e;h++)d[h]=b[h][i];c.push(d)}return c.length===1?c[0]:c},k.map=function(b,c,d){var e,f,h,i,j;g(b[0])||(b=[b]),f=b.length,h=b[0].length,i=d?b:new Array(f);for(e=0;e<f;e++){i[e]||(i[e]=new Array(h));for(j=0;j<h;j++)i[e][j]=c(b[e][j],e,j)}return i.length===1?i[0]:i},k.alter=function(b,c){return k.map(b,c,!0)},k.create=function(b,c,d){var e=new Array(b),f,g;h(c)&&(d=c,c=b);for(f=0;f<b;f++){e[f]=new Array(c);for(g=0;g<c;g++)e[f][g]=d(f,g)}return e},k.zeros=function(b,c){return i(c)||(c=b),k.create(b,c,l)},k.ones=function(b,c){return i(c)||(c=b),k.create(b,c,m)},k.rand=function(c,d){return i(d)||(d=c),k.create(c,d,a.random)},k.identity=function(b,c){return i(c)||(c=b),k.create(b,c,n)},k.symmetric=function(b){var c=!0,d=b.length,e,f;if(b.length!==b[0].length)return!1;for(e=0;e<d;e++)for(f=0;f<d;f++)if(b[f][e]!==b[e][f])return!1;return!0},k.clear=function(b){return k.alter(b,l)},k.seq=function(b,c,d,e){h(e)||(e=!1);var g=[],i=f(b,c),j=(c*i-b*i)/((d-1)*i),k=b,l;for(l=0;k<=c;l++,k=(b*i+j*i*l)/i)g.push(e?e(k,l):k);return g};var o=k.prototype;return o.length=0,o.push=Array.prototype.push,o.sort=Array.prototype.sort,o.splice=Array.prototype.splice,o.slice=Array.prototype.slice,o.toArray=function(){return this.length>1?d.call(this):d.call(this)[0]},o.map=function(b,c){return k(k.map(this,b,c))},o.alter=function(b){return k.alter(this,b),this},function(a){for(var b=0;b<a.length;b++)(function(a){o[a]=function(b){var c=this,d;return b?(setTimeout(function(){b.call(c,o[a].call(c))}),this):(d=k[a](this),g(d)?k(d):d)}})(a[b])}("transpose clear symmetric rows cols dimensions diag antidiag".split(" ")),function(a){for(var b=0;b<a.length;b++)(function(a){o[a]=function(b,c){var d=this;return c?(setTimeout(function(){c.call(d,o[a].call(d,b))}),this):k(k[a](this,b))}})(a[b])}("row col".split(" ")),function(a){for(var b=0;b<a.length;b++)(function(a){o[a]=new Function("return jStat(jStat."+a+".apply(null, arguments));")})(a[b])}("create zeros ones rand identity".split(" ")),k}(Math),function(a,b){function d(a,b){return a-b}function e(a,c,d){return b.max(c,b.min(a,d))}var c=a.utils.isFunction;a.sum=function g(a){var g=0,b=a.length,c;while(--b>=0)g+=a[b];return g},a.sumsqrd=function(b){var c=0,d=b.length;while(--d>=0)c+=b[d]*b[d];return c},a.sumsqerr=function(c){var d=a.mean(c),e=0,f=c.length,g;while(--f>=0)g=c[f]-d,e+=g*g;return e},a.product=function(b){var c=1,d=b.length;while(--d>=0)c*=b[d];return c},a.min=function(b){var c=b[0],d=0;while(++d<b.length)b[d]<c&&(c=b[d]);return c},a.max=function(b){var c=b[0],d=0;while(++d<b.length)b[d]>c&&(c=b[d]);return c},a.mean=function(c){return a.sum(c)/c.length},a.meansqerr=function(c){return a.sumsqerr(c)/c.length},a.geomean=function(d){return b.pow(a.product(d),1/d.length)},a.median=function(b){var c=b.length,e=b.slice().sort(d);return c&1?e[c/2|0]:(e[c/2-1]+e[c/2])/2},a.cumsum=function(b){var c=b.length,d=new Array(c),e;d[0]=b[0];for(e=1;e<c;e++)d[e]=d[e-1]+b[e];return d},a.diff=function(b){var c=[],d=b.length,e;for(e=1;e<d;e++)c.push(b[e]-b[e-1]);return c},a.mode=function(b){var c=b.length,e=b.slice().sort(d),f=1,g=0,h=0,i=[],j;for(j=0;j<c;j++)e[j]===e[j+1]?f++:(f>g?(i=[e[j]],g=f,h=0):f===g&&(i.push(e[j]),h++),f=1);return h===0?i[0]:i},a.range=function(c){return a.max(c)-a.min(c)},a.variance=function(c,d){return a.sumsqerr(c)/(c.length-(d?1:0))},a.stdev=function(d,e){return b.sqrt(a.variance(d,e))},a.meandev=function(d){var e=0,f=a.mean(d),g;for(g=d.length-1;g>=0;g--)e+=b.abs(d[g]-f);return e/d.length},a.meddev=function(d){var e=0,f=a.median(d),g;for(g=d.length-1;g>=0;g--)e+=b.abs(d[g]-f);return e/d.length},a.coeffvar=function(c){return a.stdev(c)/a.mean(c)},a.quartiles=function(c){var e=c.length,f=c.slice().sort(d);return[f[b.round(e/4)-1],f[b.round(e/2)-1],f[b.round(e*3/4)-1]]},a.quantiles=function(c,f,g,h){var i=c.slice().sort(d),j=[f.length],k=c.length,l,m,n,o,p,q;typeof g=="undefined"&&(g=3/8),typeof h=="undefined"&&(h=3/8);for(l=0;l<f.length;l++)m=f[l],n=g+m*(1-g-h),o=k*m+n,p=b.floor(e(o,1,k-1)),q=e(o-p,0,1),j[l]=(1-q)*i[p-1]+q*i[p];return j},a.percentileOfScore=function(b,c,d){var e=0,f=b.length,g=!1,h,i;d==="strict"&&(g=!0);for(i=0;i<f;i++)h=b[i],(g&&h<c||!g&&h<=c)&&e++;return e/f},a.covariance=function(c,d){var e=a.mean(c),f=a.mean(d),g=c.length,h=new Array(g),i;for(i=0;i<g;i++)h[i]=(c[i]-e)*(d[i]-f);return a.sum(h)/(g-1)},a.corrcoeff=function(c,d){return a.covariance(c,d)/a.stdev(c,1)/a.stdev(d,1)};var f=a.prototype;f.cumsum=function(b,d){var e=[],g=0,h=this;c(b)&&(d=b,b=!1);if(d)return setTimeout(function(){d.call(h,f.cumsum.call(h,b))}),this;if(this.length>1){h=b===!0?this:this.transpose();for(;g<h.length;g++)e[g]=a.cumsum(h[g]);return e}return a.cumsum(this[0],b)},function(b){for(var d=0;d<b.length;d++)(function(b){f[b]=function(d,e){var g=[],h=0,i=this;c(d)&&(e=d,d=!1);if(e)return setTimeout(function(){e.call(i,f[b].call(i,d))}),this;if(this.length>1){i=d===!0?this:this.transpose();for(;h<i.length;h++)g[h]=a[b](i[h]);return d===!0?a[b](a.utils.toVector(g)):g}return a[b](this[0],d)}})(b[d])}("sum sumsqrd sumsqerr product min max mean meansqerr geomean median diff mode range variance stdev meandev meddev coeffvar quartiles".split(" ")),function(b){for(var d=0;d<b.length;d++)(function(b){f[b]=function(){var d=[],e=0,g=this,h=Array.prototype.slice.call(arguments);if(c(h[h.length-1])){var i=h[h.length-1],j=h.slice(0,h.length-1);return setTimeout(function(){i.call(g,f[b].apply(g,j))}),this}var i=undefined,k=function(d){return a[b].apply(g,[d].concat(h))};if(this.length>1){g=g.transpose();for(;e<g.length;e++)d[e]=k(g[e]);return d}return k(this[0])}})(b[d])}("quantiles percentileOfScore".split(" "))}(this.jStat,Math),function(a,b){a.gammaln=function(c){var d=0,e=[76.18009172947146,-86.50532032941678,24.01409824083091,-1.231739572450155,.001208650973866179,-0.000005395239384953],f=1.000000000190015,g,h,i;i=(h=g=c)+5.5,i-=(g+.5)*b.log(i);for(;d<6;d++)f+=e[d]/++h;return b.log(2.5066282746310007*f/g)-i},a.gammafn=function(c){var d=[-1.716185138865495,24.76565080557592,-379.80425647094563,629.3311553128184,866.9662027904133,-31451.272968848367,-36144.413418691176,66456.14382024054],e=[-30.8402300119739,315.35062697960416,-1015.1563674902192,-3107.771671572311,22538.11842098015,4755.846277527881,-134659.9598649693,-115132.2596755535],f=!1,g=0,h=0,i=0,j=c,k,l,m,n,o,p;if(j<=0){n=j%1+3.6e-16;if(n)f=(j&1?-1:1)*b.PI/b.sin(b.PI*n),j=1-j;else return Infinity}m=j,j<1?l=j++:l=(j-=g=(j|0)-1)-1;for(k=0;k<8;++k)i=(i+d[k])*l,h=h*l+e[k];n=i/h+1;if(m<j)n/=m;else if(m>j)for(k=0;k<g;++k)n*=j,j++;return f&&(n=f/n),n},a.gammap=function(d,e){var f=a.gammaln(d),g=d,h=1/d,i=h,j=e+1-d,k=1/1e-30,l=1/j,m=l,n=1,o=-~(b.log(d>=1?d:1/d)*8.5+d*.4+17),p,q;if(e<0||d<=0)return NaN;if(e<d+1){for(;n<=o;n++)h+=i*=e/++g;return h*b.exp(-e+d*b.log(e)-f)}for(;n<=o;n++)p=-n*(n-d),j+=2,l=p*l+j,k=j+p/k,l=1/l,m*=l*k;return 1-m*b.exp(-e+d*b.log(e)-f)},a.factorialln=function(c){return c<0?NaN:a.gammaln(c+1)},a.factorial=function(c){return c<0?NaN:a.gammafn(c+1)},a.combination=function(d,e){return d>170||e>170?b.exp(a.combinationln(d,e)):a.factorial(d)/a.factorial(e)/a.factorial(d-e)},a.combinationln=function(c,d){return a.factorialln(c)-a.factorialln(d)-a.factorialln(c-d)},a.permutation=function(c,d){return a.factorial(c)/a.factorial(c-d)},a.betafn=function(d,e){return d<=0||e<=0?undefined:d+e>170?b.exp(a.betaln(d,e)):a.gammafn(d)*a.gammafn(e)/a.gammafn(d+e)},a.betaln=function(c,d){return a.gammaln(c)+a.gammaln(d)-a.gammaln(c+d)},a.betacf=function(c,d,e){var f=1e-30,g=1,h=d+e,i=d+1,j=d-1,k=1,l=1-h*c/i,m,n,o,p;b.abs(l)<f&&(l=f),l=1/l,p=l;for(;g<=100;g++){m=2*g,n=g*(e-g)*c/((j+m)*(d+m)),l=1+n*l,b.abs(l)<f&&(l=f),k=1+n/k,b.abs(k)<f&&(k=f),l=1/l,p*=l*k,n=-(d+g)*(h+g)*c/((d+m)*(i+m)),l=1+n*l,b.abs(l)<f&&(l=f),k=1+n/k,b.abs(k)<f&&(k=f),l=1/l,o=l*k,p*=o;if(b.abs(o-1)<3e-7)break}return p},a.gammapinv=function(d,e){var f=0,g=e-1,h=1e-8,i=a.gammaln(e),j,k,l,m,n,o,p;if(d>=1)return b.max(100,e+100*b.sqrt(e));if(d<=0)return 0;e>1?(o=b.log(g),p=b.exp(g*(o-1)-i),n=d<.5?d:1-d,l=b.sqrt(-2*b.log(n)),j=(2.30753+l*.27061)/(1+l*(.99229+l*.04481))-l,d<.5&&(j=-j),j=b.max(.001,e*b.pow(1-1/(9*e)-j/(3*b.sqrt(e)),3))):(l=1-e*(.253+e*.12),d<l?j=b.pow(d/l,1/e):j=1-b.log(1-(d-l)/(1-l)));for(;f<12;f++){if(j<=0)return 0;k=a.gammap(e,j)-d,e>1?l=p*b.exp(-(j-g)+g*(b.log(j)-o)):l=b.exp(-j+g*b.log(j)-i),m=k/l,j-=l=m/(1-.5*b.min(1,m*((e-1)/j-1))),j<=0&&(j=.5*(j+l));if(b.abs(l)<h*j)break}return j},a.erf=function(c){var d=[-1.3026537197817094,.6419697923564902,.019476473204185836,-0.00956151478680863,-0.000946595344482036,.000366839497852761,42523324806907e-18,-0.000020278578112534,-0.000001624290004647,130365583558e-17,1.5626441722e-8,-8.5238095915e-8,6.529054439e-9,5.059343495e-9,-9.91364156e-10,-2.27365122e-10,9.6467911e-11,2.394038e-12,-6.886027e-12,8.94487e-13,3.13092e-13,-1.12708e-13,3.81e-16,7.106e-15,-1.523e-15,-9.4e-17,1.21e-16,-2.8e-17],e=d.length-1,f=!1,g=0,h=0,i,j,k,l;c<0&&(c=-c,f=!0),i=2/(2+c),j=4*i-2;for(;e>0;e--)k=g,g=j*g-h+d[e],h=k;return l=i*b.exp(-c*c+.5*(d[0]+j*g)-h),f?l-1:1-l},a.erfc=function(c){return 1-a.erf(c)},a.erfcinv=function(d){var e=0,f,g,h,i;if(d>=2)return-100;if(d<=0)return 100;i=d<1?d:2-d,h=b.sqrt(-2*b.log(i/2)),f=-0.70711*((2.30753+h*.27061)/(1+h*(.99229+h*.04481))-h);for(;e<2;e++)g=a.erfc(f)-i,f+=g/(1.1283791670955126*b.exp(-f*f)-f*g);return d<1?f:-f},a.ibetainv=function(d,e,f){var g=1e-8,h=e-1,i=f-1,j=0,k,l,m,n,o,p,q,r,s,t,u;if(d<=0)return 0;if(d>=1)return 1;e>=1&&f>=1?(m=d<.5?d:1-d,n=b.sqrt(-2*b.log(m)),q=(2.30753+n*.27061)/(1+n*(.99229+n*.04481))-n,d<.5&&(q=-q),r=(q*q-3)/6,s=2/(1/(2*e-1)+1/(2*f-1)),t=q*b.sqrt(r+s)/s-(1/(2*f-1)-1/(2*e-1))*(r+5/6-2/(3*s)),q=e/(e+f*b.exp(2*t))):(k=b.log(e/(e+f)),l=b.log(f/(e+f)),n=b.exp(e*k)/e,o=b.exp(f*l)/f,t=n+o,d<n/t?q=b.pow(e*t*d,1/e):q=1-b.pow(f*t*(1-d),1/f)),u=-a.gammaln(e)-a.gammaln(f)+a.gammaln(e+f);for(;j<10;j++){if(q===0||q===1)return q;p=a.ibeta(q,e,f)-d,n=b.exp(h*b.log(q)+i*b.log(1-q)+u),o=p/n,q-=n=o/(1-.5*b.min(1,o*(h/q-i/(1-q)))),q<=0&&(q=.5*(q+n)),q>=1&&(q=.5*(q+n+1));if(b.abs(n)<g*q&&j>0)break}return q},a.ibeta=function(d,e,f){var g=d===0||d===1?0:b.exp(a.gammaln(e+f)-a.gammaln(e)-a.gammaln(f)+e*b.log(d)+f*b.log(1-d));return d<0||d>1?!1:d<(e+1)/(e+f+2)?g*a.betacf(d,e,f)/e:1-g*a.betacf(1-d,f,e)/f},a.randn=function(d,e){var f,g,h,i,j,k;e||(e=d);if(d)return a.create(d,e,function(){return a.randn()});do f=b.random(),g=1.7156*(b.random()-.5),h=f-.449871,i=b.abs(g)+.386595,j=h*h+i*(.196*i-.25472*h);while(j>.27597&&(j>.27846||g*g>-4*b.log(f)*f*f));return g/f},a.randg=function(d,e,f){var g=d,h,i,j,k,l,m;f||(f=e),d||(d=1);if(e)return m=a.zeros(e,f),m.alter(function(){return a.randg(d)}),m;d<1&&(d+=1),h=d-1/3,i=1/b.sqrt(9*h);do{do l=a.randn(),k=1+i*l;while(k<=0);k=k*k*k,j=b.random()}while(j>1-.331*b.pow(l,4)&&b.log(j)>.5*l*l+h*(1-k+b.log(k)));if(d==g)return h*k;do j=b.random();while(j===0);return b.pow(j,1/g)*h*k},function(b){for(var c=0;c<b.length;c++)(function(b){a.fn[b]=function(){return a(a.map(this,function(c){return a[b](c)}))}})(b[c])}("gammaln gammafn factorial factorialln".split(" ")),function(b){for(var c=0;c<b.length;c++)(function(b){a.fn[b]=function(){return a(a[b].apply(null,arguments))}})(b[c])}("randn".split(" "))}(this.jStat,Math),function(a,b){(function(b){for(var c=0;c<b.length;c++)(function(b){a[b]=function(a,b,c){return this instanceof arguments.callee?(this._a=a,this._b=b,this._c=c,this):new arguments.callee(a,b,c)},a.fn[b]=function(c,d,e){var f=a[b](c,d,e);return f.data=this,f},a[b].prototype.sample=function(c){var d=this._a,e=this._b,f=this._c;return c?a.alter(c,function(){return a[b].sample(d,e,f)}):a[b].sample(d,e,f)},function(c){for(var d=0;d<c.length;d++)(function(c){a[b].prototype[c]=function(d){var e=this._a,f=this._b,g=this._c;return d||(d=this.data),typeof d!="number"?a.fn.map.call(d,function(d){return a[b][c](d,e,f,g)}):a[b][c](d,e,f,g)}})(c[d])}("pdf cdf inv".split(" ")),function(c){for(var d=0;d<c.length;d++)(function(c){a[b].prototype[c]=function(){return a[b][c](this._a,this._b,this._c)}})(c[d])}("mean median mode variance".split(" "))})(b[c])})("beta centralF cauchy chisquare exponential gamma invgamma kumaraswamy lognormal normal pareto studentt weibull uniform  binomial negbin hypgeom poisson triangular".split(" ")),a.extend(a.beta,{pdf:function(c,d,e){return c>1||c<0?0:d==1&&e==1?1:b.exp((d-1)*b.log(c)+(e-1)*b.log(1-c)-a.betaln(d,e))},cdf:function(b,c,d){return b>1||b<0?(b>1)*1:a.ibeta(b,c,d)},inv:function(b,c,d){return a.ibetainv(b,c,d)},mean:function(a,b){return a/(a+b)},median:function(a,b){},mode:function(a,c){return a*c/(b.pow(a+c,2)*(a+c+1))},sample:function(b,c){var d=a.randg(b);return d/(d+a.randg(c))},variance:function(a,c){return a*c/(b.pow(a+c,2)*(a+c+1))}}),a.extend(a.centralF,{pdf:function(c,d,e){return c>=0?b.sqrt(b.pow(d*c,d)*b.pow(e,e)/b.pow(d*c+e,d+e))/(c*a.betafn(d/2,e/2)):undefined},cdf:function(b,c,d){return a.ibeta(c*b/(c*b+d),c/2,d/2)},inv:function(b,c,d){return d/(c*(1/a.ibetainv(b,c/2,d/2)-1))},mean:function(a,b){return b>2?b/(b-2):undefined},mode:function(a,b){return a>2?b*(a-2)/(a*(b+2)):undefined},sample:function(b,c){var d=a.randg(b/2)*2,e=a.randg(c/2)*2;return d/b/(e/c)},variance:function(a,b){return b>4?2*b*b*(a+b-2)/(a*(b-2)*(b-2)*(b-4)):undefined}}),a.extend(a.cauchy,{pdf:function(a,c,d){return d/(b.pow(a-c,2)+b.pow(d,2))/b.PI},cdf:function(a,c,d){return b.atan((a-c)/d)/b.PI+.5},inv:function(a,c,d){return c+d*b.tan(b.PI*(a-.5))},median:function(a,b){return a},mode:function(a,b){return a},sample:function(c,d){return a.randn()*b.sqrt(1/(2*a.randg(.5)))*d+c}}),a.extend(a.chisquare,{pdf:function(c,d){return b.exp((d/2-1)*b.log(c)-c/2-d/2*b.log(2)-a.gammaln(d/2))},cdf:function(b,c){return a.gammap(c/2,b/2)},inv:function(b,c){return 2*a.gammapinv(b,.5*c)},mean:function(a){return a},median:function(a){return a*b.pow(1-2/(9*a),3)},mode:function(a){return a-2>0?a-2:0},sample:function(b){return a.randg(b/2)*2},variance:function(a){return 2*a}}),a.extend(a.exponential,{pdf:function(a,c){return a<0?0:c*b.exp(-c*a)},cdf:function(a,c){return a<0?0:1-b.exp(-c*a)},inv:function(a,c){return-b.log(1-a)/c},mean:function(a){return 1/a},median:function(a){return 1/a*b.log(2)},mode:function(a){return 0},sample:function(a){return-1/a*b.log(b.random())},variance:function(a){return b.pow(a,-2)}}),a.extend(a.gamma,{pdf:function(c,d,e){return b.exp((d-1)*b.log(c)-c/e-a.gammaln(d)-d*b.log(e))},cdf:function(b,c,d){return a.gammap(c,b/d)},inv:function(b,c,d){return a.gammapinv(b,c)*d},mean:function(a,b){return a*b},mode:function(a,b){return a>1?(a-1)*b:undefined},sample:function(b,c){return a.randg(b)*c},variance:function(a,b){return a*b*b}}),a.extend(a.invgamma,{pdf:function(c,d,e){return b.exp(-(d+1)*b.log(c)-e/c-a.gammaln(d)+d*b.log(e))},cdf:function(b,c,d){return 1-a.gammap(c,d/b)},inv:function(b,c,d){return d/a.gammapinv(1-b,c)},mean:function(a,b){return a>1?b/(a-1):undefined},mode:function(a,b){return b/(a+1)},sample:function(b,c){return c/a.randg(b)},variance:function(a,b){return a>2?b*b/((a-1)*(a-1)*(a-2)):undefined}}),a.extend(a.kumaraswamy,{pdf:function(a,c,d){return b.exp(b.log(c)+b.log(d)+(c-1)*b.log(a)+(d-1)*b.log(1-b.pow(a,c)))},cdf:function(a,c,d){return 1-b.pow(1-b.pow(a,c),d)},mean:function(b,c){return c*a.gammafn(1+1/b)*a.gammafn(c)/a.gammafn(1+1/b+c)},median:function(a,c){return b.pow(1-b.pow(2,-1/c),1/a)},mode:function(a,c){return a>=1&&c>=1&&a!==1&&c!==1?b.pow((a-1)/(a*c-1),1/a):undefined},variance:function(a,b){}}),a.extend(a.lognormal,{pdf:function(a,c,d){return b.exp(-b.log(a)-.5*b.log(2*b.PI)-b.log(d)-b.pow(b.log(a)-c,2)/(2*d*d))},cdf:function(c,d,e){return.5+.5*a.erf((b.log(c)-d)/b.sqrt(2*e*e))},inv:function(c,d,e){return b.exp(-1.4142135623730951*e*a.erfcinv(2*c)+d)},mean:function(a,c){return b.exp(a+c*c/2)},median:function(a,c){return b.exp(a)},mode:function(a,c){return b.exp(a-c*c)},sample:function(c,d){return b.exp(a.randn()*d+c)},variance:function(a,c){return(b.exp(c*c)-1)*b.exp(2*a+c*c)}}),a.extend(a.normal,{pdf:function(a,c,d){return b.exp(-0.5*b.log(2*b.PI)-b.log(d)-b.pow(a-c,2)/(2*d*d))},cdf:function(c,d,e){return.5*(1+a.erf((c-d)/b.sqrt(2*e*e)))},inv:function(b,c,d){return-1.4142135623730951*d*a.erfcinv(2*b)+c},mean:function(a,b){return a},median:function(a,b){return a},mode:function(a,b){return a},sample:function(b,c){return a.randn()*c+b},variance:function(a,b){return b*b}}),a.extend(a.pareto,{pdf:function(a,c,d){return a>c?d*b.pow(c,d)/b.pow(a,d+1):undefined},cdf:function(a,c,d){return 1-b.pow(c/a,d)},mean:function(a,c){return c>1?c*b.pow(a,c)/(c-1):undefined},median:function(a,c){return a*c*b.SQRT2},mode:function(a,b){return a},variance:function(a,c){return c>2?a*a*c/(b.pow(c-1,2)*(c-2)):undefined}}),a.extend(a.studentt,{pdf:function(c,d){return a.gammafn((d+1)/2)/(b.sqrt(d*b.PI)*a.gammafn(d/2))*b.pow(1+c*c/d,-((d+1)/2))},cdf:function(c,d){var e=d/2;return a.ibeta((c+b.sqrt(c*c+d))/(2*b.sqrt(c*c+d)),e,e)},inv:function(c,d){var e=a.ibetainv(2*b.min(c,1-c),.5*d,.5);return e=b.sqrt(d*(1-e)/e),c>0?e:-e},mean:function(a){return a>1?0:undefined},median:function(a){return 0},mode:function(a){return 0},sample:function(c){return a.randn()*b.sqrt(c/(2*a.randg(c/2)))},variance:function(a){return a>2?a/(a-2):a>1?Infinity:undefined}}),a.extend(a.weibull,{pdf:function(a,c,d){return a<0?0:d/c*b.pow(a/c,d-1)*b.exp(-b.pow(a/c,d))},cdf:function(a,c,d){return a<0?0:1-b.exp(-b.pow(a/c,d))},inv:function(a,c,d){return c*b.pow(-b.log(1-a),1/d)},mean:function(b,c){return b*a.gammafn(1+1/c)},median:function(a,c){return a*b.pow(b.log(2),1/c)},mode:function(a,c){return c>1?a*b.pow((c-1)/c,1/c):undefined},sample:function(a,c){return a*b.pow(-b.log(b.random()),1/c)},variance:function(c,d){return c*c*a.gammafn(1+2/d)-b.pow(this.mean(c,d),2)}}),a.extend(a.uniform,{pdf:function(a,b,c){return a<b||a>c?0:1/(c-b)},cdf:function(a,b,c){return a<b?0:a<c?(a-b)/(c-b):1},mean:function(a,b){return.5*(a+b)},median:function(b,c){return a.mean(b,c)},mode:function(a,b){},sample:function(a,c){return a/2+c/2+(c/2-a/2)*(2*b.random()-1)},variance:function(a,c){return b.pow(c-a,2)/12}}),a.extend(a.binomial,{pdf:function(c,d,e){return e===0||e===1?d*e===c?1:0:a.combination(d,c)*b.pow(e,c)*b.pow(1-e,d-c)},cdf:function(b,c,d){var e=[],f=0;if(b<0)return 0;if(b<c){for(;f<=b;f++)e[f]=a.binomial.pdf(f,c,d);return a.sum(e)}return 1}}),a.extend(a.negbin,{pdf:function(c,d,e){return c!==c|0?!1:c<0?0:a.combination(c+d-1,c)*b.pow(1-e,d)*b.pow(e,c)},cdf:function(b,c,d){var e=0,f=0;if(b<0)return 0;for(;f<=b;f++)e+=a.negbin.pdf(f,c,d);return e}}),a.extend(a.hypgeom,{pdf:function(b,c,d,e){return b!==b|0?!1:b<0?0:a.combination(d,b)*a.combination(c-d,e-b)/a.combination(c,e)},cdf:function(b,c,d,e){var f=0,g=0;if(b<0)return 0;for(;g<=b;g++)f+=a.hypgeom.pdf(g,c,d,e);return f}}),a.extend(a.poisson,{pdf:function(c,d){return b.pow(d,c)*b.exp(-d)/a.factorial(c)},cdf:function(b,c){var d=[],e=0;if(b<0)return 0;for(;e<=b;e++)d.push(a.poisson.pdf(e,c));return a.sum(d)},mean:function(a){return a},variance:function(a){return a},sample:function(a){var c=1,d=0,e=b.exp(-a);do d++,c*=b.random();while(c>e);return d-1}}),a.extend(a.triangular,{pdf:function(a,b,c,d){return c<=b||d<b||d>c?undefined:a<b||a>c?0:a<=d?2*(a-b)/((c-b)*(d-b)):2*(c-a)/((c-b)*(c-d))},cdf:function(a,c,d,e){return d<=c||e<c||e>d?undefined:a<c?0:a<=e?b.pow(a-c,2)/((d-c)*(e-c)):1-b.pow(d-a,2)/((d-c)*(d-e))},mean:function(a,b,c){return(a+b+c)/3},median:function(a,c,d){if(d<=(a+c)/2)return c-b.sqrt((c-a)*(c-d))/b.sqrt(2);if(d>(a+c)/2)return a+b.sqrt((c-a)*(d-a))/b.sqrt(2)},mode:function(a,b,c){return c},sample:function(a,c,d){var e=b.random();return e<(d-a)/(c-a)?a+b.sqrt(e*(c-a)*(d-a)):c-b.sqrt((1-e)*(c-a)*(c-d))},variance:function(a,b,c){return(a*a+b*b+c*c-a*b-a*c-b*c)/18}})}(this.jStat,Math),function(a,b){var d=Array.prototype.push,e=a.utils.isArray;a.extend({add:function(b,c){return e(c)?(e(c[0])||(c=[c]),a.map(b,function(a,b,d){return a+c[b][d]})):a.map(b,function(a){return a+c})},subtract:function(b,c){return e(c)?(e(c[0])||(c=[c]),a.map(b,function(a,b,d){return a-c[b][d]||0})):a.map(b,function(a){return a-c})},divide:function(b,c){return e(c)?(e(c[0])||(c=[c]),a.multiply(b,a.inv(c))):a.map(b,function(a){return a/c})},multiply:function(b,c){var d,f,g,h,i=b.length,j=b[0].length,k=a.zeros(i,g=e(c)?c[0].length:j),l=0;if(e(c)){for(;l<g;l++)for(d=0;d<i;d++){h=0;for(f=0;f<j;f++)h+=b[d][f]*c[f][l];k[d][l]=h}return i===1&&l===1?k[0][0]:k}return a.map(b,function(a){return a*c})},dot:function(b,c){e(b[0])||(b=[b]),e(c[0])||(c=[c]);var d=b[0].length===1&&b.length!==1?a.transpose(b):b,f=c[0].length===1&&c.length!==1?a.transpose(c):c,g=[],h=0,i=d.length,j=d[0].length,k,l;for(;h<i;h++){g[h]=[],k=0;for(l=0;l<j;l++)k+=d[h][l]*f[h][l];g[h]=k}return g.length===1?g[0]:g},pow:function(c,d){return a.map(c,function(a){return b.pow(a,d)})},abs:function(c){return a.map(c,function(a){return b.abs(a)})},norm:function(a,c){var d=0,f=0;isNaN(c)&&(c=2),e(a[0])&&(a=a[0]);for(;f<a.length;f++)d+=b.pow(b.abs(a[f]),c);return b.pow(d,1/c)},angle:function(c,d){return b.acos(a.dot(c,d)/(a.norm(c)*a.norm(d)))},aug:function(a,b){var c=a.slice(),e=0;for(;e<c.length;e++)d.apply(c[e],b[e]);return c},inv:function(b){var c=b.length,d=b[0].length,e=a.identity(c,d),f=a.gauss_jordan(b,e),g=[],h=0,i;for(;h<c;h++){g[h]=[];for(i=d-1;i<f[0].length;i++)g[h][i-d]=f[h][i]}return g},det:function(a){var b=a.length,c=b*2,d=new Array(c),e=b-1,f=c-1,g=e-b+1,h=f,i=0,j=0,k;if(b===2)return a[0][0]*a[1][1]-a[0][1]*a[1][0];for(;i<c;i++)d[i]=1;for(i=0;i<b;i++){for(k=0;k<b;k++)d[g<0?g+b:g]*=a[i][k],d[h<b?h+b:h]*=a[i][k],g++,h--;g=--e-b+1,h=--f}for(i=0;i<b;i++)j+=d[i];for(;i<c;i++)j-=d[i];return j},gauss_elimination:function(c,d){var e=0,f=0,g=c.length,h=c[0].length,i=1,j=0,k=[],l,m,n,o;c=a.aug(c,d),l=c[0].length;for(;e<g;e++){m=c[e][e],f=e;for(o=e+1;o<h;o++)m<b.abs(c[o][e])&&(m=c[o][e],f=o);if(f!=e)for(o=0;o<l;o++)n=c[e][o],c[e][o]=c[f][o],c[f][o]=n;for(f=e+1;f<g;f++){i=c[f][e]/c[e][e];for(o=e;o<l;o++)c[f][o]=c[f][o]-i*c[e][o]}}for(e=g-1;e>=0;e--){j=0;for(f=e+1;f<=g-1;f++)j=k[f]*c[e][f];k[e]=(c[e][l-1]-j)/c[e][e]}return k},gauss_jordan:function(d,e){var f=a.aug(d,e),g=f.length,h=f[0].length;for(var i=0;i<g;i++){var j=i;for(var k=i+1;k<g;k++)b.abs(f[k][i])>b.abs(f[j][i])&&(j=k);var l=f[i];f[i]=f[j],f[j]=l;for(var k=i+1;k<g;k++){c=f[k][i]/f[i][i];for(var m=i;m<h;m++)f[k][m]-=f[i][m]*c}}for(var i=g-1;i>=0;i--){c=f[i][i];for(var k=0;k<i;k++)for(var m=h-1;m>i-1;m--)f[k][m]-=f[i][m]*f[k][i]/c;f[i][i]/=c;for(var m=g;m<h;m++)f[i][m]/=c}return f},lu:function(a,b){},cholesky:function(a,b){},gauss_jacobi:function(c,d,e,f){var g=0,h=0,i=c.length,j=[],k=[],l=[],m,n,o,p;for(;g<i;g++){j[g]=[],k[g]=[],l[g]=[];for(h=0;h<i;h++)g>h?(j[g][h]=c[g][h],k[g][h]=l[g][h]=0):g<h?(k[g][h]=c[g][h],j[g][h]=l[g][h]=0):(l[g][h]=c[g][h],j[g][h]=k[g][h]=0)}o=a.multiply(a.multiply(a.inv(l),a.add(j,k)),-1),n=a.multiply(a.inv(l),d),m=e,p=a.add(a.multiply(o,e),n),g=2;while(b.abs(a.norm(a.subtract(p,m)))>f)m=p,p=a.add(a.multiply(o,m),n),g++;return p},gauss_seidel:function(c,d,e,f){var g=0,h=c.length,i=[],j=[],k=[],l,m,n,o,p;for(;g<h;g++){i[g]=[],j[g]=[],k[g]=[];for(l=0;l<h;l++)g>l?(i[g][l]=c[g][l],j[g][l]=k[g][l]=0):g<l?(j[g][l]=c[g][l],i[g][l]=k[g][l]=0):(k[g][l]=c[g][l],i[g][l]=j[g][l]=0)}o=a.multiply(a.multiply(a.inv(a.add(k,i)),j),-1),n=a.multiply(a.inv(a.add(k,i)),d),m=e,p=a.add(a.multiply(o,e),n),g=2;while(b.abs(a.norm(a.subtract(p,m)))>f)m=p,p=a.add(a.multiply(o,m),n),g+=1;return p},SOR:function(c,d,e,f,g){var h=0,i=c.length,j=[],k=[],l=[],m,n,o,p,q;for(;h<i;h++){j[h]=[],k[h]=[],l[h]=[];for(m=0;m<i;m++)h>m?(j[h][m]=c[h][m],k[h][m]=l[h][m]=0):h<m?(k[h][m]=c[h][m],j[h][m]=l[h][m]=0):(l[h][m]=c[h][m],j[h][m]=k[h][m]=0)}p=a.multiply(a.inv(a.add(l,a.multiply(j,g))),a.subtract(a.multiply(l,1-g),a.multiply(k,g))),o=a.multiply(a.multiply(a.inv(a.add(l,a.multiply(j,g))),d),g),n=e,q=a.add(a.multiply(p,e),o),h=2;while(b.abs(a.norm(a.subtract(q,n)))>f)n=q,q=a.add(a.multiply(p,n),o),h++;return q},householder:function(c){var d=c.length,e=c[0].length,f=0,g=[],h=[],i,j,k,l,m;for(;f<d-1;f++){i=0;for(l=f+1;l<e;l++)i+=c[l][f]*c[l][f];m=c[f+1][f]>0?-1:1,i=m*b.sqrt(i),j=b.sqrt((i*i-c[f+1][f]*i)/2),g=a.zeros(d,1),g[f+1][0]=(c[f+1][f]-i)/(2*j);for(k=f+2;k<d;k++)g[k][0]=c[k][f]/(2*j);h=a.subtract(a.identity(d,e),a.multiply(a.multiply(g,a.transpose(g)),2)),c=a.multiply(h,a.multiply(c,h))}return c},QR:function(c,d){var e=c.length,f=c[0].length,g=0,h=[],i=[],j=[],k,l,m,n,o,p;for(;g<e-1;g++){l=0;for(k=g+1;k<f;k++)l+=c[k][g]*c[k][g];o=c[g+1][g]>0?-1:1,l=o*b.sqrt(l),m=b.sqrt((l*l-c[g+1][g]*l)/2),h=a.zeros(e,1),h[g+1][0]=(c[g+1][g]-l)/(2*m);for(n=g+2;n<e;n++)h[n][0]=c[n][g]/(2*m);i=a.subtract(a.identity(e,f),a.multiply(a.multiply(h,a.transpose(h)),2)),c=a.multiply(i,c),d=a.multiply(i,d)}for(g=e-1;g>=0;g--){p=0;for(k=g+1;k<=f-1;k++)p=j[k]*c[g][k];j[g]=d[g][0]/c[g][g]}return j},jacobi:function(c){var d=1,e=0,f=c.length,g=a.identity(f,f),h=[],i,j,k,l,m,n,o,p;while(d===1){e++,n=c[0][1],l=0,m=1;for(j=0;j<f;j++)for(k=0;k<f;k++)j!=k&&n<b.abs(c[j][k])&&(n=b.abs(c[j][k]),l=j,m=k);c[l][l]===c[m][m]?o=c[l][m]>0?b.PI/4:-b.PI/4:o=b.atan(2*c[l][m]/(c[l][l]-c[m][m]))/2,p=a.identity(f,f),p[l][l]=b.cos(o),p[l][m]=-b.sin(o),p[m][l]=b.sin(o),p[m][m]=b.cos(o),g=a.multiply(g,p),i=a.multiply(a.multiply(a.inv(p),c),p),c=i,d=0;for(j=1;j<f;j++)for(k=1;k<f;k++)j!=k&&b.abs(c[j][k])>.001&&(d=1)}for(j=0;j<f;j++)h.push(c[j][j]);return[g,h]},rungekutta:function(a,b,c,d,e,f){var g,h,i,j,k;if(f===2)while(d<=c)g=b*a(d,e),h=b*a(d+b,e+g),i=e+(g+h)/2,e=i,d+=b;if(f===4)while(d<=c)g=b*a(d,e),h=b*a(d+b/2,e+g/2),j=b*a(d+b/2,e+h/2),k=b*a(d+b,e+j),i=e+(g+2*h+2*j+k)/6,e=i,d+=b;return e},romberg:function(a,c,d,e){var f=0,g=(d-c)/2,h=[],i=[],j=[],k,l,m,n,o,p;while(f<e/2){o=a(c);for(m=c,n=0;m<=d;m+=g,n++)h[n]=m;k=h.length;for(m=1;m<k-1;m++)o+=(m%2!==0?4:2)*a(h[m]);o=g/3*(o+a(d)),j[f]=o,g/=2,f++}l=j.length,k=1;while(l!==1){for(m=0;m<l-1;m++)i[m]=(b.pow(4,k)*j[m+1]-j[m])/(b.pow(4,k)-1);l=i.length,j=i,i=[],k++}return j},richardson:function(a,c,d,e){function f(a,b){var c=0,d=a.length,e;for(;c<d;c++)a[c]===b&&(e=c);return e}var g=a.length,h=b.abs(d-a[f(a,d)+1]),i=0,j=[],k=[],l,m,n,o,p;while(e>=h)l=f(a,d+e),m=f(a,d),j[i]=(c[l]-2*c[m]+c[2*m-l])/(e*e),e/=2,i++;o=j.length,n=1;while(o!=1){for(p=0;p<o-1;p++)k[p]=(b.pow(4,n)*j[p+1]-j[p])/(b.pow(4,n)-1);o=k.length,j=k,k=[],n++}return j},simpson:function(a,b,c,d){var e=(c-b)/d,f=a(b),g=[],h=b,i=0,j=1,k;for(;h<=c;h+=e,i++)g[i]=h;k=g.length;for(;j<k-1;j++)f+=(j%2!==0?4:2)*a(g[j]);return e/3*(f+a(c))},hermite:function(a,b,c,d){var e=a.length,f=0,g=0,h=[],i=[],j=[],k=[],l;for(;g<e;g++){h[g]=1;for(l=0;l<e;l++)g!=l&&(h[g]*=(d-a[l])/(a[g]-a[l]));i[g]=0;for(l=0;l<e;l++)g!=l&&(i[g]+=1/(a[g]-a[l]));j[g]=(1-2*(d-a[g])*i[g])*h[g]*h[g],k[g]=(d-a[g])*h[g]*h[g],f+=j[g]*b[g]+k[g]*c[g]}return f},lagrange:function(a,b,c){var d=0,e=0,f,g,h=a.length;for(;e<h;e++){g=b[e];for(f=0;f<h;f++)e!=f&&(g*=(c-a[f])/(a[e]-a[f]));d+=g}return d},cubic_spline:function(b,c,d){var e=b.length,f=0,g,h=[],i=[],j=[],k=[],l=[],m=[],n=[];for(;f<e-1;f++)l[f]=b[f+1]-b[f];j[0]=0;for(f=1;f<e-1;f++)j[f]=3/l[f]*(c[f+1]-c[f])-3/l[f-1]*(c[f]-c[f-1]);for(f=1;f<e-1;f++)h[f]=[],i[f]=[],h[f][f-1]=l[f-1],h[f][f]=2*(l[f-1]+l[f]),h[f][f+1]=l[f],i[f][0]=j[f];k=a.multiply(a.inv(h),i);for(g=0;g<e-1;g++)m[g]=(c[g+1]-c[g])/l[g]-l[g]*(k[g+1][0]+2*k[g][0])/3,n[g]=(k[g+1][0]-k[g][0])/(3*l[g]);for(g=0;g<e;g++)if(b[g]>d)break;return g-=1,c[g]+(d-b[g])*m[g]+a.sq(d-b[g])*k[g]+(d-b[g])*a.sq(d-b[g])*n[g]},gauss_quadrature:function(){},PCA:function(b){var c=b.length,d=b[0].length,e=!1,f=0,g,h,i=[],j=[],k=[],l=[],m=[],n=[],o=[],p=[],q=[],r=[];for(f=0;f<c;f++)i[f]=a.sum(b[f])/d;for(f=0;f<d;f++){o[f]=[];for(g=0;g<c;g++)o[f][g]=b[g][f]-i[g]}o=a.transpose(o);for(f=0;f<c;f++){p[f]=[];for(g=0;g<c;g++)p[f][g]=a.dot([o[f]],[o[g]])/(d-1)}k=a.jacobi(p),q=k[0],j=k[1],r=a.transpose(q);for(f=0;f<j.length;f++)for(g=f;g<j.length;g++)j[f]<j[g]&&(h=j[f],j[f]=j[g],j[g]=h,l=r[f],r[f]=r[g],r[g]=l);n=a.transpose(o);for(f=0;f<c;f++){m[f]=[];for(g=0;g<n.length;g++)m[f][g]=a.dot([r[f]],[n[g]])}return[b,j,r,m]}}),function(b){for(var c=0;c<b.length;c++)(function(b){a.fn[b]=function(c,d){var e=this;return d?(setTimeout(function(){d.call(e,a.fn[b].call(e,c))},15),this):a(a[b](this,c))}})(b[c])}("add divide multiply subtract dot pow abs norm angle".split(" "))}(this.jStat,Math),function(a,b){var c=[].slice,d=a.utils.isNumber;a.extend({zscore:function(){var b=c.call(arguments);return d(b[1])?(b[0]-b[1])/b[2]:(b[0]-a.mean(b[1]))/a.stdev(b[1],b[2])},ztest:function(){var e=c.call(arguments);if(e.length===4){if(d(e[1])){var f=a.zscore(e[0],e[1],e[2]);return e[3]===1?a.normal.cdf(-b.abs(f),0,1):a.normal.cdf(-b.abs(f),0,1)*2}var f=e[0];return e[2]===1?a.normal.cdf(-b.abs(f),0,1):a.normal.cdf(-b.abs(f),0,1)*2}var f=a.zscore(e[0],e[1],e[3]);return e[1]===1?a.normal.cdf(-b.abs(f),0,1):a.normal.cdf(-b.abs(f),0,1)*2}}),a.extend(a.fn,{zscore:function(a,b){return(a-this.mean())/this.stdev(b)},ztest:function(c,d,e){var f=b.abs(this.zscore(c,e));return d===1?a.normal.cdf(-f,0,1):a.normal.cdf(-f,0,1)*2}}),a.extend({tscore:function(){var d=c.call(arguments);return d.length===4?(d[0]-d[1])/(d[2]/b.sqrt(d[3])):(d[0]-a.mean(d[1]))/(a.stdev(d[1],!0)/b.sqrt(d[1].length))},ttest:function(){var e=c.call(arguments),f;return e.length===5?(f=b.abs(a.tscore(e[0],e[1],e[2],e[3])),e[4]===1?a.studentt.cdf(-f,e[3]-1):a.studentt.cdf(-f,e[3]-1)*2):d(e[1])?(f=b.abs(e[0]),e[2]==1?a.studentt.cdf(-f,e[1]-1):a.studentt.cdf(-f,e[1]-1)*2):(f=b.abs(a.tscore(e[0],e[1])),e[2]==1?a.studentt.cdf(-f,e[1].length-1):a.studentt.cdf(-f,e[1].length-1)*2)}}),a.extend(a.fn,{tscore:function(a){return(a-this.mean())/(this.stdev(!0)/b.sqrt(this.cols()))},ttest:function(c,d){return d===1?1-a.studentt.cdf(b.abs(this.tscore(c)),this.cols()-1):a.studentt.cdf(-b.abs(this.tscore(c)),this.cols()-1)*2}}),a.extend({anovafscore:function(){var d=c.call(arguments),e,f,g,h,i,j,k,l;if(d.length===1){i=new Array(d[0].length);for(k=0;k<d[0].length;k++)i[k]=d[0][k];d=i}if(d.length===2)return a.variance(d[0])/a.variance(d[1]);f=new Array;for(k=0;k<d.length;k++)f=f.concat(d[k]);g=a.mean(f),e=0;for(k=0;k<d.length;k++)e+=d[k].length*b.pow(a.mean(d[k])-g,2);e/=d.length-1,j=0;for(k=0;k<d.length;k++){h=a.mean(d[k]);for(l=0;l<d[k].length;l++)j+=b.pow(d[k][l]-h,2)}return j/=f.length-d.length,e/j},anovaftest:function(){var b=c.call(arguments),e,f,g,h;if(d(b[0]))return 1-a.centralF.cdf(b[0],b[1],b[2]);anovafscore=a.anovafscore(b),e=b.length-1,g=0;for(h=0;h<b.length;h++)g+=b[h].length;return f=g-e-1,1-a.centralF.cdf(anovafscore,e,f)},ftest:function(b,c,d){return 1-a.centralF.cdf(b,c,d)}}),a.extend(a.fn,{anovafscore:function(){return a.anovafscore(this.toArray())},anovaftest:function(){var b=0,c;for(c=0;c<this.length;c++)b+=this[c].length;return a.ftest(this.anovafscore(),this.length-1,b-this.length)}}),a.extend({normalci:function(){var d=c.call(arguments),e=new Array(2),f;return d.length===4?f=b.abs(a.normal.inv(d[1]/2,0,1)*d[2]/b.sqrt(d[3])):f=b.abs(a.normal.inv(d[1]/2,0,1)*a.stdev(d[2])/b.sqrt(d[2].length)),e[0]=d[0]-f,e[1]=d[0]+f,e},tci:function(){var d=c.call(arguments),e=new Array(2),f;return d.length===4?f=b.abs(a.studentt.inv(d[1]/2,d[3]-1
)*d[2]/b.sqrt(d[3])):f=b.abs(a.studentt.inv(d[1]/2,d[2].length)*a.stdev(d[2],!0)/b.sqrt(d[2].length)),e[0]=d[0]-f,e[1]=d[0]+f,e},significant:function(a,b){return a<b}}),a.extend(a.fn,{normalci:function(b,c){return a.normalci(b,c,this.toArray())},tci:function(b,c){return a.tci(b,c,this.toArray())}})}(this.jStat,Math);



// Choose which stats to replace.
// NOTE: You need to rename these statistics using Edit > Table Options > Output Text and typing
// "Upper Confidence Interval" and "Lower Confidence Interval" for upper_statistic_to_replace and
// upper_statistic_to_replace, respectively.
var upper_statistic_to_replace;
var lower_statistic_to_replace;
// Categorical results
if (table.availableStatistics.indexOf("Column %") > -1) {
    var upper_statistic_to_replace = "Index";
    var lower_statistic_to_replace = "Missing n";
} else {
	table.suppressOutput('Confidence intervals not computed - it only applies to tables containing Column % in the Statistics - Cells');
    form.ruleNotApplicable('it only applies to tables containing Column % in the Statistics - Cells');
}

if (["Pick One", "Pick Any"].indexOf(table.blueQuestion.questionType) == -1 || ["Pick One", "Pick Any"].indexOf(table.brownQuestion.questionType) == -1){
    table.suppressOutput('Confidence intervals not computed - the table should have a Pick One or Pick Any question selected in the Blue and Brown drop-down menus.');
    form.ruleNotApplicable('the table should have a Pick One or Pick Any question selected in the Blue and Brown drop-down menus.');
}

// Set up controls for user input.
form.setSummary('Calculate confidence intervals on crosstabs with percentages');  
form.setHeading('Calculate confidence intervals on crosstabs with percentages');

var label = form.newLabel('Significance level:');
var p_level  = form.newNumericUpDown('Lower');
p_level.setIncrement(0.01);
p_level.setDefault(0.05);
p_level.setMaximum(1);
p_level.setMinimum(0);
form.setInputControls([label, p_level]);

var p_cutoff = p_level.getValue();

// Get relevant table stats
var n = table.get("n");
var col_n = table.get("Column n");
var col_percent = table.get("Column %");
var col_se = table.get("Column Standard Error");
var upper_values = table.get(upper_statistic_to_replace);
var lower_values = table.get(lower_statistic_to_replace);
var isWeight = table.weight != null;

// Do the calculations
for (var row = 0; row < table.numberRows; row++) {
    for (var col = 0; col < table.numberColumns; col++) {
        var z = jStat.normal.inv(p_cutoff/2,0,1);

        if (isWeight) {
            var increment = z*col_se[row][col]*100;
            lower_values[row][col] = col_percent[row][col] + increment;
            upper_values[row][col] = col_percent[row][col] - increment;
        } else {    
            var calc1 = col_n[row][col] + Math.pow(z,2);
            var calc2 = (n[row][col] + Math.pow(z,2)/2)/calc1;
            var calc3 = Math.sqrt(calc2*(1-calc2)/calc1);
            var increment = z*calc3;
            lower_values[row][col] = (calc2 + increment)*100;
            upper_values[row][col] = (calc2 - increment)*100;
        }

    }    
}

table.set(lower_statistic_to_replace, lower_values);
table.set(upper_statistic_to_replace, upper_values);

Notes:

  • This Rule applies one of two the formulas from the page Confidence Interval, depending on whether or not the table is weighted:
    • When the table is weighted, the rule applies the formula from the section called Default confidence intervals. This which uses the quantiles of the normal distribution.
    • When the table is not weighted, this rule applies the formula described in the section Confidence intervals for percentages with unweighted samples. This is the Agresti-Coull interval
  • The rule uses the Column %, Column Standard Error, n, and Column n statistics on your table.
  • This Rule uses the jStat JavaScript library to compute the quantiles of the normal distribution.

See also