1&&\"string\"==typeof v&&!d.checkClone&&je.test(v))return e.each((function(i){var o=e.eq(i);y&&(t[0]=v.call(this,i,o.html())),Me(o,t,n,r)}));if(p&&(a=(i=be(t,e[0].ownerDocument,!1,e,r)).firstChild,1===i.childNodes.length&&(i=a),a||r)){for(u=(s=w.map(ye(i,\"script\"),He)).length;f0&&me(a,!u&&ye(e,\"script\")),s},cleanData:function(e){for(var t,n,r,i=w.event.special,o=0;void 0!==(n=e[o]);o++)if(V(n)){if(t=n[Y.expando]){if(t.events)for(r in t.events)i[r]?w.event.remove(n,r):w.removeEvent(n,r,t.handle);n[Y.expando]=void 0}n[Q.expando]&&(n[Q.expando]=void 0)}}}),w.fn.extend({detach:function(e){return Ie(this,e,!0)},remove:function(e){return Ie(this,e)},text:function(e){return $(this,(function(e){return void 0===e?w.text(this):this.empty().each((function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)}))}),null,e,arguments.length)},append:function(){return Me(this,arguments,(function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||Le(this,e).appendChild(e)}))},prepend:function(){return Me(this,arguments,(function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Le(this,e);t.insertBefore(e,t.firstChild)}}))},before:function(){return Me(this,arguments,(function(e){this.parentNode&&this.parentNode.insertBefore(e,this)}))},after:function(){return Me(this,arguments,(function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)}))},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(w.cleanData(ye(e,!1)),e.textContent=\"\");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map((function(){return w.clone(this,e,t)}))},html:function(e){return $(this,(function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if(\"string\"==typeof e&&!De.test(e)&&!ve[(he.exec(e)||[\"\",\"\"])[1].toLowerCase()]){e=w.htmlPrefilter(e);try{for(;n3,re.removeChild(t)),s}}))}();var Ue=[\"Webkit\",\"Moz\",\"ms\"],Xe=v.createElement(\"div\").style,Ve={};function Ge(e){var t=w.cssProps[e]||Ve[e];return t||(e in Xe?e:Ve[e]=function(e){for(var t=e[0].toUpperCase()+e.slice(1),n=Ue.length;n--;)if((e=Ue[n]+t)in Xe)return e}(e)||e)}var Ye=/^(none|table(?!-c[ea]).+)/,Qe=/^--/,Je={position:\"absolute\",visibility:\"hidden\",display:\"block\"},Ke={letterSpacing:\"0\",fontWeight:\"400\"};function Ze(e,t,n){var r=te.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3]||\"px\"):t}function et(e,t,n,r,i,o){var a=\"width\"===t?1:0,s=0,u=0;if(n===(r?\"border\":\"content\"))return 0;for(;a<4;a+=2)\"margin\"===n&&(u+=w.css(e,n+ne[a],!0,i)),r?(\"content\"===n&&(u-=w.css(e,\"padding\"+ne[a],!0,i)),\"margin\"!==n&&(u-=w.css(e,\"border\"+ne[a]+\"Width\",!0,i))):(u+=w.css(e,\"padding\"+ne[a],!0,i),\"padding\"!==n?u+=w.css(e,\"border\"+ne[a]+\"Width\",!0,i):s+=w.css(e,\"border\"+ne[a]+\"Width\",!0,i));return!r&&o>=0&&(u+=Math.max(0,Math.ceil(e[\"offset\"+t[0].toUpperCase()+t.slice(1)]-o-u-s-.5))||0),u}function tt(e,t,n){var r=Fe(e),i=(!d.boxSizingReliable()||n)&&\"border-box\"===w.css(e,\"boxSizing\",!1,r),o=i,a=_e(e,t,r),s=\"offset\"+t[0].toUpperCase()+t.slice(1);if(We.test(a)){if(!n)return a;a=\"auto\"}return(!d.boxSizingReliable()&&i||!d.reliableTrDimensions()&&A(e,\"tr\")||\"auto\"===a||!parseFloat(a)&&\"inline\"===w.css(e,\"display\",!1,r))&&e.getClientRects().length&&(i=\"border-box\"===w.css(e,\"boxSizing\",!1,r),(o=s in e)&&(a=e[s])),(a=parseFloat(a)||0)+et(e,t,n||(i?\"border\":\"content\"),o,r,a)+\"px\"}function nt(e,t,n,r,i){return new nt.prototype.init(e,t,n,r,i)}w.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=_e(e,\"opacity\");return\"\"===n?\"1\":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=X(t),u=Qe.test(t),l=e.style;if(u||(t=Ge(s)),a=w.cssHooks[t]||w.cssHooks[s],void 0===n)return a&&\"get\"in a&&void 0!==(i=a.get(e,!1,r))?i:l[t];\"string\"===(o=typeof n)&&(i=te.exec(n))&&i[1]&&(n=se(e,t,i),o=\"number\"),null!=n&&n==n&&(\"number\"!==o||u||(n+=i&&i[3]||(w.cssNumber[s]?\"\":\"px\")),d.clearCloneStyle||\"\"!==n||0!==t.indexOf(\"background\")||(l[t]=\"inherit\"),a&&\"set\"in a&&void 0===(n=a.set(e,n,r))||(u?l.setProperty(t,n):l[t]=n))}},css:function(e,t,n,r){var i,o,a,s=X(t);return Qe.test(t)||(t=Ge(s)),(a=w.cssHooks[t]||w.cssHooks[s])&&\"get\"in a&&(i=a.get(e,!0,n)),void 0===i&&(i=_e(e,t,r)),\"normal\"===i&&t in Ke&&(i=Ke[t]),\"\"===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),w.each([\"height\",\"width\"],(function(e,t){w.cssHooks[t]={get:function(e,n,r){if(n)return!Ye.test(w.css(e,\"display\"))||e.getClientRects().length&&e.getBoundingClientRect().width?tt(e,t,r):Be(e,Je,(function(){return tt(e,t,r)}))},set:function(e,n,r){var i,o=Fe(e),a=!d.scrollboxSize()&&\"absolute\"===o.position,s=(a||r)&&\"border-box\"===w.css(e,\"boxSizing\",!1,o),u=r?et(e,t,r,s,o):0;return s&&a&&(u-=Math.ceil(e[\"offset\"+t[0].toUpperCase()+t.slice(1)]-parseFloat(o[t])-et(e,t,\"border\",!1,o)-.5)),u&&(i=te.exec(n))&&\"px\"!==(i[3]||\"px\")&&(e.style[t]=n,n=w.css(e,t)),Ze(0,n,u)}}})),w.cssHooks.marginLeft=ze(d.reliableMarginLeft,(function(e,t){if(t)return(parseFloat(_e(e,\"marginLeft\"))||e.getBoundingClientRect().left-Be(e,{marginLeft:0},(function(){return e.getBoundingClientRect().left})))+\"px\"})),w.each({margin:\"\",padding:\"\",border:\"Width\"},(function(e,t){w.cssHooks[e+t]={expand:function(n){for(var r=0,i={},o=\"string\"==typeof n?n.split(\" \"):[n];r<4;r++)i[e+ne[r]+t]=o[r]||o[r-2]||o[0];return i}},\"margin\"!==e&&(w.cssHooks[e+t].set=Ze)})),w.fn.extend({css:function(e,t){return $(this,(function(e,t,n){var r,i,o={},a=0;if(Array.isArray(t)){for(r=Fe(e),i=t.length;a1)}}),w.Tween=nt,nt.prototype={constructor:nt,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||w.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(w.cssNumber[n]?\"\":\"px\")},cur:function(){var e=nt.propHooks[this.prop];return e&&e.get?e.get(this):nt.propHooks._default.get(this)},run:function(e){var t,n=nt.propHooks[this.prop];return this.options.duration?this.pos=t=w.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):nt.propHooks._default.set(this),this}},nt.prototype.init.prototype=nt.prototype,nt.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=w.css(e.elem,e.prop,\"\"))&&\"auto\"!==t?t:0},set:function(e){w.fx.step[e.prop]?w.fx.step[e.prop](e):1!==e.elem.nodeType||!w.cssHooks[e.prop]&&null==e.elem.style[Ge(e.prop)]?e.elem[e.prop]=e.now:w.style(e.elem,e.prop,e.now+e.unit)}}},nt.propHooks.scrollTop=nt.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},w.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:\"swing\"},w.fx=nt.prototype.init,w.fx.step={};var rt,it,ot=/^(?:toggle|show|hide)$/,at=/queueHooks$/;function st(){it&&(!1===v.hidden&&e.requestAnimationFrame?e.requestAnimationFrame(st):e.setTimeout(st,w.fx.interval),w.fx.tick())}function ut(){return e.setTimeout((function(){rt=void 0})),rt=Date.now()}function lt(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)i[\"margin\"+(n=ne[r])]=i[\"padding\"+n]=e;return t&&(i.opacity=i.width=e),i}function ct(e,t,n){for(var r,i=(ft.tweeners[t]||[]).concat(ft.tweeners[\"*\"]),o=0,a=i.length;o1)},removeAttr:function(e){return this.each((function(){w.removeAttr(this,e)}))}}),w.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return void 0===e.getAttribute?w.prop(e,t,n):(1===o&&w.isXMLDoc(e)||(i=w.attrHooks[t.toLowerCase()]||(w.expr.match.bool.test(t)?pt:void 0)),void 0!==n?null===n?void w.removeAttr(e,t):i&&\"set\"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+\"\"),n):i&&\"get\"in i&&null!==(r=i.get(e,t))?r:null==(r=w.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!d.radioValue&&\"radio\"===t&&A(e,\"input\")){var n=e.value;return e.setAttribute(\"type\",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(P);if(i&&1===e.nodeType)for(;n=i[r++];)e.removeAttribute(n)}}),pt={set:function(e,t,n){return!1===t?w.removeAttr(e,n):e.setAttribute(n,n),n}},w.each(w.expr.match.bool.source.match(/\\w+/g),(function(e,t){var n=dt[t]||w.find.attr;dt[t]=function(e,t,r){var i,o,a=t.toLowerCase();return r||(o=dt[a],dt[a]=i,i=null!=n(e,t,r)?a:null,dt[a]=o),i}}));var ht=/^(?:input|select|textarea|button)$/i,gt=/^(?:a|area)$/i;function vt(e){return(e.match(P)||[]).join(\" \")}function yt(e){return e.getAttribute&&e.getAttribute(\"class\")||\"\"}function mt(e){return Array.isArray(e)?e:\"string\"==typeof e&&e.match(P)||[]}w.fn.extend({prop:function(e,t){return $(this,w.prop,e,t,arguments.length>1)},removeProp:function(e){return this.each((function(){delete this[w.propFix[e]||e]}))}}),w.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&w.isXMLDoc(e)||(t=w.propFix[t]||t,i=w.propHooks[t]),void 0!==n?i&&\"set\"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&\"get\"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=w.find.attr(e,\"tabindex\");return t?parseInt(t,10):ht.test(e.nodeName)||gt.test(e.nodeName)&&e.href?0:-1}}},propFix:{for:\"htmlFor\",class:\"className\"}}),d.optSelected||(w.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),w.each([\"tabIndex\",\"readOnly\",\"maxLength\",\"cellSpacing\",\"cellPadding\",\"rowSpan\",\"colSpan\",\"useMap\",\"frameBorder\",\"contentEditable\"],(function(){w.propFix[this.toLowerCase()]=this})),w.fn.extend({addClass:function(e){var t,n,r,i,o,a,s,u=0;if(h(e))return this.each((function(t){w(this).addClass(e.call(this,t,yt(this)))}));if((t=mt(e)).length)for(;n=this[u++];)if(i=yt(n),r=1===n.nodeType&&\" \"+vt(i)+\" \"){for(a=0;o=t[a++];)r.indexOf(\" \"+o+\" \")<0&&(r+=o+\" \");i!==(s=vt(r))&&n.setAttribute(\"class\",s)}return this},removeClass:function(e){var t,n,r,i,o,a,s,u=0;if(h(e))return this.each((function(t){w(this).removeClass(e.call(this,t,yt(this)))}));if(!arguments.length)return this.attr(\"class\",\"\");if((t=mt(e)).length)for(;n=this[u++];)if(i=yt(n),r=1===n.nodeType&&\" \"+vt(i)+\" \"){for(a=0;o=t[a++];)for(;r.indexOf(\" \"+o+\" \")>-1;)r=r.replace(\" \"+o+\" \",\" \");i!==(s=vt(r))&&n.setAttribute(\"class\",s)}return this},toggleClass:function(e,t){var n=typeof e,r=\"string\"===n||Array.isArray(e);return\"boolean\"==typeof t&&r?t?this.addClass(e):this.removeClass(e):h(e)?this.each((function(n){w(this).toggleClass(e.call(this,n,yt(this),t),t)})):this.each((function(){var t,i,o,a;if(r)for(i=0,o=w(this),a=mt(e);t=a[i++];)o.hasClass(t)?o.removeClass(t):o.addClass(t);else void 0!==e&&\"boolean\"!==n||((t=yt(this))&&Y.set(this,\"__className__\",t),this.setAttribute&&this.setAttribute(\"class\",t||!1===e?\"\":Y.get(this,\"__className__\")||\"\"))}))},hasClass:function(e){var t,n,r=0;for(t=\" \"+e+\" \";n=this[r++];)if(1===n.nodeType&&(\" \"+vt(yt(n))+\" \").indexOf(t)>-1)return!0;return!1}});var xt=/\\r/g;w.fn.extend({val:function(e){var t,n,r,i=this[0];return arguments.length?(r=h(e),this.each((function(n){var i;1===this.nodeType&&(null==(i=r?e.call(this,n,w(this).val()):e)?i=\"\":\"number\"==typeof i?i+=\"\":Array.isArray(i)&&(i=w.map(i,(function(e){return null==e?\"\":e+\"\"}))),(t=w.valHooks[this.type]||w.valHooks[this.nodeName.toLowerCase()])&&\"set\"in t&&void 0!==t.set(this,i,\"value\")||(this.value=i))}))):i?(t=w.valHooks[i.type]||w.valHooks[i.nodeName.toLowerCase()])&&\"get\"in t&&void 0!==(n=t.get(i,\"value\"))?n:\"string\"==typeof(n=i.value)?n.replace(xt,\"\"):null==n?\"\":n:void 0}}),w.extend({valHooks:{option:{get:function(e){var t=w.find.attr(e,\"value\");return null!=t?t:vt(w.text(e))}},select:{get:function(e){var t,n,r,i=e.options,o=e.selectedIndex,a=\"select-one\"===e.type,s=a?null:[],u=a?o+1:i.length;for(r=o<0?u:a?o:0;r-1)&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),w.each([\"radio\",\"checkbox\"],(function(){w.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=w.inArray(w(e).val(),t)>-1}},d.checkOn||(w.valHooks[this].get=function(e){return null===e.getAttribute(\"value\")?\"on\":e.value})})),d.focusin=\"onfocusin\"in e;var bt=/^(?:focusinfocus|focusoutblur)$/,wt=function(e){e.stopPropagation()};w.extend(w.event,{trigger:function(t,n,r,i){var o,a,s,u,l,f,p,d,y=[r||v],m=c.call(t,\"type\")?t.type:t,x=c.call(t,\"namespace\")?t.namespace.split(\".\"):[];if(a=d=s=r=r||v,3!==r.nodeType&&8!==r.nodeType&&!bt.test(m+w.event.triggered)&&(m.indexOf(\".\")>-1&&(x=m.split(\".\"),m=x.shift(),x.sort()),l=m.indexOf(\":\")<0&&\"on\"+m,(t=t[w.expando]?t:new w.Event(m,\"object\"==typeof t&&t)).isTrigger=i?2:3,t.namespace=x.join(\".\"),t.rnamespace=t.namespace?new RegExp(\"(^|\\\\.)\"+x.join(\"\\\\.(?:.*\\\\.|)\")+\"(\\\\.|$)\"):null,t.result=void 0,t.target||(t.target=r),n=null==n?[t]:w.makeArray(n,[t]),p=w.event.special[m]||{},i||!p.trigger||!1!==p.trigger.apply(r,n))){if(!i&&!p.noBubble&&!g(r)){for(u=p.delegateType||m,bt.test(u+m)||(a=a.parentNode);a;a=a.parentNode)y.push(a),s=a;s===(r.ownerDocument||v)&&y.push(s.defaultView||s.parentWindow||e)}for(o=0;(a=y[o++])&&!t.isPropagationStopped();)d=a,t.type=o>1?u:p.bindType||m,(f=(Y.get(a,\"events\")||Object.create(null))[t.type]&&Y.get(a,\"handle\"))&&f.apply(a,n),(f=l&&a[l])&&f.apply&&V(a)&&(t.result=f.apply(a,n),!1===t.result&&t.preventDefault());return t.type=m,i||t.isDefaultPrevented()||p._default&&!1!==p._default.apply(y.pop(),n)||!V(r)||l&&h(r[m])&&!g(r)&&((s=r[l])&&(r[l]=null),w.event.triggered=m,t.isPropagationStopped()&&d.addEventListener(m,wt),r[m](),t.isPropagationStopped()&&d.removeEventListener(m,wt),w.event.triggered=void 0,s&&(r[l]=s)),t.result}},simulate:function(e,t,n){var r=w.extend(new w.Event,n,{type:e,isSimulated:!0});w.event.trigger(r,null,t)}}),w.fn.extend({trigger:function(e,t){return this.each((function(){w.event.trigger(e,t,this)}))},triggerHandler:function(e,t){var n=this[0];if(n)return w.event.trigger(e,t,n,!0)}}),d.focusin||w.each({focus:\"focusin\",blur:\"focusout\"},(function(e,t){var n=function(e){w.event.simulate(t,e.target,w.event.fix(e))};w.event.special[t]={setup:function(){var r=this.ownerDocument||this.document||this,i=Y.access(r,t);i||r.addEventListener(e,n,!0),Y.access(r,t,(i||0)+1)},teardown:function(){var r=this.ownerDocument||this.document||this,i=Y.access(r,t)-1;i?Y.access(r,t,i):(r.removeEventListener(e,n,!0),Y.remove(r,t))}}}));var Tt=e.location,Ct={guid:Date.now()},Et=/\\?/;w.parseXML=function(t){var n;if(!t||\"string\"!=typeof t)return null;try{n=(new e.DOMParser).parseFromString(t,\"text/xml\")}catch(e){n=void 0}return n&&!n.getElementsByTagName(\"parsererror\").length||w.error(\"Invalid XML: \"+t),n};var St=/\\[\\]$/,kt=/\\r?\\n/g,At=/^(?:submit|button|image|reset|file)$/i,Nt=/^(?:input|select|textarea|keygen)/i;function Dt(e,t,n,r){var i;if(Array.isArray(t))w.each(t,(function(t,i){n||St.test(e)?r(e,i):Dt(e+\"[\"+(\"object\"==typeof i&&null!=i?t:\"\")+\"]\",i,n,r)}));else if(n||\"object\"!==x(t))r(e,t);else for(i in t)Dt(e+\"[\"+i+\"]\",t[i],n,r)}w.param=function(e,t){var n,r=[],i=function(e,t){var n=h(t)?t():t;r[r.length]=encodeURIComponent(e)+\"=\"+encodeURIComponent(null==n?\"\":n)};if(null==e)return\"\";if(Array.isArray(e)||e.jquery&&!w.isPlainObject(e))w.each(e,(function(){i(this.name,this.value)}));else for(n in e)Dt(n,e[n],t,i);return r.join(\"&\")},w.fn.extend({serialize:function(){return w.param(this.serializeArray())},serializeArray:function(){return this.map((function(){var e=w.prop(this,\"elements\");return e?w.makeArray(e):this})).filter((function(){var e=this.type;return this.name&&!w(this).is(\":disabled\")&&Nt.test(this.nodeName)&&!At.test(e)&&(this.checked||!de.test(e))})).map((function(e,t){var n=w(this).val();return null==n?null:Array.isArray(n)?w.map(n,(function(e){return{name:t.name,value:e.replace(kt,\"\\r\\n\")}})):{name:t.name,value:n.replace(kt,\"\\r\\n\")}})).get()}});var jt=/%20/g,qt=/#.*$/,Lt=/([?&])_=[^&]*/,Ht=/^(.*?):[ \\t]*([^\\r\\n]*)$/gm,Ot=/^(?:GET|HEAD)$/,Pt=/^\\/\\//,Rt={},Mt={},It=\"*/\".concat(\"*\"),Wt=v.createElement(\"a\");function Ft(e){return function(t,n){\"string\"!=typeof t&&(n=t,t=\"*\");var r,i=0,o=t.toLowerCase().match(P)||[];if(h(n))for(;r=o[i++];)\"+\"===r[0]?(r=r.slice(1)||\"*\",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function Bt(e,t,n,r){var i={},o=e===Mt;function a(s){var u;return i[s]=!0,w.each(e[s]||[],(function(e,s){var l=s(t,n,r);return\"string\"!=typeof l||o||i[l]?o?!(u=l):void 0:(t.dataTypes.unshift(l),a(l),!1)})),u}return a(t.dataTypes[0])||!i[\"*\"]&&a(\"*\")}function $t(e,t){var n,r,i=w.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&w.extend(!0,e,r),e}Wt.href=Tt.href,w.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Tt.href,type:\"GET\",isLocal:/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(Tt.protocol),global:!0,processData:!0,async:!0,contentType:\"application/x-www-form-urlencoded; charset=UTF-8\",accepts:{\"*\":It,text:\"text/plain\",html:\"text/html\",xml:\"application/xml, text/xml\",json:\"application/json, text/javascript\"},contents:{xml:/\\bxml\\b/,html:/\\bhtml/,json:/\\bjson\\b/},responseFields:{xml:\"responseXML\",text:\"responseText\",json:\"responseJSON\"},converters:{\"* text\":String,\"text html\":!0,\"text json\":JSON.parse,\"text xml\":w.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?$t($t(e,w.ajaxSettings),t):$t(w.ajaxSettings,e)},ajaxPrefilter:Ft(Rt),ajaxTransport:Ft(Mt),ajax:function(t,n){\"object\"==typeof t&&(n=t,t=void 0),n=n||{};var r,i,o,a,s,u,l,c,f,p,d=w.ajaxSetup({},n),h=d.context||d,g=d.context&&(h.nodeType||h.jquery)?w(h):w.event,y=w.Deferred(),m=w.Callbacks(\"once memory\"),x=d.statusCode||{},b={},T={},C=\"canceled\",E={readyState:0,getResponseHeader:function(e){var t;if(l){if(!a)for(a={};t=Ht.exec(o);)a[t[1].toLowerCase()+\" \"]=(a[t[1].toLowerCase()+\" \"]||[]).concat(t[2]);t=a[e.toLowerCase()+\" \"]}return null==t?null:t.join(\", \")},getAllResponseHeaders:function(){return l?o:null},setRequestHeader:function(e,t){return null==l&&(e=T[e.toLowerCase()]=T[e.toLowerCase()]||e,b[e]=t),this},overrideMimeType:function(e){return null==l&&(d.mimeType=e),this},statusCode:function(e){var t;if(e)if(l)E.always(e[E.status]);else for(t in e)x[t]=[x[t],e[t]];return this},abort:function(e){var t=e||C;return r&&r.abort(t),S(0,t),this}};if(y.promise(E),d.url=((t||d.url||Tt.href)+\"\").replace(Pt,Tt.protocol+\"//\"),d.type=n.method||n.type||d.method||d.type,d.dataTypes=(d.dataType||\"*\").toLowerCase().match(P)||[\"\"],null==d.crossDomain){u=v.createElement(\"a\");try{u.href=d.url,u.href=u.href,d.crossDomain=Wt.protocol+\"//\"+Wt.host!=u.protocol+\"//\"+u.host}catch(e){d.crossDomain=!0}}if(d.data&&d.processData&&\"string\"!=typeof d.data&&(d.data=w.param(d.data,d.traditional)),Bt(Rt,d,n,E),l)return E;for(f in(c=w.event&&d.global)&&0==w.active++&&w.event.trigger(\"ajaxStart\"),d.type=d.type.toUpperCase(),d.hasContent=!Ot.test(d.type),i=d.url.replace(qt,\"\"),d.hasContent?d.data&&d.processData&&0===(d.contentType||\"\").indexOf(\"application/x-www-form-urlencoded\")&&(d.data=d.data.replace(jt,\"+\")):(p=d.url.slice(i.length),d.data&&(d.processData||\"string\"==typeof d.data)&&(i+=(Et.test(i)?\"&\":\"?\")+d.data,delete d.data),!1===d.cache&&(i=i.replace(Lt,\"$1\"),p=(Et.test(i)?\"&\":\"?\")+\"_=\"+Ct.guid+++p),d.url=i+p),d.ifModified&&(w.lastModified[i]&&E.setRequestHeader(\"If-Modified-Since\",w.lastModified[i]),w.etag[i]&&E.setRequestHeader(\"If-None-Match\",w.etag[i])),(d.data&&d.hasContent&&!1!==d.contentType||n.contentType)&&E.setRequestHeader(\"Content-Type\",d.contentType),E.setRequestHeader(\"Accept\",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(\"*\"!==d.dataTypes[0]?\", \"+It+\"; q=0.01\":\"\"):d.accepts[\"*\"]),d.headers)E.setRequestHeader(f,d.headers[f]);if(d.beforeSend&&(!1===d.beforeSend.call(h,E,d)||l))return E.abort();if(C=\"abort\",m.add(d.complete),E.done(d.success),E.fail(d.error),r=Bt(Mt,d,n,E)){if(E.readyState=1,c&&g.trigger(\"ajaxSend\",[E,d]),l)return E;d.async&&d.timeout>0&&(s=e.setTimeout((function(){E.abort(\"timeout\")}),d.timeout));try{l=!1,r.send(b,S)}catch(e){if(l)throw e;S(-1,e)}}else S(-1,\"No Transport\");function S(t,n,a,u){var f,p,v,b,T,C=n;l||(l=!0,s&&e.clearTimeout(s),r=void 0,o=u||\"\",E.readyState=t>0?4:0,f=t>=200&&t<300||304===t,a&&(b=function(e,t,n){for(var r,i,o,a,s=e.contents,u=e.dataTypes;\"*\"===u[0];)u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader(\"Content-Type\"));if(r)for(i in s)if(s[i]&&s[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||e.converters[i+\" \"+u[0]]){o=i;break}a||(a=i)}o=o||a}if(o)return o!==u[0]&&u.unshift(o),n[o]}(d,E,a)),!f&&w.inArray(\"script\",d.dataTypes)>-1&&(d.converters[\"text script\"]=function(){}),b=function(e,t,n,r){var i,o,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)l[a.toLowerCase()]=e.converters[a];for(o=c.shift();o;)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=o,o=c.shift())if(\"*\"===o)o=u;else if(\"*\"!==u&&u!==o){if(!(a=l[u+\" \"+o]||l[\"* \"+o]))for(i in l)if((s=i.split(\" \"))[1]===o&&(a=l[u+\" \"+s[0]]||l[\"* \"+s[0]])){!0===a?a=l[i]:!0!==l[i]&&(o=s[0],c.unshift(s[1]));break}if(!0!==a)if(a&&e.throws)t=a(t);else try{t=a(t)}catch(e){return{state:\"parsererror\",error:a?e:\"No conversion from \"+u+\" to \"+o}}}return{state:\"success\",data:t}}(d,b,E,f),f?(d.ifModified&&((T=E.getResponseHeader(\"Last-Modified\"))&&(w.lastModified[i]=T),(T=E.getResponseHeader(\"etag\"))&&(w.etag[i]=T)),204===t||\"HEAD\"===d.type?C=\"nocontent\":304===t?C=\"notmodified\":(C=b.state,p=b.data,f=!(v=b.error))):(v=C,!t&&C||(C=\"error\",t<0&&(t=0))),E.status=t,E.statusText=(n||C)+\"\",f?y.resolveWith(h,[p,C,E]):y.rejectWith(h,[E,C,v]),E.statusCode(x),x=void 0,c&&g.trigger(f?\"ajaxSuccess\":\"ajaxError\",[E,d,f?p:v]),m.fireWith(h,[E,C]),c&&(g.trigger(\"ajaxComplete\",[E,d]),--w.active||w.event.trigger(\"ajaxStop\")))}return E},getJSON:function(e,t,n){return w.get(e,t,n,\"json\")},getScript:function(e,t){return w.get(e,void 0,t,\"script\")}}),w.each([\"get\",\"post\"],(function(e,t){w[t]=function(e,n,r,i){return h(n)&&(i=i||r,r=n,n=void 0),w.ajax(w.extend({url:e,type:t,dataType:i,data:n,success:r},w.isPlainObject(e)&&e))}})),w.ajaxPrefilter((function(e){var t;for(t in e.headers)\"content-type\"===t.toLowerCase()&&(e.contentType=e.headers[t]||\"\")})),w._evalUrl=function(e,t,n){return w.ajax({url:e,type:\"GET\",dataType:\"script\",cache:!0,async:!1,global:!1,converters:{\"text script\":function(){}},dataFilter:function(e){w.globalEval(e,t,n)}})},w.fn.extend({wrapAll:function(e){var t;return this[0]&&(h(e)&&(e=e.call(this[0])),t=w(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map((function(){for(var e=this;e.firstElementChild;)e=e.firstElementChild;return e})).append(this)),this},wrapInner:function(e){return h(e)?this.each((function(t){w(this).wrapInner(e.call(this,t))})):this.each((function(){var t=w(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)}))},wrap:function(e){var t=h(e);return this.each((function(n){w(this).wrapAll(t?e.call(this,n):e)}))},unwrap:function(e){return this.parent(e).not(\"body\").each((function(){w(this).replaceWith(this.childNodes)})),this}}),w.expr.pseudos.hidden=function(e){return!w.expr.pseudos.visible(e)},w.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},w.ajaxSettings.xhr=function(){try{return new e.XMLHttpRequest}catch(e){}};var _t={0:200,1223:204},zt=w.ajaxSettings.xhr();d.cors=!!zt&&\"withCredentials\"in zt,d.ajax=zt=!!zt,w.ajaxTransport((function(t){var n,r;if(d.cors||zt&&!t.crossDomain)return{send:function(i,o){var a,s=t.xhr();if(s.open(t.type,t.url,t.async,t.username,t.password),t.xhrFields)for(a in t.xhrFields)s[a]=t.xhrFields[a];for(a in t.mimeType&&s.overrideMimeType&&s.overrideMimeType(t.mimeType),t.crossDomain||i[\"X-Requested-With\"]||(i[\"X-Requested-With\"]=\"XMLHttpRequest\"),i)s.setRequestHeader(a,i[a]);n=function(e){return function(){n&&(n=r=s.onload=s.onerror=s.onabort=s.ontimeout=s.onreadystatechange=null,\"abort\"===e?s.abort():\"error\"===e?\"number\"!=typeof s.status?o(0,\"error\"):o(s.status,s.statusText):o(_t[s.status]||s.status,s.statusText,\"text\"!==(s.responseType||\"text\")||\"string\"!=typeof s.responseText?{binary:s.response}:{text:s.responseText},s.getAllResponseHeaders()))}},s.onload=n(),r=s.onerror=s.ontimeout=n(\"error\"),void 0!==s.onabort?s.onabort=r:s.onreadystatechange=function(){4===s.readyState&&e.setTimeout((function(){n&&r()}))},n=n(\"abort\");try{s.send(t.hasContent&&t.data||null)}catch(e){if(n)throw e}},abort:function(){n&&n()}}})),w.ajaxPrefilter((function(e){e.crossDomain&&(e.contents.script=!1)})),w.ajaxSetup({accepts:{script:\"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript\"},contents:{script:/\\b(?:java|ecma)script\\b/},converters:{\"text script\":function(e){return w.globalEval(e),e}}}),w.ajaxPrefilter(\"script\",(function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type=\"GET\")})),w.ajaxTransport(\"script\",(function(e){var t,n;if(e.crossDomain||e.scriptAttrs)return{send:function(r,i){t=w(\""
],
"text/plain": [
":Scatter [Droplet Diameter (um)] (Spindle Length (um))"
]
},
"execution_count": 3,
"metadata": {
"application/vnd.holoviews_exec.v0+json": {
"id": "1003"
}
},
"output_type": "execute_result"
}
],
"source": [
"# Load in Data Frame\n",
"df = pd.read_csv(os.path.join(data_path, \"good_invitro_droplet_data.csv\"), comment=\"#\")\n",
"\n",
"# Pull out numpy arrays\n",
"ell = df[\"Spindle Length (um)\"].values\n",
"d = df[\"Droplet Diameter (um)\"].values\n",
"\n",
"# Make a plot\n",
"data_plot = hv.Scatter(\n",
" data=df, \n",
" kdims=\"Droplet Diameter (um)\", \n",
" vdims=\"Spindle Length (um)\",\n",
").opts(\n",
" xlim=(0, None), \n",
" ylim=(0, None), \n",
")\n",
"\n",
"data_plot"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Our goal is to get parameter estimates for models describing how spindle length varies with droplet size. We will start with the independent size model, in which we assume that spindle length is independent of droplet diameter."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Independent size model\n",
"\n",
"We choose a Normal likelihood for the spindle size. We assume all spindles are distributed about the same location parameter $\\phi$. In our updated model, we will again use a Normal likelihood.\n",
"\n",
"\\begin{align}\n",
"l_i \\sim \\text{Norm}(\\phi, \\sigma) \\;\\forall i.\n",
"\\end{align}\n",
"\n",
"In specifying this likelihood, we see that there are two parameters to estimate, $\\phi$ and $\\sigma$. To choose priors for these, I reason as follows.\n",
"\n",
"Now that we have thought a bit more about Bayesian modeling, we will abandon using Jeffreys priors and instead use weakly informative priors. The parameter $\\phi$ is necessarily positive and is the characteristic length of a spindle. Using the bet-the-farm approach, I do not think the spindle would be smaller than 100 nm, and not bigger than 1 mm (the size scale of a *Xenopus* egg). Thus, for my prior for $\\phi$ in units of microns, I have\n",
"\n",
"\\begin{align}\n",
"&\\log_{10} \\phi \\sim \\text{Norm}(1, 1), \\\\[1em]\n",
"&\\phi = 10^{\\log_{10}\\phi}.\n",
"\\end{align}\n",
"\n",
"Alternatively, we could write this as\n",
"\n",
"\\begin{align}\n",
"&\\phi \\sim \\text{LogNorm}(2.3, 2.3).\n",
"\\end{align}\n",
"\n",
"Note that for brevity, I do not include the units of the parameters in the likelihood definition, and units of microns are assumed.\n",
"\n",
"To understand the prior, here is a plot."
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.holoviews_exec.v0+json": "",
"text/html": [
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"
\n",
"
\n",
""
],
"text/plain": [
":Curve [ϕ [µm]] (G(ϕ))"
]
},
"execution_count": 4,
"metadata": {
"application/vnd.holoviews_exec.v0+json": {
"id": "1125"
}
},
"output_type": "execute_result"
}
],
"source": [
"phi = np.logspace(-3, 5, 200)\n",
"\n",
"hv.Curve(\n",
" (phi, st.lognorm.cdf(phi, s=2.3, loc=0, scale=np.exp(2.3))),\n",
" kdims='ϕ [µm]',\n",
" vdims='G(ϕ)',\n",
").opts(\n",
" frame_height=200,\n",
" xlim=(1e-3, 1e5),\n",
" logx=True,\n",
")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The parameter $\\sigma$ describes how the data vary off of the characteristic value of $\\phi$. I am not really sure how variable spindle length is, so I will choose a weakly informative Half-Normal prior.\n",
"\n",
"\\begin{align}\n",
"\\sigma \\sim \\text{HalfNorm}(20).\n",
"\\end{align}\n",
"\n",
"Here is a plot of this prior PDF."
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.holoviews_exec.v0+json": "",
"text/html": [
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"
\n",
"
\n",
""
],
"text/plain": [
":Curve [σ [µm]] (g(σ) [1/µm])"
]
},
"execution_count": 5,
"metadata": {
"application/vnd.holoviews_exec.v0+json": {
"id": "1247"
}
},
"output_type": "execute_result"
}
],
"source": [
"sigma = np.linspace(0, 100, 200)\n",
"\n",
"hv.Curve(\n",
" (sigma, st.halfnorm.pdf(sigma, 0, 20)),\n",
" kdims='σ [µm]',\n",
" vdims='g(σ) [1/µm]',\n",
").opts(\n",
" frame_height=200,\n",
" xlim=(0, 100),\n",
")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Note that zero is the most probable value of $\\sigma$, and I don't really believe this, so the Half-Normal is probably not the very best choice for capturing my prior knowledge. Nonetheless, this prior is very broad, so these details will have little effect on the posterior.\n",
"\n",
"Thus, my complete generative model for the independent spindle size model is\n",
"\n",
"\\begin{align}\n",
"&\\phi \\sim \\text{Norm}(2.3, 2.3), \\\\[1em]\n",
"&\\sigma \\sim \\text{HalfNorm}(20),\\\\[1em]\n",
"&l_i \\sim \\text{Norm}(\\phi, \\sigma) \\;\\forall i.\n",
"\\end{align}"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Estimation of the MAP parameters\n",
"\n",
"We could plot the entire posterior distribution (and in fact we did, albeit with different priors, in a previous lesson) to get a full understanding of the posterior. Instead, we will compute the MAP and approximate the posterior as Normal near the MAP.\n",
"\n",
"Finding the MAP amounts to an **optimization problem** in which we find the arguments (parameters) for which a function (the posterior distribution) is maximal. It is almost always much easier to find the maximum for the *logarithm* of the posterior. In fact, in the fast majority of Bayesian inference problems, we work with log posteriors instead of the posteriors themselves. Since the logarithm function is monotonic, a maximum of the log posterior is also a maximum of the posterior. So, our first step is code up a function that returns the log posterior. \n",
"\n",
"In considering a log posterior, it is useful to know that\n",
"\n",
"\\begin{align}\n",
"\\ln g(\\theta \\mid y) = \\text{constant} + \\ln f(y \\mid \\theta) + \\ln g(\\theta).\n",
"\\end{align}\n",
"\n",
"Furthermore, if the priors for each parameter are independent, such that\n",
"\n",
"\\begin{align}\n",
"g(\\theta) = g(\\theta_1)\\, g(\\theta_2)\\cdots,\n",
"\\end{align}\n",
"\n",
"and the measurements are independent and identically distributed (i.i.d.), such that\n",
"\n",
"\\begin{align}\n",
"f(y\\mid \\theta) = f(y_1 \\mid \\theta)\\,f(y_2 \\mid \\theta)\\,f(y_3 \\mid \\theta)\\cdots,\n",
"\\end{align}\n",
"\n",
"then\n",
"\n",
"\\begin{align}\n",
"\\ln g(\\theta \\mid y) = \\text{constant} + \\sum_i \\ln f(y_i \\mid \\theta) + \\sum_j \\ln g(\\theta_j).\n",
"\\end{align}\n",
"\n",
"This means that we can construct the log posterior by summing up all of the terms in the log likelihood and log prior.\n",
"\n",
"Fortunately, we do not have to hand-code any of the mathematical expressions for the log PDFs; we can use the built-in `scipy.stats` functions."
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [],
"source": [
"def log_prior(phi, sigma):\n",
" \"\"\"Log prior for independent size model\"\"\"\n",
" lp = st.lognorm.logpdf(phi, 2.3, loc=0, scale=np.exp(2.3))\n",
" lp += st.halfnorm.logpdf(sigma, 0, 20)\n",
"\n",
" return lp\n",
"\n",
"\n",
"def log_likelihood(ell, phi, sigma):\n",
" \"\"\"Log likelihood for independent size model\"\"\"\n",
" return np.sum(st.norm.logpdf(ell, phi, sigma))\n",
"\n",
"\n",
"def log_posterior(params, ell):\n",
" \"\"\"Log posterior of indpendent size model.\"\"\"\n",
" phi, sigma = params\n",
"\n",
" lp = log_prior(phi, sigma)\n",
" if lp == -np.inf:\n",
" return lp\n",
" \n",
" return lp + log_likelihood(ell, phi, sigma)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now that we have the log posterior, we can perform numerical optimization. The function `scipy.optimize.minimize()` offers many options for algorithms, which you can read about in the [documentation](http://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.minimize.html). I find that [Powell's method](https://en.wikipedia.org/wiki/Powell%27s_method) tends to work well. It does not rely on derivative information, so discontinuities don't hurt, nor do the $-\\infty$ values we get in the log posterior for parameter values that are out of bounds. That is particularly important for the present example because we have hard bounds on $p$. We could use constrained optimizers such as L-BFGS-B or COBYLA, but Powell's method generally suffices. It is sometimes slow, though.\n",
"\n",
"The optimizers offered by `scipy.optimize.minimize()` find *minimizers*, so we need to define our objective function as the *negative* log posterior."
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [],
"source": [
"def neg_log_posterior(params, ell):\n",
" return -log_posterior(params, ell)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Next, we have to provide an initial guess for parameter values. The optimization routine only finds a *local* maximum and is not in general guaranteed to converge. Therefore, the initial guess can be very important. Looking at the data, we would expect $\\phi$ to be somewhere around 35 µm and for $\\sigma$ to be 7 µm."
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [],
"source": [
"params_0 = np.array([35, 7])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We are now ready to use `scipy.optimize.minimze()` to compute the MAP. We use the `args` kwarg to pass in the other arguments to the `neg_log_posterior()` function. In our case, these arguments are the data points. The `scipy.optimzie.minimize()` function returns an object that has several attributes about the resulting optimization. Most important is `x`, the optimal parameter values."
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"Most probable parameters\n",
"------------------------\n",
"φ = 32.86 µm\n",
"σ = 4.784 µm\n",
"\n"
]
}
],
"source": [
"# Specify extra arguments into posterior function\n",
"args = (ell,)\n",
"\n",
"# Compute the MAP\n",
"res = scipy.optimize.minimize(\n",
" neg_log_posterior, params_0, args=args, method=\"powell\"\n",
")\n",
"\n",
"# Extract optimal parameters\n",
"popt = res.x\n",
"\n",
"# For convenience...\n",
"phi_MAP, sigma_MAP = popt\n",
"\n",
"# Print results\n",
"print(\n",
" \"\"\"\n",
"Most probable parameters\n",
"------------------------\n",
"φ = {0:.2f} µm\n",
"σ = {1:.3f} µm\n",
"\"\"\".format(\n",
" phi_MAP, sigma_MAP\n",
" )\n",
")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We have successfully found the MAP which provides just that; the maximally probable parameter values. This tells us only one piece of information about the posterior; where it is maximal. So we know where all of the first derivatives of the posterior are zero. We want to learn more about it, at least near the MAP. To that end, we can compute all of the second derivatives of the log posterior near the MAP. Using the second derivatives (the Hessian), we can start to understand the posterior, at least locally, by approximating it as Normal."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Normal approximation of the posterior\n",
"\n",
"To compute the Normal approximation of the posterior, our task is two-fold. First, find the parameter values that give the maximal posterior probability, which we have already done. Second, compute the Hessian of the log posterior at the MAP and invert it to get your covariance matrix. Note that the covariance matrix is **not** the inverse of every element of the Hessian; it is the inverse of the Hessian *matrix*. The credible interval for each parameter can then be calculated from the diagonal elements of the covariance matrix.\n",
"\n",
"To compute the covariance matrix, we need to compute the Hessian of the log of the posterior at the MAP. We will do this numerically using the `statsmodels.tools.numdiff` module, which we imported as `smnd`. We use the function `smnd.approx_hess()` to compute the Hessian at the optimal parameter values. Note that since we already have the log posterior coded up and the MAP parameter values, we can just directly shove these into the numerical Hessian calculator."
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [],
"source": [
"hes = smnd.approx_hess(popt, log_posterior, args=args)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now that we have the Hessian, we take its negative inverse to get the covariance matrix."
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([[ 3.41668904e-02, -9.09388085e-06],\n",
" [-9.09388085e-06, 1.70799615e-02]])"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Compute the covariance matrix\n",
"cov = -np.linalg.inv(hes)\n",
"\n",
"# Look at it\n",
"cov"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The diagonal terms give the approximate variance in the parameters in the posterior. The off-diagonal terms give the covariance, which describes how the parameters relate to each other. Nonzero covariance indicates that they are not completely independent."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Credible intervals\n",
"\n",
"We can compute the approximate 95% credible intervals for the parameters by multiplying the diagonal terms of the posterior covariance matrix $\\mathsf{\\Sigma}$ by 1.96."
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"Results for conserved tubulin model (≈ 95% of total probability density)\n",
"------------------------------------------------------------------------\n",
"ϕ = 32.86 ± 0.36 µm\n",
"σ = 4.784 ± 0.256 µm\n",
"\n"
]
}
],
"source": [
"# Report results\n",
"print(\"\"\"\n",
"Results for conserved tubulin model (≈ 95% of total probability density)\n",
"------------------------------------------------------------------------\n",
"ϕ = {0:.2f} ± {1:.2f} µm\n",
"σ = {2:.3f} ± {3:.3f} µm\n",
"\"\"\".format(phi_MAP, 1.96*np.sqrt(cov[0,0]), sigma_MAP, 1.96*np.sqrt(cov[1,1])))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### How good is the approximation?\n",
"\n",
"To assess how close the Normal approximation is to the posterior, let's plot the Normal approximation and the exact marginalized posterior on the same contour plot. We can use `scipy.stats.multivariate_normal.pdf()` function to generate the PDF for the Normal approximation.\n",
"\n",
"The calculation will take a while, since we have to compute the whole posterior in the neighborhood of the MAP to plot it. The whole reason we used optimization in the first place was to avoid this calculation! But we are doing it here to visualize the Normal approximation."
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"100%|██████████████████████████████████████████████████████████████████████| 200/200 [00:22<00:00, 8.92it/s]\n"
]
}
],
"source": [
"# Set up ranges for plots; should be near MAP\n",
"phi = np.linspace(32.4, 33.5, 200)\n",
"sigma = np.linspace(4.4, 5.2, 200)\n",
"\n",
"# Compute posteriors\n",
"post_norm = np.empty((len(phi), len(sigma)))\n",
"log_post_exact = np.empty((len(phi), len(sigma)))\n",
"for i in tqdm.tqdm(range(len(phi))):\n",
" for j in range(len(sigma)):\n",
" post_norm[i, j] = st.multivariate_normal.pdf(\n",
" (phi[i], sigma[j]), popt, cov\n",
" )\n",
" log_post_exact[i, j] = log_posterior((phi[i], sigma[j]), args)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now let's plot the contours, overlaying the exact posterior with the Normal approximation."
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
" \n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/javascript": [
"(function(root) {\n",
" function embed_document(root) {\n",
" \n",
" var docs_json = {\"4bbc8265-9063-408b-af36-22cfd3b86b04\":{\"defs\":[{\"extends\":null,\"module\":null,\"name\":\"ReactiveHTML1\",\"overrides\":[],\"properties\":[]},{\"extends\":null,\"module\":null,\"name\":\"FlexBox1\",\"overrides\":[],\"properties\":[{\"default\":\"flex-start\",\"kind\":null,\"name\":\"align_content\"},{\"default\":\"flex-start\",\"kind\":null,\"name\":\"align_items\"},{\"default\":\"row\",\"kind\":null,\"name\":\"flex_direction\"},{\"default\":\"wrap\",\"kind\":null,\"name\":\"flex_wrap\"},{\"default\":\"flex-start\",\"kind\":null,\"name\":\"justify_content\"}]},{\"extends\":null,\"module\":null,\"name\":\"TemplateActions1\",\"overrides\":[],\"properties\":[{\"default\":0,\"kind\":null,\"name\":\"open_modal\"},{\"default\":0,\"kind\":null,\"name\":\"close_modal\"}]},{\"extends\":null,\"module\":null,\"name\":\"MaterialTemplateActions1\",\"overrides\":[],\"properties\":[{\"default\":0,\"kind\":null,\"name\":\"open_modal\"},{\"default\":0,\"kind\":null,\"name\":\"close_modal\"}]}],\"roots\":{\"references\":[{\"attributes\":{\"below\":[{\"id\":\"1378\"}],\"center\":[{\"id\":\"1381\"},{\"id\":\"1385\"}],\"frame_height\":300,\"frame_width\":300,\"left\":[{\"id\":\"1382\"}],\"renderers\":[{\"id\":\"1403\"},{\"id\":\"1408\"}],\"title\":{\"id\":\"1410\"},\"toolbar\":{\"id\":\"1393\"},\"x_range\":{\"id\":\"1370\"},\"x_scale\":{\"id\":\"1374\"},\"y_range\":{\"id\":\"1372\"},\"y_scale\":{\"id\":\"1376\"}},\"id\":\"1369\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"data_source\":{\"id\":\"1405\"},\"glyph\":{\"id\":\"1406\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"1407\"},\"view\":{\"id\":\"1409\"}},\"id\":\"1408\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1370\",\"type\":\"DataRange1d\"},{\"attributes\":{\"axis_label\":\"\\u03c3 [\\u00b5m]\",\"formatter\":{\"id\":\"1413\"},\"major_label_policy\":{\"id\":\"1412\"},\"ticker\":{\"id\":\"1383\"}},\"id\":\"1382\",\"type\":\"LinearAxis\"},{\"attributes\":{\"source\":{\"id\":\"1400\"}},\"id\":\"1404\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1389\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"1422\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1390\",\"type\":\"ResetTool\"},{\"attributes\":{\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"orange\"},\"line_width\":{\"value\":2},\"xs\":{\"field\":\"xs\"},\"ys\":{\"field\":\"ys\"}},\"id\":\"1407\",\"type\":\"MultiLine\"},{\"attributes\":{},\"id\":\"1416\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"1374\",\"type\":\"LinearScale\"},{\"attributes\":{\"axis\":{\"id\":\"1378\"},\"ticker\":null},\"id\":\"1381\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1379\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"1419\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1412\",\"type\":\"AllLabels\"},{\"attributes\":{\"overlay\":{\"id\":\"1392\"}},\"id\":\"1388\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"1413\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"bottom_units\":\"screen\",\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1392\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"line_width\":{\"value\":2},\"xs\":{\"field\":\"xs\"},\"ys\":{\"field\":\"ys\"}},\"id\":\"1401\",\"type\":\"MultiLine\"},{\"attributes\":{\"data\":{\"xs\":[{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[520]},{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[394]},{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[264]},{\"__ndarray__\":\"9ER8/5VzQECA5awgS3RAQAyG3UEAdUBAmCYOY7V1QEAkxz6EanZAQLBnb6Ufd0BAPAigxtR3QEDIqNDniXhAQFRJAQk/eUBA3+kxKvR5QEBrimJLqXpAQLk6A3HSekBA9yqTbF57QECDy8ONE3xAQDRWCe5ifEBAD2z0rsh8QECbDCXQfX1AQIw/WTqGfUBAJ61V8TJ+QEBcYyNgan5AQLNNhhLofkBAkPbzAih/QEA/7rYznX9AQOqld1jIf0BAOtwHqlGAQEDLjudUUoBAQLtJKPzEgEBAVy8YdgeBQEC+k4jiKIFAQM7Agcx8gUBA489Il7yBQEB9DY4qxIFAQFDGth/9gUBAiO666iqCQEBdnK2xTYJAQHR0dJFlgkBAb3B5uHGCQEDjVgeUcoJAQFIKHL90gkBAb3B5uHGCQEBLItJfbIJAQH4XgBBZgkBAlktd5DqCQEC8t7vCEYJAQIY904ndgUBA489Il7yBQED6qCmFnIFAQHS13MtNgUBAVy8YdgeBQEAIntOZ8YBAQJp9px+EgEBAyo7nVFKAQEAipwVTBIBAQD/utjOdf0BAYofhVG9/QECzTYYS6H5AQD25DmO/fkBAJ61V8TJ+QEBYEj0Z7H1AQJsMJdB9fUBAXC6i4uh8QEAPbPSuyHxAQIPLw40TfEBAfGuUWJJ7QED3KpNsXntAQGuKYkupekBA3+kxKvR5QECC32cGb3lAQFRJAQk/eUBAyKjQ54l4QEA8CKDG1HdAQLBnb6Ufd0BAJMc+hGp2QECYJg5jtXVAQAyG3UEAdUBAe0AXg5p0QECA5awgS3RAQPREfP+Vc0BAaKRL3uByQEAoswLzdHJAQNwDG70rckBAUGPqm3ZxQEBmg5erHXFAQMTCuXrBcEBAnB7PnhZwQEA4IolZDHBAQKyBWDhXb0BA52YMOENvQEAg4ScXom5AQKexRB6SbkBAU59M8vttQECUQPf17G1AQNYRI5l8bUBACKDG1DdtQEDMWHeDDm1AQOKyoymxbEBAfP+Vs4JsQEDpKcwaYmxAQEzj4SghbEBAdomGqOtrQEDwXmWSzWtAQEQQghXCa0BAAHGYrqRrQECc3RjmkWtAQJhParGJa0BAwLPSC4xrQEB+s3H2mGtAQAEMQniwa0BA8F5lks1rQEA7LWTh0mtAQB1KqRMCbEBArnpypDxsQEB8/5WzgmxAQFjDUhrZbEBACKDG1DdtQEAWU+tAPG1AQHkwie+ybUBAlED39extQEAhzRGbPG5AQCDhJxeibkBA4oKust1uQECsgVg4V29AQOuEf+Gcb0BAOCKJWQxwQEC6OKTRg3BAQMTCuXrBcEBAUGPqm3ZxQEDAtrlypnFAQNwDG70rckBAaKRL3uByQEBimrNVOnNAQPREfP+Vc0BA\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[132]}],\"ys\":[{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[520]},{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[394]},{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[264]},{\"__ndarray__\":\"dufA78uwEkBwjwDfn68SQLuNClq5rhJAXiZ1xxeuEkDFrUDBuq0SQOd//xOirRJAWUM9vs2tEkCe1CPwPa4SQK2kXAvzrhJAx8Yto+2vEkAlP9J8LrESQEbmSxOHsRJAzQ1yC8ayEkBmx0o6rrQSQKOjrOuktRJA+sdvA/a2EkA0Jut7n7kSQABhDcTCuRJApF3hqsy8EkBcHm6c4L0SQKPb69+FwBJAudvOdP7BEkCCuvfx78QSQBaZL00cxhJAc1aQJTrKEkC8VOPVP8oSQNAT8f1XzhJAHBWAXQbREkAt0VHWddISQIqOsq6T1hJA4+jJBjzaEkDnSxOHsdoSQEQJdF/P3hJAoMbUN+3iEkD9gzUQC+cSQFpBlugo6xJAeqQvSf7uEkC3/vbARu8SQBW8V5lk8xJAWz1ZdOz0EkBxebhxgvcSQM42GUqg+xJAK/R5Ir7/EkCHsdr62wMTQORuO9P5BxNAqS6OQB4KE0BBLJyrFwwTQJ7p/IM1EBNAC0EYKWUTE0D7pl1cUxQTQFhkvjRxGBNAkX2doh0aE0C1IR8NjxwTQFTGgeV5HxNAEt9/5awgE0A9JNU15yMTQG6c4L3KJBNATge8LZ4nE0DLWUGW6CgTQK4jQCHGKhNAKBeibgYtE0CTl7/yei0TQBiHqpO+LxNAhdQCRyQxE0Ay6WKsqzETQJ5Wjsc8MxNAS1nYL4U0E0DikWMfQjUTQOOWLcWCNRNA/l/lAjQ2E0CEcC4hojYTQHC6oHzNNhNAAdGeQbY2E0Du+jRsXDYTQPVivce/NRNA4pFjH0I1E0Ai3TM62zQTQKFmuJ2pMxNAl1k2JDAyE0CF1AJHJDETQKvOURZkMBNAxhkdwDsuE0AoF6JuBi0TQJfZ186wKxNAy1lBlugoE0AAB/WkuigTQBPJYMk3JRNAbZzgvcokE0C2yACQEyETQBLff+WsIBNAtSEfDY8cE0D47HYkGxwTQFhkvjRxGBNAVDTHDvAVE0D6pl1cUxQTQJ7p/IM1EBNAxEBa+dkNE0BCLJyrFwwTQORuO9P5BxNAh7Ha+tsDE0DAqcDS7AATQCr0eSK+/xJAzjYZSqD7EkByebhxgvcSQBS8V5lk8xJAt/72wEbvEkBaQZboKOsSQP2DNRAL5xJAvGBSl4jjEkCgxtQ37eISQEQJdF/P3hJA50sTh7HaEkCKjrKuk9YSQC3RUdZ10hJA/WLYBITOEkDQE/H9V84SQHJWkCU6yhJA3q0JOWrIEkAWmS9NHMYSQLD0KthvwxJAudvOdP7BEkAA6jH1Sb8SQFwebpzgvRJAJv3DU8i7EkAAYQ3EwrkSQHyMfyDJuBJAMsVxQTy2EkCjo6zrpLUSQGpHU80XtBJATjKipEeyEkBG5ksTh7ESQHbnwO/LsBJA\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[132]}]},\"selected\":{\"id\":\"1420\"},\"selection_policy\":{\"id\":\"1419\"}},\"id\":\"1400\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1420\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1421\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"line_color\":{\"value\":\"orange\"},\"line_width\":{\"value\":2},\"xs\":{\"field\":\"xs\"},\"ys\":{\"field\":\"ys\"}},\"id\":\"1406\",\"type\":\"MultiLine\"},{\"attributes\":{},\"id\":\"1372\",\"type\":\"DataRange1d\"},{\"attributes\":{\"data\":{\"xs\":[{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[520]},{\"__ndarray__\":\"mCYOY7V1QEAkxz6EanZAQLBnb6Ufd0BAPAigxtR3QECIS9CbT3hAQMio0OeJeEBAVEkBCT95QEDf6TEq9HlAQGuKYkupekBA9yqTbF57QECDy8ONE3xAQA9s9K7IfEBAmwwl0H19QEAACSO/2X1AQCetVfEyfkBAs02GEuh+QEA/7rYznX9AQMuO51RSgEBAQX7nIJaAQEBXLxh2B4FAQOPPSJe8gUBAb3B5uHGCQEBMzKlWqoJAQPsQqtkmg0BAh7Ha+tuDQEDqJpvgZIRAQBNSCxyRhEBAn/I7PUaFQEB1rgLx5IVAQCuTbF77hUBAtzOdf7CGQEBFZJc5OodAQEPUzaBlh0BAznT+wRqIQEAOpjzdbohAQFsVL+PPiEBA57VfBIWJQED97e6AiYlAQHNWkCU6ikBA95ytq42KQED/9sBG74pAQHWuenN/i0BAi5fxZ6SLQEAXOCKJWYxAQDoISv1gjEBAo9hSqg6NQECE+38fNI1AQC55g8vDjUBAIGSwhvqNQEC6GbTseI5AQFffRGm1jkBARrrkDS6PQEBejI7LZY9AQNJaFS/jj0BAYOjRhgyQQEBe+0VQmJBAQEC8DE+qkEBAzWGt1T+RQEDqm3ZxTZFAQG//WcLNkUBAdjynkgKSQEA+P2ZaVJJAQALd17O3kkBAPKg+69OSQEAasaoaTZNAQI59CNVsk0BA4l96PcCTQEAaHjn2IZRAQKSykxctlEBASDy5ypSUQECmvmkX15RAQGUrM7f2lEBAoQbQp1OVQEAyX5o4jJVAQF9Ly1qrlUBAx7LHc/6VQEC+/8pZQZZAQAgci2NMlkBAo+fHZZaWQECHEhFj25ZAQEqg+3r2lkBAt9KyVxyXQEBo7c0kWZdAQHF3MmWRl0BA1kAsnKuXQEBw2zvWxZdAQDWZhoj2l0BAhJEECCOYQEBPwKp0S5hAQGLhXL1gmEBAQ0p+SHCYQEAjGSOrkZhAQCQXfTGvmEBAaYZD8MiYQEDboHL53phAQLqDYFzxmEBAhPTOJQCZQEAyHPpfC5lAQH1QpBITmUBA7oGN3hWZQECFlC1MF5lAQMKg3wEYmUBA7oGN3hWZQECswbgmFZlAQK4wb9gOmUBAty4jBQWZQED7zRWm95hAQLpVErLmmEBA+apjHdKYQEDCz8bZuZhAQBtjWtadmEBA+AaL/32YQEBi4Vy9YJhAQEV27mVamEBAXN/dkDOYQEBFkkq1CJhAQMYCj7TZl0BA1kAsnKuXQEA9oxmKppdAQLiUuBBwl0BAww9EHDWXQEBKoPt69pZAQJZeZob1lkBAMQCdf7KWQEC1vSCKapZAQL7/yllBlkBAQudhIB6WQEBdyMA7zZVAQDJfmjiMlUBAtlcWNHeVQEBL9vymHJVAQKa+aRfXlEBAPHHnlLyUQEAXfQR9V5RAQBoeOfYhlEBAEq2Ut+yTQEALMREEfJNAQI59CNVsk0BAKx4jngWTQEAC3dezt5JAQNyVj5iIkkBAAmPCxgSSQEB2PKeSApJAQO0f1jJ6kUBA6pt2cU2RQEAmIbP255BAQF77RVCYkEBAEGSHo02QQEDSWhUv449AQJwl6q6qj0BARrrkDS6PQEA2pypv/o5AQLoZtOx4jkBATtvNFkiOQEAueYPLw41AQDHrDa+GjUBAo9hSqg6NQEBmXiIRuYxAQBc4IolZjEBAMtoH3t2LQECLl/FnpItAQIGwaXTzikBA//bARu+KQEBzVpAlOopAQIElGi/3iUBA57VfBIWJQEA+1CLW5ohAQFsVL+PPiEBAz3T+wRqIQEBCkpvVvYdAQEPUzaBlh0BAtzOdf7CGQEDRU2lqd4ZAQCuTbF77hUBAn/I7PUaFQED9oqZDC4VAQBNSCxyRhEBAh7Ha+tuDQEBGyRGkbINAQPsQqtkmg0BAb3B5uHGCQEDjz0iXvIFAQOshTtqEgUBAVy8YdgeBQEDLjudUUoBAQD/utjOdf0BAFOHBqSF/QECzTYYS6H5AQCetVfEyfkBAmwwl0H19QEAPbPSuyHxAQIPLw40TfEBAQJWaC5V7QED3KpNsXntAQGuKYkupekBA3+kxKvR5QEBUSQEJP3lAQMio0OeJeEBAPAigxtR3QECwZ2+lH3dAQCTHPoRqdkBAmCYOY7V1QEAMht1BAHVAQIDlrCBLdEBA9ER8/5VzQEBopEve4HJAQNwDG70rckBAXuyyiR1yQEBQY+qbdnFAQMTCuXrBcEBAOCKJWQxwQECsgVg4V29AQB/hJxeibkBAtKqs7pFuQECUQPf17G1AQAigxtQ3bUBAfP+Vs4JsQEBU3fnxL2xAQPBeZZLNa0BAZL40cRhrQEDYHQRQY2pAQFt1e75HakBATH3TLq5pQEDA3KIN+WhAQGLqMbWpaEBANDxy7ENoQECom0HLjmdAQDyaP689Z0BAHPsQqtlmQECQWuCIJGZAQLRhrzj3ZUBABLqvZ29lQEAhtkN2zmRAQHkZf0a6ZEBA7XhOJQVkQEC4uf4/vmNAQGHYHQRQY0BArlGSO8JiQEDVN+3immJAQEmXvMHlYUBA4Fz8wtdhQEC99ougMGFAQMfyhL/8YEBAMVZbf3tgQEAkExZHL2BAQKW1Kl7GX0BATTO9/21fQEAaFfo8EV9AQKmy5sa3XkBAjXTJG1xeQECKSlapC15AQAHUmPqmXUBAAr+V3GhdQEB1M2jZ8VxAQM8tk7nOXEBA6ZI3uDxcQEC2kaD3sVtAQF3yBpeHW0BAANj4XS5bQEDRUdZ10lpAQMZQL6axWkBA4jYyNTtaQEBFsaVUHVpAQFojXabKWUBAuRB1M2hZQEC3iadNYFlAQNQiIvD6WEBALXBEErNYQECX9N1bm1hAQFXNj4pAWEBAoc8T8f1XQEB7j04V61dAQB3XF++ZV0BAe4jDFE5XQEAVL+PPSFdAQD7db/wFV0BATTrfvcJWQECJjrKuk1ZAQCsZpeyDVkBA+iJlxUhWQECqKDgfElZAQHNfGdLfVUBA/e2Bjd5VQECauVWysFVAQClUULaFVUBAPTuzxl5VQEBIuMrHO1VAQHFNUWwpVUBAZFMJURxVQEACWEFBAFVAQMx+SffnVEBA43oxYtNUQEAoeKtzwlRAQACP+x+1VEBA4TvqXatUQEABxbkmpVRAQOZ8HnaiVEBAidU5SqNUQEAAPJijp1RAQGC5MYWvVEBAyVlt9LpUQEANXyf5yVRAQPNIup3cVEBAm8EK7/JUQEA2gZb8DFVAQHFNUWwpVUBA0v/bzypVQEC76ozBS1VAQMbxCpZwVUBAbt9oZ5lVQECkurpSxlVAQP3tgY3eVUBA4hkl6fZVQEDr6wc5K1ZAQPRdmvNjVkBAiY6yrpNWQEBZi1v5oFZAQGalDKbhVkBAL5IvKydXQEAWL+PPSFdAQP25du9wV0BAFffWNb9XQEChzxPx/VdAQG9AIYISWEBACedaOGpYQEAtcEQSs1hAQO0QVWnHWEBAQTirZSlZQEC5EHUzaFlAQMl5ohKRWUBAzW4tWP5ZQEBFsaVUHVpAQC9dOlpxWkBA0VHWddJaQEDvclPS6lpAQIuP5ppqW0BAXfIGl4dbQEAefCUv8VtAQOmSN7g8XEBA7EatJ39cQEB1M2jZ8VxAQDMkVOcUXUBAAdSY+qZdQED64gDrsl1AQCc+vMpZXkBAjXTJG1xeQEDMl6hFCl9AQBkV+jwRX0BAR8KhQsVfQECltSpexl9AQDFWW397YEBAFr5QyItgQEC99ougMGFAQG/RDB5fYUBASZe8weVhQEBH7ljFQGJAQNU37eKaYkBAwM6xiDJjQEBh2B0EUGNAQO14TiUFZEBAQs1kJjdkQEB6GX9GumRAQCkTsIhRZUBABLqvZ29lQECQWuCIJGZAQPPClZmGZkBAHPsQqtlmQECom0HLjmdAQNzl9DncZ0BANDxy7ENoQEDA3KIN+WhAQBfupEdcaUBATH3TLq5pQEDYHQRQY2pAQCZPZPYVa0BAZL40cRhrQEDwXmWSzWtAQHz/lbOCbEBAAP6xNiptQEAIoMbUN21AQJRA9/XsbUBAIOEnF6JuQECsgVg4V29AQDoaV+Xmb0BAOCKJWQxwQEDEwrl6wXBAQFBj6pt2cUBA3AMbvStyQEBopEve4HJAQPREfP+Vc0BAgOWsIEt0QEAMht1BAHVAQJgh/YdydUBAmCYOY7V1QEA=\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[394]},{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[260]},{\"__ndarray__\":\"9ER8/5VzQECA5awgS3RAQAyG3UEAdUBAmCYOY7V1QEAkxz6EanZAQLBnb6Ufd0BAPAigxtR3QEDIqNDniXhAQFRJAQk/eUBA3+kxKvR5QEBrimJLqXpAQPcqk2xee0BAg8vDjRN8QECpZkLpOXxAQA9s9K7IfEBAPHEGqVx9QECbDCXQfX1AQCitVfEyfkBAUMtmskN+QECzTYYS6H5AQLyxGd8Bf0BAP+62M51/QEBtLYcbo39AQKSRDC4rgEBAy47nVFKAQEB5kibhn4BAQLItDAIFgUBAVy8YdgeBQECIYeOHWIFAQG32KeyfgUBA489Il7yBQEDgEZT82YFAQMhAEZIHgkBAlhRGNiqCQECLLkQBQoJAQBkMnANPgkBAxQdwRlGCQEAK0X7LSIJAQAhsJY01gkBARLxYfheCQEAEkJaK7oFAQOPPSJe8gUBAoo4te7qBQED1df4beIFAQMcoU9YpgUBAVy8YdgeBQEAX7JA5zIBAQIy9oo9fgEBAy47nVFKAQEBzw46M3n9AQD/utjOdf0BAdh22cEh/QECzTYYS6H5AQJKdWZ2XfkBAJ61V8TJ+QEAxD1b6w31AQJsMJdB9fUBAD2z0rsh8QECKaRG6wHxAQIPLw40TfEBAtS+HiGl7QED3KpNsXntAQGuKYkupekBA3+kxKvR5QEDysLFsRHlAQFRJAQk/eUBAyKjQ54l4QEA8CKDG1HdAQLBnb6Ufd0BAJMc+hGp2QECYJg5jtXVAQAyG3UEAdUBAIPrDiXh0QECA5awgS3RAQPREfP+Vc0BAaKRL3uByQECZkwvJUHJAQNwDG70rckBAUGPqm3ZxQECC57EM+nBAQMTCuXrBcEBAOCKJWQxwQED7MDUk9G9AQKyBWDhXb0BAQSqdYCFvQEAg4ScXom5AQLxdsqFwbkBAlED39extQEDMoscq2m1AQGJFUp5abUBACKDG1DdtQEAhn7yw7WxAQJHHTa+PbEBAfP+Vs4JsQEDPF2juQWxAQAIsx5sAbEBA8F5lks1rQECdtvL6ymtAQIsN86uia0BAyyeFH4VrQEDmwh9BcmtAQCM7mQNqa0BAwnMYYWxrQECqIw5beWtAQMl7NvqQa0BAzymjTrNrQEDwXmWSzWtAQNtpQmPha0BAqsd1QxxsQEA6v9fEYmxAQHz/lbOCbEBA+dC76rdsQEBw3UaSG21AQAigxtQ3bUBA4tZreZFtQECUQPf17G1AQPh2yDQabkBAIOEnF6JuQEAYwKeRum5AQKyBWDhXb0BAnCtSc3lvQEA4IolZDHBAQAirz/ZgcEBAxMK5esFwQEBQY+qbdnFAQNdms7mBcUBA3AMbvStyQEBopEve4HJAQMPXoSkXc0BA9ER8/5VzQEA=\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[130]}],\"ys\":[{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[520]},{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[394]},{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[260]},{\"__ndarray__\":\"L+Yoao6wEkDMQXk3ca8SQJzm56GZrhJAgDWBDQeuEkBKjtAQua0SQNBOYHSvrRJALJN2MuqtEkDqRA53aa4SQGBtDKAtrxJAuSWyPTewEkBG5ksTh7ESQFeNOMsysxJAIqJNjSq1EkCjo6zrpLUSQO56MKyJtxJAAGENxMK5EkBcIFRjS7oSQBSjPcSLvRJAXR5unOC9EkBhtjY6ZMESQLnbznT+wRJAlM+hpPLFEkAWmS9NHMYSQHNWkCU6yhJATOdaVovLEkDQE/H9V84SQC3RUdZ10hJAEM6O95LSEkCKjrKuk9YSQOdLE4ex2hJApguETavcEkBECXRfz94SQKDG1Dft4hJA/YM1EAvnEkBaQZboKOsSQLf+9sBG7xJAFLxXmWTzEkBxebhxgvcSQM42GUqg+xJAK/R5Ir7/EkCHsdr62wMTQIkLuU7RBxNA5G470/kHE0BBLJyrFwwTQJ7p/IM1EBNAomyUDMgRE0D7pl1cUxQTQFhkvjRxGBNAAAhpWOQYE0C1IR8NjxwTQOoQ0lRuHhNAEt9/5awgE0BSOkQPAiMTQG6c4L3KJBNAbpSC3NkmE0DMWUGW6CgTQPM4I0geKhNArhuJieosE0AoF6JuBi0TQKxzZok/LxNAhdQCRyQxE0Dv24EoQjETQHhzp3ziMhNASMG3Kzo0E0DikWMfQjUTQDQRjNFJNRNAsqYpuwk2E0Bb7d+IhjYTQJSVVpTANhNAKtKVBrg2E0BoFzjYbDYTQOIjYdHeNRNA4pFjH0I1E0Caq2EDCzUTQHPpZZPoMxNAw8XzMH4yE0CF1AJHJDETQNgVZw/GMBNAAgG3V60uE0AoF6JuBi0TQCVmM3Y5LBNA/lh9SlYpE0DLWUGW6CgTQC0Sio7rJRNAbpzgvcokE0CZKI1P5iETQBLff+WsIBNAii03zRsdE0C1IR8NjxwTQFhkvjRxGBNAVF9/HTAXE0D6pl1cUxQTQJ7p/IM1EBNA6sBIQI4PE0BALJyrFwwTQORuO9P5BxNAJqs4kBEEE0CHsdr62wMTQCv0eSK+/xJAzjYZSqD7EkBxebhxgvcSQBS8V5lk8xJAt/72wEbvEkBaQZboKOsSQP2DNRAL5xJAocbUN+3iEkBAjVLvhuASQEQJdF/P3hJA50sTh7HaEkCKjrKuk9YSQG9xy0351BJALdFR1nXSEkDQE/H9V84SQFT7wPlNzRJAc1aQJTrKEkBjPN5zZ8cSQBaZL00cxhJAgPO/E5TCEkC52850/sESQLCYo1KPvhJAXB5unOC9EkAdUupKKrsSQABhDcTCuRJAyIraHUS4EkCOHt0tx7USQKOjrOuktRJA0l7SPLizEkBiMAp597ESQEbmSxOHsRJAL+Yoao6wEkA=\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[130]}]},\"selected\":{\"id\":\"1422\"},\"selection_policy\":{\"id\":\"1421\"}},\"id\":\"1405\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1415\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"1410\",\"type\":\"Title\"},{\"attributes\":{},\"id\":\"1386\",\"type\":\"PanTool\"},{\"attributes\":{\"axis\":{\"id\":\"1382\"},\"dimension\":1,\"ticker\":null},\"id\":\"1385\",\"type\":\"Grid\"},{\"attributes\":{\"line_alpha\":{\"value\":0.1},\"line_width\":{\"value\":2},\"xs\":{\"field\":\"xs\"},\"ys\":{\"field\":\"ys\"}},\"id\":\"1402\",\"type\":\"MultiLine\"},{\"attributes\":{},\"id\":\"1391\",\"type\":\"HelpTool\"},{\"attributes\":{\"data_source\":{\"id\":\"1400\"},\"glyph\":{\"id\":\"1401\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"1402\"},\"view\":{\"id\":\"1404\"}},\"id\":\"1403\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"source\":{\"id\":\"1405\"}},\"id\":\"1409\",\"type\":\"CDSView\"},{\"attributes\":{\"active_multi\":null,\"tools\":[{\"id\":\"1386\"},{\"id\":\"1387\"},{\"id\":\"1388\"},{\"id\":\"1389\"},{\"id\":\"1390\"},{\"id\":\"1391\"}]},\"id\":\"1393\",\"type\":\"Toolbar\"},{\"attributes\":{},\"id\":\"1387\",\"type\":\"WheelZoomTool\"},{\"attributes\":{},\"id\":\"1383\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"1376\",\"type\":\"LinearScale\"},{\"attributes\":{\"axis_label\":\"\\u03d5 [\\u00b5m]\",\"formatter\":{\"id\":\"1416\"},\"major_label_policy\":{\"id\":\"1415\"},\"ticker\":{\"id\":\"1379\"}},\"id\":\"1378\",\"type\":\"LinearAxis\"}],\"root_ids\":[\"1369\"]},\"title\":\"Bokeh Application\",\"version\":\"2.3.3\"}};\n",
" var render_items = [{\"docid\":\"4bbc8265-9063-408b-af36-22cfd3b86b04\",\"root_ids\":[\"1369\"],\"roots\":{\"1369\":\"d6ef9f9b-7fcf-4831-b934-136f582e26dd\"}}];\n",
" root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n",
"\n",
" }\n",
" if (root.Bokeh !== undefined) {\n",
" embed_document(root);\n",
" } else {\n",
" var attempts = 0;\n",
" var timer = setInterval(function(root) {\n",
" if (root.Bokeh !== undefined) {\n",
" clearInterval(timer);\n",
" embed_document(root);\n",
" } else {\n",
" attempts++;\n",
" if (attempts > 100) {\n",
" clearInterval(timer);\n",
" console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\");\n",
" }\n",
" }\n",
" }, 10, root)\n",
" }\n",
"})(window);"
],
"application/vnd.bokehjs_exec.v0+json": ""
},
"metadata": {
"application/vnd.bokehjs_exec.v0+json": {
"id": "1369"
}
},
"output_type": "display_data"
}
],
"source": [
"# Scale exact to about underflow\n",
"post_exact = np.exp(log_post_exact - log_post_exact.max())\n",
"\n",
"# Make contours\n",
"p = bebi103.viz.contour(\n",
" phi, sigma, post_exact, x_axis_label=\"ϕ [µm]\", y_axis_label=\"σ [µm]\"\n",
")\n",
"p = bebi103.viz.contour(\n",
" phi, sigma, post_norm, line_kwargs=dict(line_color=\"orange\"), p=p\n",
")\n",
"\n",
"bokeh.io.show(p)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The Normal approximation, shown in orange, is not that far off from the posterior, especially at the peak. **This is not always the case!** This is one of the main dangers of using optimization, you are using *very* local information to summarize a posterior that may have relevant features away from the MAP."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Computing environment"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Python implementation: CPython\n",
"Python version : 3.9.7\n",
"IPython version : 7.29.0\n",
"\n",
"numpy : 1.20.3\n",
"pandas : 1.3.4\n",
"scipy : 1.7.1\n",
"tqdm : 4.62.3\n",
"statsmodels: 0.12.2\n",
"bokeh : 2.3.3\n",
"holoviews : 1.14.6\n",
"bebi103 : 0.1.9\n",
"jupyterlab : 3.2.1\n",
"\n"
]
}
],
"source": [
"%load_ext watermark\n",
"%watermark -v -p numpy,pandas,scipy,tqdm,statsmodels,bokeh,holoviews,bebi103,jupyterlab"
]
}
],
"metadata": {
"anaconda-cloud": {},
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.9.7"
}
},
"nbformat": 4,
"nbformat_minor": 4
}