From 1be515cd2bb8baa038a1faa1bc38579ad1734a72 Mon Sep 17 00:00:00 2001 From: andyeisenberg Date: Tue, 10 Feb 2026 07:59:07 -0500 Subject: [PATCH] Latest build deployed. --- .mapping.json | 2 +- _static/._39.47c68f7dc05f7c3e.js | Bin 0 -> 163 bytes _static/._39.47c68f7dc05f7c3e.js.LICENSE.txt | Bin 0 -> 163 bytes _static/._39.47c68f7dc05f7c3e.js.gz | Bin 0 -> 163 bytes _static/._39.47c68f7dc05f7c3e.js.map | Bin 0 -> 163 bytes _static/._39.47c68f7dc05f7c3e.js.map.gz | Bin 0 -> 163 bytes _static/._420.930dc253cc191e9e.js | Bin 0 -> 163 bytes _static/._420.930dc253cc191e9e.js.LICENSE.txt | Bin 0 -> 163 bytes _static/._420.930dc253cc191e9e.js.gz | Bin 0 -> 163 bytes _static/._420.930dc253cc191e9e.js.map | Bin 0 -> 163 bytes _static/._420.930dc253cc191e9e.js.map.gz | Bin 0 -> 163 bytes ..._prefix-runtime.0d5f811896ddeac1.bundle.js | Bin 0 -> 163 bytes ...efix-runtime.0d5f811896ddeac1.bundle.js.gz | Bin 0 -> 163 bytes ...fix-runtime.0d5f811896ddeac1.bundle.js.map | Bin 0 -> 163 bytes ...-runtime.0d5f811896ddeac1.bundle.js.map.gz | Bin 0 -> 163 bytes _static/249.7ec032cf0b3ede9a.js.gz | Bin 359953 -> 359955 bytes _static/39.47c68f7dc05f7c3e.js | 3 + _static/39.47c68f7dc05f7c3e.js.LICENSE.txt | 5 + _static/39.47c68f7dc05f7c3e.js.gz | Bin 0 -> 29543 bytes _static/39.47c68f7dc05f7c3e.js.map | 1 + _static/39.47c68f7dc05f7c3e.js.map.gz | Bin 0 -> 90162 bytes _static/420.930dc253cc191e9e.js | 3 + _static/420.930dc253cc191e9e.js.LICENSE.txt | 5 + _static/420.930dc253cc191e9e.js.gz | Bin 0 -> 29537 bytes _static/420.930dc253cc191e9e.js.map | 1 + _static/420.930dc253cc191e9e.js.map.gz | Bin 0 -> 90164 bytes _static/_runestone-services.xml | 4 +- .../prefix-runtime.0d5f811896ddeac1.bundle.js | 2 + ...efix-runtime.0d5f811896ddeac1.bundle.js.gz | Bin 0 -> 3115 bytes ...fix-runtime.0d5f811896ddeac1.bundle.js.map | 1 + ...-runtime.0d5f811896ddeac1.bundle.js.map.gz | Bin 0 -> 8480 bytes _static/pretext/css/print-worksheet.css | 2 +- _static/pretext/css/print-worksheet.css.map | 6 +- _static/pretext/css/theme.css | 2 +- _static/pretext/css/theme.css.map | 6 +- _static/pretext/js/diagcess/diagcess.js | 8 +- _static/pretext/js/jquery.min.js | 2 + _static/pretext/js/knowl.js | 338 ++++++++++ _static/pretext/js/mathjaxknowl3.js | 48 ++ .../pretext/js/pretext-stack/stackapicalls.js | 25 +- _static/pretext/js/pretext.js | 44 +- _static/pretext/js/pretext_add_on.js | 625 +++++++++--------- _static/webpack_static_imports.json | 2 +- _static/webpack_static_imports.json.gz | Bin 154 -> 155 bytes _static/webpack_static_imports.xml | 4 +- backmatter-2.html | 25 +- backmatter.html | 25 +- ch-Confidence-Intervals.html | 34 +- ch-Expected-Value.html | 25 +- ch-Hypothesis-Testing.html | 25 +- ch-Introduction.html | 25 +- ch-Likelihood.html | 308 +++++++++ ch-Linear-Regression.html | 25 +- ch-Probability.html | 25 +- ch-Random-Variables.html | 25 +- external/example.png | Bin 0 -> 3223 bytes front-colophon.html | 25 +- frontmatter.html | 27 +- index.html | 2 +- knowl/xref/example-exponential-MLE.html | 98 +++ knowl/xref/fact-MLE-binomial.html | 28 + lunr-pretext-search-index.js | 175 ++++- my-great-book.html | 25 +- sec-CLT.html | 41 +- sec-Chi-Squared.html | 25 +- sec-Conditional-Probability.html | 25 +- sec-Confidence-Intervals.html | 41 +- sec-Continuous-RVs.html | 25 +- sec-Correlation.html | 25 +- sec-Covariance.html | 25 +- sec-Discrete-RVs.html | 25 +- sec-Example.html | 392 +++++++++++ sec-Expected-Value.html | 25 +- sec-Independent-Events.html | 25 +- sec-Introduction.html | 25 +- sec-Joint-Distributions.html | 25 +- sec-Likelihood.html | 554 ++++++++++++++++ sec-Linear-Regression.html | 25 +- sec-One-Sample-Tests.html | 25 +- sec-Power.html | 25 +- sec-Probability.html | 25 +- sec-Set-Theory.html | 25 +- sec-Two-Sample-Tests.html | 25 +- sec-Variance.html | 25 +- 84 files changed, 2855 insertions(+), 659 deletions(-) create mode 100755 _static/._39.47c68f7dc05f7c3e.js create mode 100755 _static/._39.47c68f7dc05f7c3e.js.LICENSE.txt create mode 100755 _static/._39.47c68f7dc05f7c3e.js.gz create mode 100755 _static/._39.47c68f7dc05f7c3e.js.map create mode 100755 _static/._39.47c68f7dc05f7c3e.js.map.gz create mode 100755 _static/._420.930dc253cc191e9e.js create mode 100755 _static/._420.930dc253cc191e9e.js.LICENSE.txt create mode 100755 _static/._420.930dc253cc191e9e.js.gz create mode 100755 _static/._420.930dc253cc191e9e.js.map create mode 100755 _static/._420.930dc253cc191e9e.js.map.gz create mode 100755 _static/._prefix-runtime.0d5f811896ddeac1.bundle.js create mode 100755 _static/._prefix-runtime.0d5f811896ddeac1.bundle.js.gz create mode 100755 _static/._prefix-runtime.0d5f811896ddeac1.bundle.js.map create mode 100755 _static/._prefix-runtime.0d5f811896ddeac1.bundle.js.map.gz create mode 100755 _static/39.47c68f7dc05f7c3e.js create mode 100755 _static/39.47c68f7dc05f7c3e.js.LICENSE.txt create mode 100755 _static/39.47c68f7dc05f7c3e.js.gz create mode 100755 _static/39.47c68f7dc05f7c3e.js.map create mode 100755 _static/39.47c68f7dc05f7c3e.js.map.gz create mode 100755 _static/420.930dc253cc191e9e.js create mode 100755 _static/420.930dc253cc191e9e.js.LICENSE.txt create mode 100755 _static/420.930dc253cc191e9e.js.gz create mode 100755 _static/420.930dc253cc191e9e.js.map create mode 100755 _static/420.930dc253cc191e9e.js.map.gz create mode 100755 _static/prefix-runtime.0d5f811896ddeac1.bundle.js create mode 100755 _static/prefix-runtime.0d5f811896ddeac1.bundle.js.gz create mode 100755 _static/prefix-runtime.0d5f811896ddeac1.bundle.js.map create mode 100755 _static/prefix-runtime.0d5f811896ddeac1.bundle.js.map.gz create mode 100755 _static/pretext/js/jquery.min.js create mode 100755 _static/pretext/js/knowl.js create mode 100755 _static/pretext/js/mathjaxknowl3.js create mode 100755 ch-Likelihood.html create mode 100755 external/example.png create mode 100755 knowl/xref/example-exponential-MLE.html create mode 100755 knowl/xref/fact-MLE-binomial.html create mode 100755 sec-Example.html create mode 100755 sec-Likelihood.html diff --git a/.mapping.json b/.mapping.json index 42a6f4c..f618943 100755 --- a/.mapping.json +++ b/.mapping.json @@ -1 +1 @@ -{"source/main.ptx": ["my-great-book"], "source/frontmatter.ptx": ["frontmatter", "front-colophon"], "source/ch-Introduction.ptx": ["ch-Introduction", "sec-Introduction"], "source/ch-Probability.ptx": ["ch-Probability"], "source/sec-Set-Theory.ptx": ["sec-Set-Theory"], "source/sec-Probability.ptx": ["sec-Probability"], "source/sec-Conditional-Probability.ptx": ["sec-Conditional-Probability"], "source/sec-Independent-Events.ptx": ["sec-Independent-Events"], "source/ch-Random-Variables.ptx": ["ch-Random-Variables"], "source/sec-Discrete-RVs.ptx": ["sec-Discrete-RVs"], "source/sec-Continuous-RVs.ptx": ["sec-Continuous-RVs"], "source/sec-Joint-Distributions.ptx": ["sec-Joint-Distributions"], "source/ch-Expected-Value.ptx": ["ch-Expected-Value"], "source/sec-Expected-Value.ptx": ["sec-Expected-Value"], "source/sec-Variance.ptx": ["sec-Variance"], "source/sec-Covariance.ptx": ["sec-Covariance"], "source/ch-Confidence-Intervals.ptx": ["ch-Confidence-Intervals", "sec-CLT", "sec-Confidence-Intervals"], "source/ch-Hypothesis-Testing.ptx": ["ch-Hypothesis-Testing", "sec-One-Sample-Tests", "sec-Two-Sample-Tests", "sec-Power", "sec-Chi-Squared"], "source/ch-Linear-Regression.ptx": ["ch-Linear-Regression", "sec-Correlation", "sec-Linear-Regression"], "source/backmatter.ptx": ["backmatter"]} \ No newline at end of file +{"source/main.ptx": ["my-great-book", "frontmatter", "front-colophon", "ch-Introduction", "sec-Introduction", "ch-Probability", "sec-Set-Theory", "sec-Probability", "sec-Conditional-Probability", "sec-Independent-Events", "ch-Random-Variables", "sec-Discrete-RVs", "sec-Continuous-RVs", "sec-Joint-Distributions", "ch-Expected-Value", "sec-Expected-Value", "sec-Variance", "sec-Covariance", "ch-Confidence-Intervals", "sec-Likelihood", "sec-CLT", "sec-Confidence-Intervals", "ch-Hypothesis-Testing", "sec-One-Sample-Tests", "sec-Two-Sample-Tests", "sec-Power", "sec-Chi-Squared", "ch-Linear-Regression", "sec-Correlation", "sec-Linear-Regression", "backmatter"]} \ No newline at end of file diff --git a/_static/._39.47c68f7dc05f7c3e.js b/_static/._39.47c68f7dc05f7c3e.js new file mode 100755 index 0000000000000000000000000000000000000000..d4c638481f3a3a657f36d188ef835324080a1acd GIT binary patch literal 163 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}aUl?c_=|y<2;dkJ5(HHS(lG;wxzV&S oBE&_L^K!kB^sueM$V05C2SK>z>% literal 0 HcmV?d00001 diff --git a/_static/._39.47c68f7dc05f7c3e.js.LICENSE.txt b/_static/._39.47c68f7dc05f7c3e.js.LICENSE.txt new file mode 100755 index 0000000000000000000000000000000000000000..d4c638481f3a3a657f36d188ef835324080a1acd GIT binary patch literal 163 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}aUl?c_=|y<2;dkJ5(HHS(lG;wxzV&S oBE&_L^K!kB^sueM$V05C2SK>z>% literal 0 HcmV?d00001 diff --git a/_static/._39.47c68f7dc05f7c3e.js.gz b/_static/._39.47c68f7dc05f7c3e.js.gz new file mode 100755 index 0000000000000000000000000000000000000000..d4c638481f3a3a657f36d188ef835324080a1acd GIT binary patch literal 163 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}aUl?c_=|y<2;dkJ5(HHS(lG;wxzV&S oBE&_L^K!kB^sueM$V05C2SK>z>% literal 0 HcmV?d00001 diff --git a/_static/._39.47c68f7dc05f7c3e.js.map b/_static/._39.47c68f7dc05f7c3e.js.map new file mode 100755 index 0000000000000000000000000000000000000000..d4c638481f3a3a657f36d188ef835324080a1acd GIT binary patch literal 163 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}aUl?c_=|y<2;dkJ5(HHS(lG;wxzV&S oBE&_L^K!kB^sueM$V05C2SK>z>% literal 0 HcmV?d00001 diff --git a/_static/._39.47c68f7dc05f7c3e.js.map.gz b/_static/._39.47c68f7dc05f7c3e.js.map.gz new file mode 100755 index 0000000000000000000000000000000000000000..d4c638481f3a3a657f36d188ef835324080a1acd GIT binary patch literal 163 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}aUl?c_=|y<2;dkJ5(HHS(lG;wxzV&S oBE&_L^K!kB^sueM$V05C2SK>z>% literal 0 HcmV?d00001 diff --git a/_static/._420.930dc253cc191e9e.js b/_static/._420.930dc253cc191e9e.js new file mode 100755 index 0000000000000000000000000000000000000000..d4c638481f3a3a657f36d188ef835324080a1acd GIT binary patch literal 163 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}aUl?c_=|y<2;dkJ5(HHS(lG;wxzV&S oBE&_L^K!kB^sueM$V05C2SK>z>% literal 0 HcmV?d00001 diff --git a/_static/._420.930dc253cc191e9e.js.LICENSE.txt b/_static/._420.930dc253cc191e9e.js.LICENSE.txt new file mode 100755 index 0000000000000000000000000000000000000000..d4c638481f3a3a657f36d188ef835324080a1acd GIT binary patch literal 163 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}aUl?c_=|y<2;dkJ5(HHS(lG;wxzV&S oBE&_L^K!kB^sueM$V05C2SK>z>% literal 0 HcmV?d00001 diff --git a/_static/._420.930dc253cc191e9e.js.gz b/_static/._420.930dc253cc191e9e.js.gz new file mode 100755 index 0000000000000000000000000000000000000000..d4c638481f3a3a657f36d188ef835324080a1acd GIT binary patch literal 163 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}aUl?c_=|y<2;dkJ5(HHS(lG;wxzV&S oBE&_L^K!kB^sueM$V05C2SK>z>% literal 0 HcmV?d00001 diff --git a/_static/._420.930dc253cc191e9e.js.map b/_static/._420.930dc253cc191e9e.js.map new file mode 100755 index 0000000000000000000000000000000000000000..d4c638481f3a3a657f36d188ef835324080a1acd GIT binary patch literal 163 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}aUl?c_=|y<2;dkJ5(HHS(lG;wxzV&S oBE&_L^K!kB^sueM$V05C2SK>z>% literal 0 HcmV?d00001 diff --git a/_static/._420.930dc253cc191e9e.js.map.gz b/_static/._420.930dc253cc191e9e.js.map.gz new file mode 100755 index 0000000000000000000000000000000000000000..d4c638481f3a3a657f36d188ef835324080a1acd GIT binary patch literal 163 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}aUl?c_=|y<2;dkJ5(HHS(lG;wxzV&S oBE&_L^K!kB^sueM$V05C2SK>z>% literal 0 HcmV?d00001 diff --git a/_static/._prefix-runtime.0d5f811896ddeac1.bundle.js b/_static/._prefix-runtime.0d5f811896ddeac1.bundle.js new file mode 100755 index 0000000000000000000000000000000000000000..d4c638481f3a3a657f36d188ef835324080a1acd GIT binary patch literal 163 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}aUl?c_=|y<2;dkJ5(HHS(lG;wxzV&S oBE&_L^K!kB^sueM$V05C2SK>z>% literal 0 HcmV?d00001 diff --git a/_static/._prefix-runtime.0d5f811896ddeac1.bundle.js.gz b/_static/._prefix-runtime.0d5f811896ddeac1.bundle.js.gz new file mode 100755 index 0000000000000000000000000000000000000000..d4c638481f3a3a657f36d188ef835324080a1acd GIT binary patch literal 163 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}aUl?c_=|y<2;dkJ5(HHS(lG;wxzV&S oBE&_L^K!kB^sueM$V05C2SK>z>% literal 0 HcmV?d00001 diff --git a/_static/._prefix-runtime.0d5f811896ddeac1.bundle.js.map b/_static/._prefix-runtime.0d5f811896ddeac1.bundle.js.map new file mode 100755 index 0000000000000000000000000000000000000000..d4c638481f3a3a657f36d188ef835324080a1acd GIT binary patch literal 163 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}aUl?c_=|y<2;dkJ5(HHS(lG;wxzV&S oBE&_L^K!kB^sueM$V05C2SK>z>% literal 0 HcmV?d00001 diff --git a/_static/._prefix-runtime.0d5f811896ddeac1.bundle.js.map.gz b/_static/._prefix-runtime.0d5f811896ddeac1.bundle.js.map.gz new file mode 100755 index 0000000000000000000000000000000000000000..d4c638481f3a3a657f36d188ef835324080a1acd GIT binary patch literal 163 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}aUl?c_=|y<2;dkJ5(HHS(lG;wxzV&S oBE&_L^K!kB^sueM$V05C2SK>z>% literal 0 HcmV?d00001 diff --git a/_static/249.7ec032cf0b3ede9a.js.gz b/_static/249.7ec032cf0b3ede9a.js.gz index c83f3ef84c4fba7646b5883a79ce5e950091a146..46bbf8db776784d0d54b8c1ab216c31f00fbe61e 100755 GIT binary patch delta 18374 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"use strict";i.r(t),i.d(t,{default:()=>_});var s=i(78673);i(75794),i(56906),i(78811);class n{constructor(e){this.problem=e}inverseLISIndices(e){for(var t=[],i=0;in&&rh&&(h=c.length,l=c)}var d=[],u=0;for(let t=0;tl.length?d.push(t):e[t]==l[u]?u+=1:d.push(t);return d}grade(){var e=this.problem;e.clearFeedback(),this.correctLines=0,this.percentLines=0,this.incorrectIndents=0;var t,i=e.solution,s=e.answerLines();this.percentLines=Math.min(s.length,i.length)/Math.max(s.length,i.length),s.lengthe[s].indent&&this.indentLeft.push(t[s]);return this.incorrectIndents=this.indentLeft.length+this.indentRight.length,0==this.incorrectIndents}checkCorrectOrdering(e,t){let i=!0;this.correctLines=0,this.solutionLength=e.length;let s=Math.min(e.length,t.length);for(let n=0;n0&&u.length>0;)if(c.length<=u.length){a=c,c=[];for(let e of a)for(let t of o(e))if(l.has(t)||(c.push(t),l.set(t,e)),h.has(t))return[l,h,t]}else{a=u,u=[];for(let e of a)for(let t of r(e))if(h.has(t)||(u.push(t),h.set(t,e)),l.has(t))return[l,h,t]}throw new d("No path between "+t.toString()+" and "+i.toString()+".")}(e,t,i),o=[];null!=r;)o.push(r),r=s.get(r);for(r=n.get(o[0]),o.reverse();null!=r;)o.push(r),r=n.get(r)}(e,t,i)}catch(e){if(e instanceof d)return!1;throw e}return!0}class o{constructor(){this.graph={},this.node=new Map,this.adj=new Map,this.pred=new Map,this.succ=this.adj,this.edge=this.adj}addNode(e){this.succ.has(e)||(this.succ.set(e,new Map),this.pred.set(e,new Map),this.node.set(e))}addEdge(e,t){this.succ.has(e)||(this.succ.set(e,new Map),this.pred.set(e,new Map),this.node.set(e,{})),this.succ.has(t)||(this.succ.set(t,new Map),this.pred.set(t,new Map),this.node.set(t,{}));var i=this.adj.get(e).get(t)||{};this.succ.get(e).set(t,i),this.pred.get(t).set(e,i)}nodes(e=!1){return Array.from(e?this.node.entries():this.node.keys())}edges(e,t=!1){return Array.from(this.edgesIter(e,t))}nodesIter(e=!1){return e?toIterator(this.node):this.node.keys()}get(e){var t=this.adj.get(e);if(void 0===t)throw new KeyError("Graph does not contain node "+e+".");return t}numberOfNodes(){return this.node.size}*nbunchIter(e){if(null==e)yield*this.adj.keys();else if(this.hasNode(e))yield e;else{var t=this.adj;try{for(var i of toIterator(e))t.has(i)&&(yield i)}catch(e){if(e instanceof TypeError)throw new h("nbunch is not a node or a sequence of nodes")}}}*edgesIter(e,t=!1){var i;for(var s of((!0===(i=e)||!1===i||function(e){return!!e&&"object"==typeof e}(i)&&"[object Boolean]"==Object.prototype.toString.call(i))&&(t=e,e=void 0),void 0===e?this.adj:mapIterator(this.nbunchIter(e),(e=>tuple2(e,this.adj.get(e))))))for(var n of s[1]){var r=[s[0],n[0]];t&&(r[2]=n[1]),yield r}}reverse(e=!0){var t;if(e)(t=new this.constructor(null,{name:"Reverse of ("+this.name+")"})).addNodesFrom(this),t.addEdgesFrom(mapIterator(this.edgesIter(null,!0),(e=>tuple3c(e[1],e[0],deepcopy(e[2]),e)))),t.graph=deepcopy(this.graph),t.node=deepcopy(this.node);else{var i=this.pred,s=this.succ;this.succ=i,this.pred=s,this.adj=this.succ,t=this}return t}successorsIter(e){var t=this.succ.get(e);if(void 0!==t)return t.keys();throw new h(sprintf('The node "%j" is not in the digraph.',e))}predecessorsIter(e){var t=this.pred.get(e);if(void 0!==t)return t.keys();throw new h(sprintf('The node "%j" is not in the digraph.',e))}successors(e){return Array.from(this.successorsIter(e))}predecessors(e){return Array.from(this.predecessorsIter(e))}}class a{constructor(e){this.name="JSNetworkXException",this.message=e}}class l extends a{constructor(e){super(e),this.name="JSNetworkXAlgorithmError"}}class h extends a{constructor(e){super(e),this.name="JSNetworkXError"}}class c extends l{constructor(e){super(e),this.name="JSNetworkXUnfeasible"}}class d extends c{constructor(e){super(e),this.name="JSNetworkXNoPath"}}function u(e){var t=new o;for(let i of e){t.addNode(i.tag);for(let e of i.depends)t.addEdge(e,i.tag)}return t}function p(e,t){for(let i of e.edges())if(!t.has(i[0])&&!t.has(i[1]))return!1;return!0}class v extends n{inverseLISIndices(e,t){var i=this.problem.solution,s=t.map((e=>e.lines[0]));let n=u(i),a=new Set,l=new o;for(let e of s){for(let t of a)r(n,{source:e.tag,target:t.tag})&&l.addEdge(e.tag,t.tag);a.add(e)}let h=null,c=function(e){let t={};for(let i=0;i<=e.length;i++)t[i]=[];for(let i=0;i{for(let t=0;ti&&this.indentLeft.push(e.lines[0])}return this.incorrectIndents=this.indentLeft.length+this.indentRight.length,0==this.incorrectIndents}checkCorrectOrdering(e,t){if(!function(e){try{return function(e,t){var i=new Set,s=[],n=new Set;null==t&&(t=e.nodesIter());for(let l of t){if(n.has(l))return;for(var r=[l];r.length>0;){var o=r[r.length-1];if(n.has(o))r.pop();else{i.add(o);var a=[];e.get(o).forEach((function(e,t){if(!n.has(t)){if(i.has(t))throw new c("Graph contains a cycle.");a.push(t)}})),a.length>0?r.push.apply(r,a):(n.add(o),s.unshift(o))}}}}(e),!0}catch(e){if(e instanceof c)return!1;throw e}}(u(e)))throw"Dependency between blocks does not form a Directed Acyclic Graph; Problem unsolvable.";let i=new Set,s=!0;this.correctLines=0,this.solutionLength=e.length;let n=Math.min(e.length,t.length);for(let e=0;ee.trimStart().toLowerCase().startsWith("class ")))?this.text.toLowerCase().startsWith("class")?this.indent=0:this.indent=n.length-this.text.length:this.text.toLowerCase().startsWith("def")?this.indent=0:this.indent=n.length-this.text.length}else this.text=n.replace(/^\s*/,""),this.indent=n.length-this.text.length;"natural"==e.options.language||"math"==e.options.language?s=i?document.createElement("div"):document.createElement("p"):(s=document.createElement("code"),$(s).addClass(e.options.prettifyLanguage)),s.id=e.counterId+"-line-"+this.index,s.innerHTML+=this.text,this.view=s,e.lines.push(this)}initializeWidth(){this.width=$(this.view).outerWidth(!0)-this.problem.options.pixelsPerIndent*this.indent,this.view.fontSize=window.getComputedStyle(this.view,null).getPropertyValue("font-size"),this.view.pixelsPerIndent=this.problem.options.pixelsPerIndent,this.view.indent=this.indent;var e=document.createElement("canvas").getContext("2d"),t=window.getComputedStyle(this.view,null).getPropertyValue("font-family").split(", "),i="abcdefghijklmnopqrstuvwxyz0123456789,./!@#$%^&*-+";e.font=this.view.fontSize+" serif";var s=e.measureText(i).width;for(let n=0;n0&&$(o.view).addClass("indent"+r),n.appendChild(o.view)}var a=document.createElement("div");$(a).addClass("labels"),"left"==this.problem.options.numbered?($(n).addClass("border_left"),$(i).prepend(a),$(i).css({"justify-content":"flex-start"})):"right"==this.problem.options.numbered&&($(a).addClass("border_left"),$(a).css({float:"right"}),$(i).css({"justify-content":"space-between"}),$(i).append(a)),this.view=i,this.isPlaceholder=!1}addLine(e){if($(e.view).removeClass("indent1 indent2 indent3 indent4 indent5 indent6"),this.problem.noindent)e.indent>0&&$(e.view).addClass("indent"+e.indent);else{var t=this.lines,i=t[0].indent;for(let e=1;ee.indent)for(let i=0;i0&&($(e.view).removeClass("indent1 indent2 indent3 indent4 indent5 indent6"),$(e.view).addClass("indent"+e.indent))}this.indent=0,$(this.view).css({"padding-left":"",width:this.problem.areaWidth-22})}addLabel(e,t){var i=document.createElement("div");$(i).addClass("block-label"),"right"==this.problem.options.numbered&&$(i).addClass("right-label"),"left"==this.problem.options.numbered&&$(i).addClass("left-label"),$(i).append(document.createTextNode(e)),$(this.view).children(".labels")[0].append(i),0!=this.labels.length&&$(i).css("margin-top",(t-this.labels[this.labels.length-1][1]-1)*this.lines[t].view.offsetHeight),this.labels.push([e,t])}initializeInteractivity(){if($(this.view).hasClass("disabled"))return this;$(this.view).attr("tabindex","-1"),this.hammer=new(m().Manager)(this.view,{recognizers:[[m().Pan,{direction:m().DIRECTION_ALL,threshold:0,pointers:1}]]});var e=this;this.hammer.on("panstart",(function(t){e.panStart(t)})),this.hammer.on("panend",(function(t){e.panEnd(t)})),this.hammer.on("panmove",(function(t){e.panMove(t)}))}enabled(){return void 0!==$(this.view).attr("tabindex")}isDistractor(){return this.lines[0].distractor}inSourceArea(){var e=this.problem.sourceArea.childNodes;for(let t=0;t=0;s--){var i=e[s];if(i.pairedBin()==t)return i}return e[e.length-1]}}pairedBin(){for(var e=this.problem.pairedBins,t=0;t=0){for(e=0;e0)return s}for(e=0;e=s)break}this.problem.textMoving=!0,this.problem.sourceArea.insertBefore(this.view,t.view),$(this.view).focus()}else this.indent=this.indent-1;this.problem.state=void 0,this.problem.updateView()}}moveUp(){if(this.inSourceArea()){let n=this.problem.sourceBlocks();var e=this.verticalOffset(),t=this.validSourceIndexes();for(let r=0;r=e)return this.problem.textMoving=!0,this.problem.answerArea.insertBefore(this.view,s.view),$(this.view).focus(),this.problem.state=void 0,this.problem.updateView(),this}this.problem.textMoving=!0,this.problem.answerArea.appendChild(this.view),$(this.view).focus(),this.problem.state=void 0,this.problem.updateView()}else this.indent!==this.problem.indent&&(this.indent=this.indent+1,this.problem.state=void 0,this.problem.updateView())}moveDown(){if(this.inSourceArea()){let s=this.problem.sourceBlocks();var e=this.validSourceIndexes();for(let e=0;e1)return this.problem.textMoving=!0,this.problem.sourceArea.insertBefore(this.view,s[i].view),$(this.view).focus(),this.problem.state=void 0,this.problem.updateView(),this}}else{let e=this.problem.answerBlocks();for(var s=0;s=0;i--){var s=e[i];if(t)return this.problem.textFocus=s,s.makeTabIndex(),$(s.view).focus(),this;s.view.id==this.view.id&&(t=!0)}}selectRight(){if(this.inSourceArea()){var e=this.verticalOffset(),t=this.problem.enabledAnswerBlocks();if(0==t.length)return this;for(var i=t[0],s=i.verticalOffset()-e,n=1;n1?`${i} blocks are missing here`:`${i} block is missing here`,$(this.view).append(n),this.isPlaceholder=!0}}class k extends g{constructor(e){super(e,"placeholder",!1),this.isPlaceholderLine=!0}}class y extends b{constructor(e,t){super(e,t),this.isSettled=!0,$(this.view).addClass("settled-block"),$(this.view).addClass("disabled");let i=document.createElement("span");i.classList.add("settled-tooltip"),$(this.view).append(i),$(this.view).find(".settled-tooltip").text("OK")}setBlocksBefore(e){this.blocksBefore=e;var t=e>1?"s":"";if(this.blocksAfter){var i=this.blocksAfter>1?"s":"";$(this.view).find(".settled-tooltip").html(`${e} block${t} ⬆️️), ${this.blocksAfter} block${i} ⬇️`)}else $(this.view).find(".settled-tooltip").html(`${e} block${t} ⬆️️`)}setBlocksAfter(e){this.blocksAfter=e;var t=e>1?"s":"";if(this.blocksBefore){var i=this.blocksBefore>1?"s":"";$(this.view).find(".settled-tooltip").html(`${this.blocksBefore} block${i} ⬆️, ${e} block${t} ⬇️`)}else $(this.view).find(".settled-tooltip").html(`${e} block${t} ️️⬇️`)}}class x extends s.A{constructor(e){super(e);var t=e.orig;this.containerDiv=t,this.origElem=$(t).find("pre.parsonsblocks")[0],this.question=$(t).find(".parsons_question")[0],this.useRunestoneServices=e.useRunestoneServices,this.divid=e.orig.id;var i=super.localStorageKey();this.storageId=i,this.children=this.origElem.childNodes,this.contentArray=[],x.counter++,this.counterId="parsons-"+x.counter,this.initializeOptions(),this.grader="dag"===this.options.grader?new v(this):new n(this),this.grader.showfeedback=this.showfeedback;var s=$(this.origElem).html();this.blockIndex=0,this.checkCount=0,this.numDistinct=0,this.hasSolved=!1,this.initializeLines(s.trim()),this.initializeView(),this.caption="Parsons",this.addCaption("runestone"),this.checkServer("parsons",!0),this.runnableDiv=null}initializeOptions(){var e={pixelsPerIndent:30},t=$(this.origElem).data("maxdist"),i=$(this.origElem).data("order"),s=$(this.origElem).data("noindent"),n=$(this.origElem).data("adaptive"),r=$(this.origElem).data("numbered"),o=$(this.origElem).data("grader"),a=$(this.origElem).data("scaffolding");if(e.numbered=r,e.grader=o,e.scaffolding=a,void 0!==t&&(e.maxdist=t),void 0!==i){i=i.match(/\d+/g);for(var l=0;le.replace(/\s+/g,"")))).indexOf("#tag:"),""==(y=o.substring(w+5,o.indexOf(";",w+5)))&&(y="block-"+r),x=o.indexOf(";depends:");let e=o.substring(x+9,o.indexOf(";",x+9));h=e.length>0?e.split(","):[]}if(o.includes('class="displaymath')?a.displaymath=!0:a.displaymath=!1,o=o.replace(/#(paired|distractor|settled|tag:.*;.*;)/,(function(e,t){return a[t]=!0,""})),a.settled&&r>0&&u.length>0&&!u[u.length-1].isSettled){var d=new k(this);u.push(d),d.distractor=!0,d.paired=!1,d.distractHelptext="",d.groupWithNext=!1,d.indent=0}a.settled&&(n=!0);var u=[];if(a.displaymath)p=[o];else var p=o.split("\n");for(var v=0;v0){for(v=0;v0&&(n-=1),t.indent=n}}else{s=s.sort((function(e,t){return e-t}));for(let e=0;ee.replace(/\s+/g,"")))).indexOf("#tag:"),""==(y=o.substring(w+5,o.indexOf(";",w+5)))&&(y="block-"+r),x=o.indexOf(";depends:");let e=o.substring(x+9,o.indexOf(";",x+9));h=e.length>0?e.split(","):[]}if(o.includes('class="displaymath')?a.displaymath=!0:a.displaymath=!1,o=o.replace(/\s*#(paired|distractor|tag:.*;.*;)\s*/g,(function(e,t){return a[t]=!0,""})),u=[],a.displaymath)p=[o];else p=o.split("\n");for(v=0;v0){for(v=0;vawait f.queueMathJax(e[0]))):void 0!==MathJax.startup&&await f.queueMathJax(e[0])),u=Math.max(u,e.outerWidth(!0)),e.width(u-22);var t=3.8;let i=e.outerHeight(!0);38!=i&&(t=3.1*(i-38)/21),p+=i+g*t}.bind(this),s=0;s0&&a<=4?$(this.answerArea).addClass("answer"+a):$(this.answerArea).addClass("answer");var m=[],b=[];for(s=0;s0&&(m.push(b),b=[]):(b.push(w),w.groupWithNext||(m.push(b),b=[]))}var k,y=[],x=[],_=[];if(this.pairDistractors||!this.options.adaptive){for(s=m.length-1;s>-1;s--)if((b=m[s])[0].paired)for(k=b.length-1;k>-1;k--)x.unshift(b[k].index);else if(x.length>0){for(k=b.length-1;k>-1;k--)x.unshift(b[k].index);y.unshift(x),x=[]}for(s=0;sor{"),_.push(C),this.sourceArea.appendChild(C)}}else y=[];p+=10*y.length,this.areaHeight=p+40,$(this.sourceArea).css({width:this.areaWidth+2,height:p}),$(this.answerArea).css({width:this.options.pixelsPerIndent*a+this.areaWidth+2,height:p}),this.pairedBins=y,this.pairedDivs=_,null!=this.options.numbered&&this.addBlockLabels(e.concat(t)),this.state=void 0,this.updateView(),h&&$(l).replaceWith(this.outerDiv)}initializeInteractivity(){for(var e=0;e(s=this.dateFromTimestamp(s))?e:t}async loadData(e){try{if(!0===this.options.scaffolding){null==(i=e.source)&&(i=e.trash);var t=e.answer;void 0!==(n=null==(s=e.adaptive)?{}:this.optionsFromHash(s)).noindent&&(this.noindent=!0),void 0!==n.checkCount&&(this.checkCount=n.checkCount),void 0!==n.hasSolved&&(this.hasSolved=n.hasSolved),await this.initializeAreas(this.blocksFromSource(),this.settledBlocksFromSource(),n)}else{var i,s,n;null==(i=e.source)&&(i=e.trash),t=e.answer,void 0!==(n=null==(s=e.adaptive)?{}:this.optionsFromHash(s)).noindent&&(this.noindent=!0),void 0!==n.checkCount&&(this.checkCount=n.checkCount),void 0!==n.hasSolved&&(this.hasSolved=n.hasSolved),null==i||null==t||1==t.length?await this.initializeAreas(this.blocksFromSource(),[],n):(this.initializeAreas(this.blocksFromHash(i),this.blocksFromHash(t),n),this.grade=this.grader.grade(),"correct"==this.grade?this.correct=!0:0==this.answerLines().length?this.correct=null:this.correct=!1)}}catch(t){await this.initializeAreas(this.blocksFromSource(),[],n),console.log(`Error restoring answer for student ${e.sid} in ${e.div_id}. Defaulting to original state.`)}!0!==this.needsReinitialization&&(this.initializeInteractivity(),this.isTimed&&!this.assessmentTaken&&this.resetView())}localData(){var e=localStorage.getItem(this.storageId);return null!==e&&"{"==e.charAt(0)?JSON.parse(e):{}}restoreAnswers(e){this.loadData(e)}checkLocalStorage(){this.graderactive||this.loadData(this.localData())}setLocalStorage(e){var t;if(null==e){t={source:this.sourceHash(),answer:this.answerHash(),timestamp:new Date};var i=this.adaptiveHash();i.length>0&&(t.adaptive=i)}else t=e;localStorage.setItem(this.storageId,JSON.stringify(t))}async updatePlaceholders(){setTimeout((()=>{var e,t,i,s=this.answerBlocks();for(e=0;e0&&!s[e-1].isSettled&&!s[e-1].isPlaceholder&&(t=!0),e{for(var e=this.answerBlocks(),t=0;t=t;o--)if(e[o].afterSettledBlockCount==r){n=e[o];break}if(e[o].afterSettledBlockCount!=r)return void console.log("error moving up; no placeholder found");if($(n.view).hasClass("hide")){$(n.view).removeClass("hide");for(var a=0;a0&&(i.disabled=s),i}answerHash(){for(var e=[],t=this.answerBlocks(),i=0;ib&&(f-=1),t.lines[t.lines.length-1].indent==g.lines[0].indent&&(f+=1),f>=p&&(p=f,v=u)}for(t=d[v],g=d[v+1],u=0;u-1?r.push(t):a.push(s):r.push(t);n=r,r=[]}}if(this.recentAttempts<2?this.pairDistractors=!1:this.pairDistractors=!0,void 0===this.options.order){var c=[],d=[];for(s=0;s1)for(d=this.shuffled(d),p=0;p=0){for(var p=s;$.inArray(e[p-1],r)<0;)p--;var v=$.inArray(e[p-1],r),g=$.inArray(e[s],r);r.splice(g,1),r.splice(v,0,e[s])}return r}blockFromHash(e){for(var t=e.split("_"),i=[],s=0;s0&&l.setBlocksBefore(a),o=l,r++,n=0,s=[]}else s[0].distractor||n++,s=[];return i.length>0&&i[i.length-1].isSettled&&(this.lastBlockSettled=!0),console.log("settledblocksfromsource",i),i}getBlockById(e){for(var t=0;t1?$.i18n("msg_parson_correct",this.checkCount):$.i18n("msg_parson_correct_first_try");this.options.runnable&&(i+=" "+$.i18n("msg_parson_correct_runnable")),setTimeout((()=>{e.html(i)}),10)}if("incorrectTooShort"===this.grade&&(t.addClass("incorrect"),this.messageDiv.style.visibility="visible",e.attr("class","alert alert-danger"),setTimeout((()=>{e.html($.i18n("msg_parson_too_short"))}),10)),"incorrectIndent"===this.grade){var i=[];for(let e=0;e{1==i.length?e.html($.i18n("msg_parson_wrong_indent")):e.html($.i18n("msg_parson_wrong_indents"))}),10)}if("incorrectMoveBlocks"===this.grade){var s=this.answerBlocks(),n=[],r=[],o=[];for(let e=0;e{e.html($.i18n("msg_parson_wrong_order"))}),10)}}initializeAdaptive(){if(this.adaptiveId=super.localStorageKey(),this.canHelp=!0,this.checkCount=0,this.numDistinct=0,this.gotHelp=!1,localStorage.getItem(this.adaptiveId+"Problem")==this.divid)return this.checkCount=localStorage.getItem(this.adaptiveId+this.divid+"Count"),null==this.checkCount&&(this.checkCount=0),this;var e=localStorage.getItem(this.adaptiveId+this.divid+"Count");null!=e&&"NaN"!=e||(e=0),this.checkCount=e,this.recentAttempts=localStorage.getItem(this.adaptiveId+"recentAttempts"),null!=this.recentAttempts&&"NaN"!=this.recentAttempts||(this.recentAttempts=3),localStorage.setItem(this.adaptiveId+"recentAttempts",this.recentAttempts),localStorage.setItem(this.adaptiveId+"Problem",this.divid),localStorage.setItem(this.adaptiveId+this.divid+"Count",this.checkCount),localStorage.setItem(this.adaptiveId+"Solved",!1)}usesIndentation(){return!this.noindent&&0!=this.solutionIndent()}distractorToRemove(){var e,t=this.enabledAnswerBlocks();for(let i=0;i{t.html($.i18n("msg_parson_not_solution"))}),10),e.lines[0].distractHelptext&&(e.view.setAttribute("data-toggle","tooltip"),e.view.setAttribute("title",e.lines[0].distractHelptext)),e.disable(),e.inSourceArea())$(e.view).css({"border-color":"#000","background-color":"#fff"}),$(e.view).animate({opacity:.3,"border-color":"#d3d3d3","background-color":"#efefef"},{duration:2e3,complete:function(){$(e.view).css({"border-color":"","background-color":""})}});else{var i=this.sourceArea.getBoundingClientRect(),s=e.pageXCenter()-1,n=e.pageYCenter(),r=i.left+window.pageXOffset+i.width/2,o=i.top+window.pageYOffset+e.view.getBoundingClientRect().height/2,a=e.slideUnderBlock();void 0!==a&&(o+=a.view.getBoundingClientRect().height+20,o+=parseInt($(a.view).css("top")));var l=this;$(e.view).css({"border-color":"#000","background-color":"#fff"}),$(e.view).animate({opacity:1},{duration:4*Math.sqrt(Math.pow(o-n,2)+Math.pow(r-s,2))+500,start:function(){l.moving=e,l.movingX=s,l.movingY=n,l.updateView()},progress:function(e,t,i){l.movingX=s*(1-t)+r*t,l.movingY=n*(1-t)+o*t,l.updateView()},complete:function(){delete l.moving,delete l.movingX,delete l.movingY,l.updateView(),$(e.view).animate({opacity:.3,"border-color":"#d3d3d3","background-color":"#efefef"},{duration:1e3,complete:function(){$(e.view).css({opacity:"","border-color":"","background-color":""}),$(e.view).addClass("disabled")}})}})}}removeIndentation(){var e=$(this.messageDiv);this.messageDiv.style.visibility="visible",e.attr("class","alert alert-info"),setTimeout((()=>{e.html($.i18n("msg_parson_provided_indent"))}),10);for(var t,i,s=200,n=0;n0&&t.indexOf(s)<0)return s;return null}getFurthestBlock(){for(var e=this.solutionBlocks(),t=this.answerBlocks(),i=0,s=0,n=null,r=null,o=0,a=null,l=0,h=0;h0&&(a=e[o-1],l=t.indexOf(a),(s=Math.abs(h-l))>i&&(i=s,n=r));return n}combineBlocks(){var e=this.solutionBlocks(),t=this.answerBlocks(),i=this.sourceBlocks(),s=$(this.messageDiv);this.messageDiv.style.visibility="visible",s.attr("class","alert alert-info"),setTimeout((()=>{s.html($.i18n("msg_parson_combined_blocks"))}),10);var n=null,r=null;null==(r=this.getSolutionBlockInSource())&&(r=this.getFurthestBlock());var o=e.indexOf(r);n=e[o-1];var a=t.indexOf(n),l=t.indexOf(r),h=!1;a>=0&&l>=0?h=a+1!==l:a<0&&l<0?h=(a=i.indexOf(n))+1!==(l=i.indexOf(r)):(h=!0,a<0&&(a=i.indexOf(n)),l<0&&(l=i.indexOf(r)));var c=l3?(alert($.i18n("msg_parson_will_combine")),this.combineBlocks(),this.logMove("combinedBlocks")):(alert($.i18n("msg_parson_three_blocks_left")),this.canHelp=!1):(alert($.i18n("msg_parson_remove_incorrect")),this.removeDistractor(e),this.logMove("removedDistractor-"+e.hash()))}helpMe(){this.clearFeedback(),this.numDistinct<3?alert($.i18n("msg_parson_atleast_three_attempts")):(this.gotHelp=!0,this.makeEasier())}dateFromTimestamp(e){var t=new Date(e);if(isNaN(t.getTime())){var i=e.split(/[- :]/);t=new Date(i[0],i[1]-1,i[2],i[3],i[4],i[5])}return t}shuffled(e){for(var t,i,s=e.length,n=e.slice();0!==s;)i=Math.floor(Math.random()*s),t=n[s-=1],n[s]=n[i],n[i]=t;return n}enterKeyboardMode(){$(this.keyboardTip).show(),$(this.sourceLabel).hide(),$(this.answerLabel).hide(),this.clearFeedback()}exitKeyboardMode(){$(this.keyboardTip).hide(),$(this.sourceLabel).show(),$(this.answerLabel).show()}clearFeedback(){$(this.answerArea).removeClass("incorrect correct");for(var e=this.answerArea.childNodes,t=0;t=i.left&&e<=i.right&&t>=i.top&&t<=i.bottom?"answer":e>=(i=this.sourceArea.getBoundingClientRect()).left&&e<=i.right&&t>=i.top&&t<=i.bottom?"source":"moving"}updateView(){var e,t,i,s=this.state,n=this.movingState(),r=!0,o=!0,a="moving"==n;s==n&&("rest"==n?(r=!1,o=!1):"source"==n?o=!1:"answer"==n?r=!1:"moving"==n&&(o=!1,r=!1)),void 0!==this.moving&&(e=$(this.moving.view).outerHeight(!0),$(this.moving.view).detach());var l,h,c=this.areaWidth-22;if(r){t=0;var d=this.sourceBlocks();if("source"==n){var u=!1,p=this.moving.pairedBin(),v=[];for(y=0;yor{")}1==_.length&&$(C).html("")}}if(o)if(t=0,i=this.areaWidth+this.indent*this.options.pixelsPerIndent-22,d=this.answerBlocks(),"answer"==n){u=!1,f=this.movingX-this.answerArea.getBoundingClientRect().left-window.pageXOffset-c/2-11;var A=Math.round(f/this.options.pixelsPerIndent);for(A<0?A=0:A>this.indent?A=this.indent:f=A*this.options.pixelsPerIndent,m=this.movingY-this.answerArea.getBoundingClientRect().top-window.pageYOffset,this.moving.indent=A,y=0;y=10&&(o+=" "),e[a].addLabel(o,0),s++}n+this.pairedBins.length>=10&&(this.areaWidth+=5,$(this.sourceArea).css({width:$(this.sourceArea).width()+5}),$(this.answerArea).css({width:$(this.answerArea).width()+5}))}resetView(){if(this.clearFeedback(),!0===this.options.scaffolding){const e=document.querySelector(`#copy-answer-button-${this.divid}`);e&&e.classList.add("copy-button-hide")}var e,t=document.body.scrollTop;for(let t=0;t{$.i18n().load({"pt-br":{msg_parson_check_me:"Verificar",msg_parson_reset:"Resetar",msg_parson_help:"Ajuda",msg_parson_too_short:"Seu programa Γ© muito curto. Adicione mais blocos.",msg_parson_drag_from_here:"Arraste daqui",msg_parson_drag_to_here:"Largue os blocos aqui",msg_parson_correct_first_try:"Perfeito! VocΓͺ levou apenas uma tentativa para resolver. Bom trabalho!",msg_parson_correct:"Perfeito! VocΓͺ levou $1 tentativas para resolver. Clique em Resetar para tentar resolver em uma tentativa.",msg_parson_wrong_indent:"Este bloco nΓ£o estΓ‘ indentado corretamente. Indente mais arrastando-o para a direita ou reduza a indentaΓ§Γ£o arrastando para a esquerda.",msg_parson_wrong_indents:"Estes blocos nΓ£o estΓ£o indentados corretamente. Para indentar mais, arraste o bloco para a direita. Para reduzir a indentaΓ§Γ£o, arraste para a esquerda.",msg_parson_wrong_order:"Blocos destacados no seu programa estΓ£o errados ou estΓ£o na ordem errada. Isso pode ser resolvido movendo, excluindo ou substituindo os blocos destacados.",msg_parson_arrow_navigate:"Use as teclas de setas para navegar. EspaΓ§o para selecionar/ desmarcar blocos para mover.",msg_parson_help_info:"Clique no botΓ£o Ajuda se vocΓͺ quiser facilitar o problema",msg_parson_not_solution:"Foi desabilitado um bloco de cΓ³digo desnecessΓ‘rio (que nΓ£o faz parte da soluΓ§Γ£o).",msg_parson_provided_indent:"Foi fornecida a indentaΓ§Γ£o.",msg_parson_combined_blocks:"Dois blocos de cΓ³digos foram combinados em um.",msg_parson_remove_incorrect:"SerΓ‘ removido um bloco de cΓ³digo incorreto da Γ‘rea de resposta",msg_parson_will_combine:"SerΓ£o combinados dois blocos",msg_parson_atleast_three_attempts:"VocΓͺ deve tentar pelo menos trΓͺs vezes antes de pedir ajuda",msg_parson_three_blocks_left:"Restam apenas 3 blocos corretos. VocΓͺ deve colocΓ‘-los em ordem",msg_parson_will_provide_indent:"SerΓ‘ fornecida a indentaΓ§Γ£o"}})},75794:()=>{$.i18n().load({en:{msg_parson_check_me:"Check",msg_parson_reset:"Reset",msg_parson_help:"Help me",msg_parson_too_short:"Your answer is too short. Add more blocks.",msg_parson_drag_from_here:"Drag from here",msg_parson_drag_to_here:"Drop blocks here",msg_parson_correct_first_try:"Perfect! It took you only one try to solve this. Great job!",msg_parson_correct:"Perfect! It took you $1 tries to solve this. Click Reset to try to solve it in one attempt.",msg_parson_correct_runnable:"Click Run below to test out your solution.",msg_parson_wrong_indent:"This block is not indented correctly. Either indent it more by dragging it right or reduce the indention by dragging it left.",msg_parson_wrong_indents:"These blocks are not indented correctly. To indent a block more, drag it to the right. To reduce the indention, drag it to the left.",msg_parson_wrong_order:"Highlighted blocks in your answer are wrong or are in the wrong order. This can be fixed by moving, removing, or replacing highlighted blocks.",msg_parson_arrow_navigate:"Arrow keys to navigate. Space to select / deselect block to move.",msg_parson_help_info:"Click on the Help Me button if you want to make the problem easier",msg_parson_not_solution:"Disabled an unneeded code block (one that is not part of the solution).",msg_parson_provided_indent:"Provided the indentation.",msg_parson_combined_blocks:"Combined two code blocks into one.",msg_parson_remove_incorrect:"Will remove an incorrect code block from answer area",msg_parson_will_combine:"Will combine two blocks",msg_parson_atleast_three_attempts:"You must make at least three distinct full attempts at a solution before you can get help",msg_parson_three_blocks_left:"There are only 3 correct blocks left. You should be able to put them in order",msg_parson_will_provide_indent:"Will provide indentation"}})},78811:()=>{function e(){var t=navigator&&navigator.userAgent&&/\bMSIE 6\./.test(navigator.userAgent);return e=function(){return t},t}!function(){var t="break continue do else for if return while ",i=t+"auto case char const default double enum extern float goto int long register short signed sizeof static struct switch typedef union unsigned void volatile catch class delete false import new operator private protected public this throw true try ",s=i+"alignof align_union asm axiom bool concept concept_map const_cast constexpr decltype dynamic_cast explicit export friend inline late_check mutable namespace nullptr reinterpret_cast static_assert static_cast template typeid typename typeof using virtual wchar_t where ",n=i+"boolean byte extends final finally implements import instanceof null native package strictfp super synchronized throws transient ",r=i+"debugger eval export function get null set undefined var with Infinity NaN ",o="caller delete die do dump elsif eval exit foreach for goto if import last local my next no our print package redo require sub undef unless until use wantarray while BEGIN END ",a=t+"and as assert class def del elif except exec finally from global import in is lambda nonlocal not or pass print raise try with yield False True None ",l=t+"alias and begin case class def defined elsif end ensure false in module next nil not or redo rescue retry self super then true undef unless until when yield BEGIN END ",h=t+"case done elif esac eval fi function in local set then until ",c=s+(n+"as base by checked decimal delegate descending event fixed foreach from group implicit in interface internal into is lock object out override orderby params readonly ref sbyte sealed stackalloc string select uint ulong unchecked unsafe ushort var ")+r+o+a+l+h;function d(e){return e>="a"&&e<="z"||e>="A"&&e<="Z"}function u(e,t,i,s){e.unshift(i,s||0);try{t.splice.apply(t,e)}finally{e.splice(0,2)}}var p=function(){for(var e=["!","!=","!==","#","%","%=","&","&&","&&=","&=","(","*","*=","+=",",","-=","->","/","/=",":","::",";","<","<<","<<=","<=","=","==","===",">",">=",">>",">>=",">>>",">>>=","?","@","[","^","^=","^^","^^=","{","|","|=","||","||=","~","break","case","continue","delete","do","else","finally","instanceof","return","throw","try","typeof"],t="(?:(?:(?:^|[^0-9.])\\.{1,3})|(?:(?:^|[^\\+])\\+)|(?:(?:^|[^\\-])-)",i=0;i:&])/g,"\\$1")}return t+="|^)\\s*$",new RegExp(t)}(),v=/&/g,g=//g,m=/\"/g;function b(e){return e.replace(v,"&").replace(g,"<").replace(f,">")}var w=/</g,k=/>/g,y=/'/g,$=/"/g,x=/&/g,_=/ /g;function C(e){var t=e.indexOf("&");if(t<0)return e;for(--t;(t=e.indexOf("&#",t+1))>=0;){var i=e.indexOf(";",t);if(i>=0){var s=e.substring(t+3,i),n=10;s&&"x"===s.charAt(0)&&(s=s.substring(1),n=16);var r=parseInt(s,n);isNaN(r)||(e=e.substring(0,t)+String.fromCharCode(r)+e.substring(i+1))}}return e.replace(w,"<").replace(k,">").replace(y,"'").replace($,'"').replace(x,"&").replace(_," ")}function I(e){return"XMP"===e.tagName}function A(e,t){switch(e.nodeType){case 1:var i=e.tagName.toLowerCase();t.push("<",i);for(var s=0;s");for(var r=e.firstChild;r;r=r.nextSibling)A(r,t);!e.firstChild&&/^(?:br|link|img)$/.test(i)||t.push("");break;case 2:t.push(e.name.toLowerCase(),'="',function(e){return e.replace(v,"&").replace(g,"<").replace(f,">").replace(m,""")}(e.value),'"');break;case 3:case 4:t.push(b(e.nodeValue))}}var S=null;function T(e){if(null===S){var t=document.createElement("PRE");t.appendChild(document.createTextNode('\n')),S=!/||<\/?[a-zA-Z][^>]*>|<)/g,B=/^ + @@ -101,16 +101,16 @@ eBookConfig.allow_pairs = false; eBookConfig.enableScratchAC = false; eBookConfig.build_info = ""; eBookConfig.python3 = null; -eBookConfig.runestone_version = '7.11.11'; +eBookConfig.runestone_version = '7.11.13'; eBookConfig.jobehost = ''; eBookConfig.proxyuri_runs = ''; eBookConfig.proxyuri_files = ''; eBookConfig.enable_chatcodes = false; - + - @@ -151,6 +151,9 @@ eBookConfig.enable_chatcodes = false; \DeclareMathOperator{\E}{E} \DeclareMathOperator{\Var}{Var} \DeclareMathOperator{\Cov}{Cov} +\newcommand{\L}{\mathcal{L}} + +\newcommand{\est}{\widehat} \newcommand{\lt}{<} \newcommand{\gt}{>} \newcommand{\amp}{&} @@ -244,12 +247,16 @@ eBookConfig.enable_chatcodes = false; diff --git a/backmatter.html b/backmatter.html index a4532c7..eb222f5 100755 --- a/backmatter.html +++ b/backmatter.html @@ -62,7 +62,7 @@ window.MathJax = { "[pretext]/mathjaxknowl3.js" ], "paths": { - "pretext": "_static/pretext/js/lib" + "pretext": "_static/pretext/js" } }, "startup": { @@ -79,7 +79,7 @@ window.MathJax = { - + @@ -101,16 +101,16 @@ eBookConfig.allow_pairs = false; eBookConfig.enableScratchAC = false; eBookConfig.build_info = ""; eBookConfig.python3 = null; -eBookConfig.runestone_version = '7.11.11'; +eBookConfig.runestone_version = '7.11.13'; eBookConfig.jobehost = ''; eBookConfig.proxyuri_runs = ''; eBookConfig.proxyuri_files = ''; eBookConfig.enable_chatcodes = false; - + - @@ -151,6 +151,9 @@ eBookConfig.enable_chatcodes = false; \DeclareMathOperator{\E}{E} \DeclareMathOperator{\Var}{Var} \DeclareMathOperator{\Cov}{Cov} +\newcommand{\L}{\mathcal{L}} + +\newcommand{\est}{\widehat} \newcommand{\lt}{<} \newcommand{\gt}{>} \newcommand{\amp}{&} @@ -244,12 +247,16 @@ eBookConfig.enable_chatcodes = false; diff --git a/ch-Confidence-Intervals.html b/ch-Confidence-Intervals.html index 489fdc1..de482db 100755 --- a/ch-Confidence-Intervals.html +++ b/ch-Confidence-Intervals.html @@ -62,7 +62,7 @@ window.MathJax = { "[pretext]/mathjaxknowl3.js" ], "paths": { - "pretext": "_static/pretext/js/lib" + "pretext": "_static/pretext/js" } }, "startup": { @@ -79,7 +79,7 @@ window.MathJax = { - + @@ -101,16 +101,16 @@ eBookConfig.allow_pairs = false; eBookConfig.enableScratchAC = false; eBookConfig.build_info = ""; eBookConfig.python3 = null; -eBookConfig.runestone_version = '7.11.11'; +eBookConfig.runestone_version = '7.11.13'; eBookConfig.jobehost = ''; eBookConfig.proxyuri_runs = ''; eBookConfig.proxyuri_files = ''; eBookConfig.enable_chatcodes = false; - + - @@ -135,7 +135,7 @@ eBookConfig.enable_chatcodes = false; -PrevUpNext +PrevUpNext -
January 29, 2026
+
February 10, 2026
-PrevUpNext +PrevUpNext

-Section 4.1 Central Limit Theorem +Section 4.2 Central Limit Theorem

Text of section.
@@ -300,24 +307,24 @@ eBookConfig.enable_chatcodes = false;

1.

Suppose a coin has probability 0.4 of coming up heads, and we flip the coin 100 times. Let \(S\) be the number of heads. Estimate the probability that \(34 \leq S \leq 44\text{.}\)
-

2.

Suppose a fair die is rolled 100 times, and let \(m\) be the average value of the rolls. Estimate the probability that \(3.45 \leq m \leq 3.55\text{.}\)
-

3.

The heights of men in the US have a mean of 69 in and a variance of about 9 in\(^2\text{,}\) and the heights of women in the US have a mean of 63.5 in with a variance of 6.25 in\(^2\text{.}\)
(a)
Suppose the heights of 30 men are sampled, and a sample mean \(m\) is taken. Find the expected value and variance of \(m\text{.}\)
-
+

-Section 4.2 Confidence Intervals +Section 4.3 Confidence Intervals

Text of section.
@@ -300,18 +307,18 @@ eBookConfig.enable_chatcodes = false;

1.

Suppose we flip a coin 100 times and count 60 heads. Let \(p\) be the (unknown) probability that the coin comes up heads on a flip. Give an approximate 95% confidence interval for the value of \(p\text{.}\)
-

3.

The weights of five mice are measured and recorded below. Give a 95% confidence interval for the sample mean weight of mice. (Pretend 5 measurements is large enough for the CLT to apply.) -
Table 4.2.1.
+
Table 4.3.1.
@@ -329,9 +336,9 @@ eBookConfig.enable_chatcodes = false; -
mouse \(i\) 20 29

4.

+

4.

The heights of five plants are measured and recorded below. Give a 95% confidence interval around the sample mean for the heights of the plants. (Pretend 5 measurements is large enough for the CLT to apply.) -
Table 4.2.2.
+
Table 4.3.2.
@@ -349,7 +356,7 @@ eBookConfig.enable_chatcodes = false; -
plant \(i\) 21 17
+
diff --git a/sec-Continuous-RVs.html b/sec-Continuous-RVs.html index 363743b..6a4fcec 100755 --- a/sec-Continuous-RVs.html +++ b/sec-Continuous-RVs.html @@ -62,7 +62,7 @@ window.MathJax = { "[pretext]/mathjaxknowl3.js" ], "paths": { - "pretext": "_static/pretext/js/lib" + "pretext": "_static/pretext/js" } }, "startup": { @@ -79,7 +79,7 @@ window.MathJax = { - + @@ -101,16 +101,16 @@ eBookConfig.allow_pairs = false; eBookConfig.enableScratchAC = false; eBookConfig.build_info = ""; eBookConfig.python3 = null; -eBookConfig.runestone_version = '7.11.11'; +eBookConfig.runestone_version = '7.11.13'; eBookConfig.jobehost = ''; eBookConfig.proxyuri_runs = ''; eBookConfig.proxyuri_files = ''; eBookConfig.enable_chatcodes = false; - + - @@ -151,6 +151,9 @@ eBookConfig.enable_chatcodes = false; \DeclareMathOperator{\E}{E} \DeclareMathOperator{\Var}{Var} \DeclareMathOperator{\Cov}{Cov} +\newcommand{\L}{\mathcal{L}} + +\newcommand{\est}{\widehat} \newcommand{\lt}{<} \newcommand{\gt}{>} \newcommand{\amp}{&} @@ -244,12 +247,16 @@ eBookConfig.enable_chatcodes = false; diff --git a/sec-Correlation.html b/sec-Correlation.html index 5780b4e..90d1074 100755 --- a/sec-Correlation.html +++ b/sec-Correlation.html @@ -62,7 +62,7 @@ window.MathJax = { "[pretext]/mathjaxknowl3.js" ], "paths": { - "pretext": "_static/pretext/js/lib" + "pretext": "_static/pretext/js" } }, "startup": { @@ -79,7 +79,7 @@ window.MathJax = { - + @@ -101,16 +101,16 @@ eBookConfig.allow_pairs = false; eBookConfig.enableScratchAC = false; eBookConfig.build_info = ""; eBookConfig.python3 = null; -eBookConfig.runestone_version = '7.11.11'; +eBookConfig.runestone_version = '7.11.13'; eBookConfig.jobehost = ''; eBookConfig.proxyuri_runs = ''; eBookConfig.proxyuri_files = ''; eBookConfig.enable_chatcodes = false; - + - @@ -151,6 +151,9 @@ eBookConfig.enable_chatcodes = false; \DeclareMathOperator{\E}{E} \DeclareMathOperator{\Var}{Var} \DeclareMathOperator{\Cov}{Cov} +\newcommand{\L}{\mathcal{L}} + +\newcommand{\est}{\widehat} \newcommand{\lt}{<} \newcommand{\gt}{>} \newcommand{\amp}{&} @@ -244,12 +247,16 @@ eBookConfig.enable_chatcodes = false; diff --git a/sec-Covariance.html b/sec-Covariance.html index 6d9d7f4..f672825 100755 --- a/sec-Covariance.html +++ b/sec-Covariance.html @@ -62,7 +62,7 @@ window.MathJax = { "[pretext]/mathjaxknowl3.js" ], "paths": { - "pretext": "_static/pretext/js/lib" + "pretext": "_static/pretext/js" } }, "startup": { @@ -79,7 +79,7 @@ window.MathJax = { - + @@ -101,16 +101,16 @@ eBookConfig.allow_pairs = false; eBookConfig.enableScratchAC = false; eBookConfig.build_info = ""; eBookConfig.python3 = null; -eBookConfig.runestone_version = '7.11.11'; +eBookConfig.runestone_version = '7.11.13'; eBookConfig.jobehost = ''; eBookConfig.proxyuri_runs = ''; eBookConfig.proxyuri_files = ''; eBookConfig.enable_chatcodes = false; - + - @@ -151,6 +151,9 @@ eBookConfig.enable_chatcodes = false; \DeclareMathOperator{\E}{E} \DeclareMathOperator{\Var}{Var} \DeclareMathOperator{\Cov}{Cov} +\newcommand{\L}{\mathcal{L}} + +\newcommand{\est}{\widehat} \newcommand{\lt}{<} \newcommand{\gt}{>} \newcommand{\amp}{&} @@ -244,12 +247,16 @@ eBookConfig.enable_chatcodes = false; diff --git a/sec-Discrete-RVs.html b/sec-Discrete-RVs.html index 3c5a198..4b14c29 100755 --- a/sec-Discrete-RVs.html +++ b/sec-Discrete-RVs.html @@ -62,7 +62,7 @@ window.MathJax = { "[pretext]/mathjaxknowl3.js" ], "paths": { - "pretext": "_static/pretext/js/lib" + "pretext": "_static/pretext/js" } }, "startup": { @@ -79,7 +79,7 @@ window.MathJax = { - + @@ -101,16 +101,16 @@ eBookConfig.allow_pairs = false; eBookConfig.enableScratchAC = false; eBookConfig.build_info = ""; eBookConfig.python3 = null; -eBookConfig.runestone_version = '7.11.11'; +eBookConfig.runestone_version = '7.11.13'; eBookConfig.jobehost = ''; eBookConfig.proxyuri_runs = ''; eBookConfig.proxyuri_files = ''; eBookConfig.enable_chatcodes = false; - + - @@ -151,6 +151,9 @@ eBookConfig.enable_chatcodes = false; \DeclareMathOperator{\E}{E} \DeclareMathOperator{\Var}{Var} \DeclareMathOperator{\Cov}{Cov} +\newcommand{\L}{\mathcal{L}} + +\newcommand{\est}{\widehat} \newcommand{\lt}{<} \newcommand{\gt}{>} \newcommand{\amp}{&} @@ -244,12 +247,16 @@ eBookConfig.enable_chatcodes = false; diff --git a/sec-Example.html b/sec-Example.html new file mode 100755 index 0000000..40ff1aa --- /dev/null +++ b/sec-Example.html @@ -0,0 +1,392 @@ + + + + + + + + + + + + + + + + +Example + + + + + + + + + + + + + + + + + + + + +Skip to main content
+

Math 1044 Notes

+ +
+
+
+

+Section 4.4 Example +

+
Welcome to PreTeXt. Let’s type up some math. According to Pythagoras, \(a^2 + b^2 = c^2\text{.}\) But he also thought \(\sqrt{2}\) was rational, so maybe we shouldn’t take his word for it. Let’s see a proof by picture. +
+

Proof.

+Right triangle with squares appended to each side.
Right triangle with legs labeled \(a\) and \(b\) and hypotenuse labeled \(c\text{.}\) Squares are appended to each side of the triangle. +
+
+

+Definition 4.4.2. +

+
A real number \(x \in \R\) is called rational if there are integers \(a, b\) so that \(x = \frac{a}{b}\text{.}\) Otherwise, \(x\) is called irrational, no matter what Pythagoras says. +
+

+Example 4.4.4. +

+
Is \(\sqrt{2}\) rational? +
+
+
Hint 1.
+
Why does \(\pi = \frac{\sqrt{2}}{1}\) not show that \(\sqrt{2}\) is rational? +
+ +
Hint 2.
+
What would happen if you assumed \(\sqrt{2}\) is rational? +
+ +
Answer.
+ + +
Solution.
+
+
Suppose that \(\sqrt{2} = \frac{a}{b}\) for relatively prime integers \(a, b\text{.}\) Then:
+
+\begin{align*} +2 \amp = \frac{a^2}{b^2}\\ +2b^2 \amp = a^2 +\end{align*} +
+
But, after taking the prime factorization of both sides, the left side has an odd number of prime factors and the right side has an even number. This is a contradiction, so \(\sqrt{2}\) is irrational.
+ +
+ +
+
+

+Exercise 4.4.5. +

+Exercises Exercises +

+
+
+
+ + + diff --git a/sec-Expected-Value.html b/sec-Expected-Value.html index cac1349..3ca2cae 100755 --- a/sec-Expected-Value.html +++ b/sec-Expected-Value.html @@ -62,7 +62,7 @@ window.MathJax = { "[pretext]/mathjaxknowl3.js" ], "paths": { - "pretext": "_static/pretext/js/lib" + "pretext": "_static/pretext/js" } }, "startup": { @@ -79,7 +79,7 @@ window.MathJax = { - + @@ -101,16 +101,16 @@ eBookConfig.allow_pairs = false; eBookConfig.enableScratchAC = false; eBookConfig.build_info = ""; eBookConfig.python3 = null; -eBookConfig.runestone_version = '7.11.11'; +eBookConfig.runestone_version = '7.11.13'; eBookConfig.jobehost = ''; eBookConfig.proxyuri_runs = ''; eBookConfig.proxyuri_files = ''; eBookConfig.enable_chatcodes = false; - + - @@ -151,6 +151,9 @@ eBookConfig.enable_chatcodes = false; \DeclareMathOperator{\E}{E} \DeclareMathOperator{\Var}{Var} \DeclareMathOperator{\Cov}{Cov} +\newcommand{\L}{\mathcal{L}} + +\newcommand{\est}{\widehat} \newcommand{\lt}{<} \newcommand{\gt}{>} \newcommand{\amp}{&} @@ -244,12 +247,16 @@ eBookConfig.enable_chatcodes = false; diff --git a/sec-Independent-Events.html b/sec-Independent-Events.html index 0482d53..2f518dd 100755 --- a/sec-Independent-Events.html +++ b/sec-Independent-Events.html @@ -62,7 +62,7 @@ window.MathJax = { "[pretext]/mathjaxknowl3.js" ], "paths": { - "pretext": "_static/pretext/js/lib" + "pretext": "_static/pretext/js" } }, "startup": { @@ -79,7 +79,7 @@ window.MathJax = { - + @@ -101,16 +101,16 @@ eBookConfig.allow_pairs = false; eBookConfig.enableScratchAC = false; eBookConfig.build_info = ""; eBookConfig.python3 = null; -eBookConfig.runestone_version = '7.11.11'; +eBookConfig.runestone_version = '7.11.13'; eBookConfig.jobehost = ''; eBookConfig.proxyuri_runs = ''; eBookConfig.proxyuri_files = ''; eBookConfig.enable_chatcodes = false; - + - @@ -151,6 +151,9 @@ eBookConfig.enable_chatcodes = false; \DeclareMathOperator{\E}{E} \DeclareMathOperator{\Var}{Var} \DeclareMathOperator{\Cov}{Cov} +\newcommand{\L}{\mathcal{L}} + +\newcommand{\est}{\widehat} \newcommand{\lt}{<} \newcommand{\gt}{>} \newcommand{\amp}{&} @@ -244,12 +247,16 @@ eBookConfig.enable_chatcodes = false; diff --git a/sec-Introduction.html b/sec-Introduction.html index 68fc61c..fe4d24c 100755 --- a/sec-Introduction.html +++ b/sec-Introduction.html @@ -62,7 +62,7 @@ window.MathJax = { "[pretext]/mathjaxknowl3.js" ], "paths": { - "pretext": "_static/pretext/js/lib" + "pretext": "_static/pretext/js" } }, "startup": { @@ -79,7 +79,7 @@ window.MathJax = { - + @@ -101,16 +101,16 @@ eBookConfig.allow_pairs = false; eBookConfig.enableScratchAC = false; eBookConfig.build_info = ""; eBookConfig.python3 = null; -eBookConfig.runestone_version = '7.11.11'; +eBookConfig.runestone_version = '7.11.13'; eBookConfig.jobehost = ''; eBookConfig.proxyuri_runs = ''; eBookConfig.proxyuri_files = ''; eBookConfig.enable_chatcodes = false; - + - @@ -151,6 +151,9 @@ eBookConfig.enable_chatcodes = false; \DeclareMathOperator{\E}{E} \DeclareMathOperator{\Var}{Var} \DeclareMathOperator{\Cov}{Cov} +\newcommand{\L}{\mathcal{L}} + +\newcommand{\est}{\widehat} \newcommand{\lt}{<} \newcommand{\gt}{>} \newcommand{\amp}{&} @@ -244,12 +247,16 @@ eBookConfig.enable_chatcodes = false; diff --git a/sec-Joint-Distributions.html b/sec-Joint-Distributions.html index 2bcd100..52225c4 100755 --- a/sec-Joint-Distributions.html +++ b/sec-Joint-Distributions.html @@ -62,7 +62,7 @@ window.MathJax = { "[pretext]/mathjaxknowl3.js" ], "paths": { - "pretext": "_static/pretext/js/lib" + "pretext": "_static/pretext/js" } }, "startup": { @@ -79,7 +79,7 @@ window.MathJax = { - + @@ -101,16 +101,16 @@ eBookConfig.allow_pairs = false; eBookConfig.enableScratchAC = false; eBookConfig.build_info = ""; eBookConfig.python3 = null; -eBookConfig.runestone_version = '7.11.11'; +eBookConfig.runestone_version = '7.11.13'; eBookConfig.jobehost = ''; eBookConfig.proxyuri_runs = ''; eBookConfig.proxyuri_files = ''; eBookConfig.enable_chatcodes = false; - + - @@ -151,6 +151,9 @@ eBookConfig.enable_chatcodes = false; \DeclareMathOperator{\E}{E} \DeclareMathOperator{\Var}{Var} \DeclareMathOperator{\Cov}{Cov} +\newcommand{\L}{\mathcal{L}} + +\newcommand{\est}{\widehat} \newcommand{\lt}{<} \newcommand{\gt}{>} \newcommand{\amp}{&} @@ -244,12 +247,16 @@ eBookConfig.enable_chatcodes = false; diff --git a/sec-Likelihood.html b/sec-Likelihood.html new file mode 100755 index 0000000..403b412 --- /dev/null +++ b/sec-Likelihood.html @@ -0,0 +1,554 @@ + + + + + + + + + + + + + + + + +Likelihood + + + + + + + + + + + + + + + + + + + + +Skip to main content
+

Math 1044 Notes

+ +
+
+ +

+Section 4.1 Likelihood +

+
So far, we’ve been concerned with probability theory. Starting with a probability distribution and some parameter values, we’ve tried to answer questions like: What’s the probability of seeing certain experimental results? Statistics is concerned with going in the other direction: Upon seeing the experimental results, can we determine the type of underlying probability distribution? Can we determine its parameters? +
+

+Definition 4.1.1. +

+
An estimator is a value of a parameter computed from a sample of data. +
+

+Example 4.1.2. +

+
Suppose we find a coin on the street and don’t know whether or not it’s fair. We want to know the probability \(p\) of the coin coming up heads. We might, for example, flip the coin \(n\) times and count the number \(k\) of heads. Then, we’ll estimate \(p = \frac{k}{n}\text{.}\) We’ll refer to this as a common sense estimator. (Other distributions and parameter types will have different notions of "common sense".) +
+
An estimator is, itself, a random variable: it produces a numerical value based on the results of an experiment. We’ll use notation like \(\est{p}\) for a random variable which is an estimator for a parameter \(p\text{.}\) (Similarly, \(\est{\lambda}\) would denote an estimator for a parameter called \(\lambda\text{.}\)) +
+

+Definition 4.1.3. +

+
An estimator \(\est{p}\) is called unbiased if \(\E(\est{p}) = p\text{.}\) +
+

+Example 4.1.4. +

+
+
Suppose we have a coin with parameter \(p\text{,}\) which we’ll flip \(n\) times and count the number \(k\) of heads. We use the unbiased estimator \(\est{p} = \frac{k}{n}\text{.}\) In this case, notice that \(k \sim \Bin(n, p)\text{,}\) so we know \(\E(k) = np\text{,}\) although we don’t know the value of \(p\text{.}\) (We probably do know the value of \(n\text{;}\) after all, we’re flipping the coin!) Now:
+
+\begin{gather*} +\E(\est{p}) = \E\left(\frac{k}{n}\right) = \frac{1}{n} \cdot \E(k) = \frac{1}{n} \cdot np = p. +\end{gather*} +
+
It’s worth pausing for a moment to be appropriately impressed with ourselves. We still don’t know the true value of \(p\text{.}\) But we managed to show that our common sense method of estimating \(p\) gives, on average, the correct value.
+ +
+
We’d like to be able to collect some data and use that data to estimate the values of whatever parameters our distribution has. Perhaps as a starting point, it would be good to identify the single most likely value of a parameter: +
+

+Definition 4.1.5. +

+
+
Suppose we collect some data to estimate a parameter \(p\text{.}\) The likelihood function is:
+
+\begin{gather*} +\L(p) = \Pr(\text{data} \mid \text{parameter value is } p). +\end{gather*} +
+
The value of \(p\) which maximizes the function \(\L(p)\) is called the maximum likelihood estimation, or MLE, of \(p\text{.}\) +
+ +
+

+Example 4.1.6. +

+
+
Suppose we flip a coin 100 times. Let \(N\) be the number of heads. Then \(N\sim \Bin(100, p)\) for some unknown value of \(p\text{:}\) +
+
+\begin{align*} +\Pr(N = k) \amp = b(k; 100, p) = {100 \choose k} p^k (1 - p)^{100 - k} +\end{align*} +
+
In this case, \(k\) is the data that we collect, and \(p\) is the value of the parameter. Suppose we see \(52\) heads. Then:
+
+\begin{gather*} +\L(p) = {100 \choose 52} p^{52} (1 - p)^{48}. +\end{gather*} +
+
If we want to know the most likely value of the parameter \(p\text{,}\) then we should maximize \(\L(p)\) over the interval \(0 \leq p \leq 1\text{.}\) +
+
+\begin{align*} +\L'(p) \amp = {100 \choose 52} \left[ 52 p^{51}(1 - p)^{48} + p^{52} 48 (1 - p)^{47}(-1)\right] \\ +\amp = {100 \choose 52} p^{51} (1 - p)^{47} \left[ 52 (1 - p) - 48p \right] \\ +\amp = {100 \choose 52} p^{51} (1 - p)^{47} \left[ 52 - 100 p \right]. +\end{align*} +
+
We can see that \(\L'(p) = 0\) when \(p = 0, 1, \frac{52}{100}\text{,}\) and the endpoints of the interval we’re maximizing over are \(p = 0, 1\text{,}\) so we can build a table:
+ +
Table 4.1.7. Looking for the Maximum
+ + + + + + + + + + + + + + + + +
\(p\)\(\L(p)\)
\(0\)\(0\)
\(52/100\)\(\gt 0\)
\(1\)\(0\)
Note that we don’t need to know the exact value of \(\L(52/100)\) in order to see that it’s strictly positive, and therefore the maximum value of \(\L(p)\text{.}\) So, the MLE of \(p\) is \(52/100\text{.}\) +
+
We can see in the previous example that the MLE of \(p\) is also the common sense estimation of \(p\text{.}\) This will be the case in general for the binomial distribution, so we won’t need to redo this work over and over: +
+
As we remember from Calculus 1, maximizing a continuous function works slightly differently over a closed interval (like the previous example) or an open interval (like the next example). +
+

+Example 4.1.9. +

+
+
Suppose a radioactive material emits particles as it decays. Let \(N\) count the particles emitted. Then \(N \sim \Poiss(\lambda)\) for some unknown rate parameter \(\lambda\text{:}\) +
+
+\begin{gather*} +\Pr(N = k) = p(k; \lambda) = \frac{\lambda^k}{k!} e^{-\lambda} +\end{gather*} +
+
Suppose we observe a sample of material for 1 hour and count 8 particles emitted. Then:
+
+\begin{gather*} +\L(\lambda) = \frac{\lambda^8}{8!} e^{-\lambda} +\end{gather*} +
+
To maximize \(\L(\lambda)\) over the interval \(0 \lt \lambda \lt \infty\text{,}\) we start by finding critical points.
+
+\begin{align*} +\L'(\lambda) \amp = \frac{1}{8!} \left[ 8 \lambda^7 e^{-\lambda} + \lambda^8 e^{-\lambda} (-1)\right] \\ +\amp = \frac{1}{8!} \lambda^7 e^{-\lambda} \left[ 8 - e^{-\lambda} \right] +\end{align*} +
+
The only critical point is \(\lambda = 8\text{,}\) but we have not justified that this is the location of a global maximum. A critical point is only a potential location of a local minimum or maximum. But with a bit more justification: observe that \(\L'\) is positive on the interval \((0, 8)\) and negative on the interval \((8, \infty)\text{.}\) Therefore the function \(\L\) increases on \((0, 8)\) and decreases on \((8, \infty)\text{.}\) So it must reach its maximum at \(\lambda = 8\text{,}\) which is therefore the MLE.
+ +
+
As with the binomial distribution, the calculation will be essentially the same regardless of the specific number of particles observed, so: +
+
The situation for continuous random variables is similar, but slightly different. To build the likelihood function, we should use the pdf of the continuous random variable. So the likelihood function will give the probabiliy density given the data collected, rather than the probability itself. +
+

+Example 4.1.11. +

+
+
Suppose we observe a cell and measure the time \(T\) until a toxin molecule leaves the cell. Then \(T \sim \Exp(\lambda)\) for some unknown rate parameter \(\lambda\text{:}\) +
+
+\begin{gather*} +f(t) = \lambda e^{-\lambda t}. +\end{gather*} +
+
Suppose we observe a molecule leave the cell at \(t = 0.3\) minutes. Then:
+
+\begin{align*} +L(\lambda) \amp = \lambda e^{-0.3\lambda} \\ +L'(\lambda) \amp = e^{-0.3\lambda} + \lambda e^{-0.3t} (-0.3) \\ +\amp = e^{-0.3\lambda}\left[ 1 - 0.3\lambda\right] +\end{align*} +
+
The critical point is \(\lambda = \frac{1}{0.3} \approx 3.33\text{.}\) Since \(\L' \gt 0\) on \((0, 3.33)\) and \(\L' \lt 0\) on \((3.33, \infty)\text{,}\) there is a global maximum at \(\lambda \approx 3.33\text{,}\) which is therefore the MLE.
+ +
The specific time \(0.3\) minutes doesn’t particularly matter in this calculation. Whatever the time \(t\text{,}\) essentially the same calculation will result in a MLE of \(\lambda = 1/t\text{.}\) But what if we collect multiple pieces of data? +
Table 4.1.12. Time Data
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
MoleculeWaiting TimeRate Estimation
1\(0.3\)\(3.33\)
2\(0.8\)\(1.25\)
3\(0.5\)\(2.00\)
4\(0.6\)\(1.67\)
5\(0.9\)\(1.11\)
How should take all of this data into account in our maximum likelihood estimation? We might consider taking the average of all of the separate rate estimations, which would give \(1.87\text{.}\) Is this the most likely? We need some mathematical justification. +
+
To account for multiple, independent data points, we should multiply the probability densities for each in the creation of our likelihood function:
+
+\begin{align*} +\L(\lambda) \amp = \left(\lambda e^{-0.3\lambda}\right)\left(\lambda e^{-0.8\lambda}\right)\left(\lambda e^{-0.5\lambda}\right)\left(\lambda e^{-0.6\lambda}\right)\left(\lambda e^{-0.9\lambda}\right) \\ +\amp = \lambda^5 e^{-0.3\lambda - 0.8\lambda - 0.5\lambda - 0.6\lambda - 0.9\lambda } \\ +\amp = \lambda^5 e^{-3.1\lambda} +\end{align*} +
+
Now we can find the maximum:
+
+\begin{align*} +\L'(\lambda) \amp = 5 \lambda^4 e^{-3.1\lambda} + \lambda^5 e^{-3.1\lambda} (-3.1) \\ +\amp = 5 \lambda^4 e^{-3.1\lambda} + \lambda^5 e^{-3.1\lambda} (-3.1) \\ +\amp = \lambda^4 e^{-3.1\lambda} \left[5 - 3.1\lambda \right] +\end{align*} +
+
The only critical point is \(5/3.1 \approx 1.61\text{.}\) Since \(\L' \gt 0\) on \((0, 1.61)\) and \(\L' \lt 0\) on \((1.61, \infty)\text{,}\) there is a global maximum at \(\lambda = 1.61\text{,}\) which is therefore the MLE.
+ +
It may seem less clear how to generalize this calculation for other tables of data. Observe that the value \(3.1\) is the sum of the five times in the table, so \(3.1/5\) is the average time. The MLE turned out to be the reciprocal of the average time (just as the MLE with only one data point was the reciprocal of that one time). Notice that this does not match the guess we made previously of averaging the individual rate estimations for each data point. +
+

+Exercises Exercises +

+

1.

+
Suppose a coin has an unknown probability of coming up heads. We perform the experiment in five independent trials, during which it takes 4, 5, 4, 3, and 6 flips to see our first heads in each trial. What is the maximum likelihood estimation for the probability of the coin coming up heads on a flip? +
+

2.

+
Suppose a coin has an unknown probability of coming up heads. We perform the experiment in \(n\) independent trials, during which it takes \(k_1, k_2, \dotsc, k_n\) flips to see our first heads in each trial. Find a "common sense" MLE formula for the geometric distribution. +
+
Hint.
+
You could set up a calculation analogous to ExampleΒ 4.1.11. Or, you could consider FactΒ 4.1.8. +
+ +
+

3.

+
A particular store owner wants to approximate the average hourly rate at which customers come into the store. They observe 80 customers enter during a particular 4-hour shift. What is the maximum likelihood estimation for the hourly customer rate? +
+

4.

+
A radioactive material emits particles at an unknown probabilistic rate \(\lambda\) particles per minute. We observe particles emitted at times 1.1, 1.7, 1.3, 2.2, 1.9, and 1.8 minutes. Write the likelihood function \(\mathcal{L}(\lambda)\) based on this data. What is the maximum likelihood estimation for \(\lambda\text{?}\) +
+

5.

+
Suppose a parameter \(\theta\) takes values in \([0, 1]\) with likelihood function \(\mathcal{L}(\theta) = \sqrt{\theta} - \theta^2\text{.}\) Find the maximum likelihood estimation of \(\theta\text{.}\) +
+
+
+
+ + + diff --git a/sec-Linear-Regression.html b/sec-Linear-Regression.html index 46dbc4a..552c47a 100755 --- a/sec-Linear-Regression.html +++ b/sec-Linear-Regression.html @@ -62,7 +62,7 @@ window.MathJax = { "[pretext]/mathjaxknowl3.js" ], "paths": { - "pretext": "_static/pretext/js/lib" + "pretext": "_static/pretext/js" } }, "startup": { @@ -79,7 +79,7 @@ window.MathJax = { - + @@ -101,16 +101,16 @@ eBookConfig.allow_pairs = false; eBookConfig.enableScratchAC = false; eBookConfig.build_info = ""; eBookConfig.python3 = null; -eBookConfig.runestone_version = '7.11.11'; +eBookConfig.runestone_version = '7.11.13'; eBookConfig.jobehost = ''; eBookConfig.proxyuri_runs = ''; eBookConfig.proxyuri_files = ''; eBookConfig.enable_chatcodes = false; - + - @@ -151,6 +151,9 @@ eBookConfig.enable_chatcodes = false; \DeclareMathOperator{\E}{E} \DeclareMathOperator{\Var}{Var} \DeclareMathOperator{\Cov}{Cov} +\newcommand{\L}{\mathcal{L}} + +\newcommand{\est}{\widehat} \newcommand{\lt}{<} \newcommand{\gt}{>} \newcommand{\amp}{&} @@ -244,12 +247,16 @@ eBookConfig.enable_chatcodes = false; diff --git a/sec-One-Sample-Tests.html b/sec-One-Sample-Tests.html index 2dde7ff..6ab3d81 100755 --- a/sec-One-Sample-Tests.html +++ b/sec-One-Sample-Tests.html @@ -62,7 +62,7 @@ window.MathJax = { "[pretext]/mathjaxknowl3.js" ], "paths": { - "pretext": "_static/pretext/js/lib" + "pretext": "_static/pretext/js" } }, "startup": { @@ -79,7 +79,7 @@ window.MathJax = { - + @@ -101,16 +101,16 @@ eBookConfig.allow_pairs = false; eBookConfig.enableScratchAC = false; eBookConfig.build_info = ""; eBookConfig.python3 = null; -eBookConfig.runestone_version = '7.11.11'; +eBookConfig.runestone_version = '7.11.13'; eBookConfig.jobehost = ''; eBookConfig.proxyuri_runs = ''; eBookConfig.proxyuri_files = ''; eBookConfig.enable_chatcodes = false; - + - @@ -151,6 +151,9 @@ eBookConfig.enable_chatcodes = false; \DeclareMathOperator{\E}{E} \DeclareMathOperator{\Var}{Var} \DeclareMathOperator{\Cov}{Cov} +\newcommand{\L}{\mathcal{L}} + +\newcommand{\est}{\widehat} \newcommand{\lt}{<} \newcommand{\gt}{>} \newcommand{\amp}{&} @@ -244,12 +247,16 @@ eBookConfig.enable_chatcodes = false; diff --git a/sec-Power.html b/sec-Power.html index 041ad00..a42a5d5 100755 --- a/sec-Power.html +++ b/sec-Power.html @@ -62,7 +62,7 @@ window.MathJax = { "[pretext]/mathjaxknowl3.js" ], "paths": { - "pretext": "_static/pretext/js/lib" + "pretext": "_static/pretext/js" } }, "startup": { @@ -79,7 +79,7 @@ window.MathJax = { - + @@ -101,16 +101,16 @@ eBookConfig.allow_pairs = false; eBookConfig.enableScratchAC = false; eBookConfig.build_info = ""; eBookConfig.python3 = null; -eBookConfig.runestone_version = '7.11.11'; +eBookConfig.runestone_version = '7.11.13'; eBookConfig.jobehost = ''; eBookConfig.proxyuri_runs = ''; eBookConfig.proxyuri_files = ''; eBookConfig.enable_chatcodes = false; - + - @@ -151,6 +151,9 @@ eBookConfig.enable_chatcodes = false; \DeclareMathOperator{\E}{E} \DeclareMathOperator{\Var}{Var} \DeclareMathOperator{\Cov}{Cov} +\newcommand{\L}{\mathcal{L}} + +\newcommand{\est}{\widehat} \newcommand{\lt}{<} \newcommand{\gt}{>} \newcommand{\amp}{&} @@ -244,12 +247,16 @@ eBookConfig.enable_chatcodes = false; diff --git a/sec-Probability.html b/sec-Probability.html index 777c709..26f94b1 100755 --- a/sec-Probability.html +++ b/sec-Probability.html @@ -62,7 +62,7 @@ window.MathJax = { "[pretext]/mathjaxknowl3.js" ], "paths": { - "pretext": "_static/pretext/js/lib" + "pretext": "_static/pretext/js" } }, "startup": { @@ -79,7 +79,7 @@ window.MathJax = { - + @@ -101,16 +101,16 @@ eBookConfig.allow_pairs = false; eBookConfig.enableScratchAC = false; eBookConfig.build_info = ""; eBookConfig.python3 = null; -eBookConfig.runestone_version = '7.11.11'; +eBookConfig.runestone_version = '7.11.13'; eBookConfig.jobehost = ''; eBookConfig.proxyuri_runs = ''; eBookConfig.proxyuri_files = ''; eBookConfig.enable_chatcodes = false; - + - @@ -151,6 +151,9 @@ eBookConfig.enable_chatcodes = false; \DeclareMathOperator{\E}{E} \DeclareMathOperator{\Var}{Var} \DeclareMathOperator{\Cov}{Cov} +\newcommand{\L}{\mathcal{L}} + +\newcommand{\est}{\widehat} \newcommand{\lt}{<} \newcommand{\gt}{>} \newcommand{\amp}{&} @@ -244,12 +247,16 @@ eBookConfig.enable_chatcodes = false; diff --git a/sec-Set-Theory.html b/sec-Set-Theory.html index f3b93d1..fce0a2d 100755 --- a/sec-Set-Theory.html +++ b/sec-Set-Theory.html @@ -62,7 +62,7 @@ window.MathJax = { "[pretext]/mathjaxknowl3.js" ], "paths": { - "pretext": "_static/pretext/js/lib" + "pretext": "_static/pretext/js" } }, "startup": { @@ -79,7 +79,7 @@ window.MathJax = { - + @@ -101,16 +101,16 @@ eBookConfig.allow_pairs = false; eBookConfig.enableScratchAC = false; eBookConfig.build_info = ""; eBookConfig.python3 = null; -eBookConfig.runestone_version = '7.11.11'; +eBookConfig.runestone_version = '7.11.13'; eBookConfig.jobehost = ''; eBookConfig.proxyuri_runs = ''; eBookConfig.proxyuri_files = ''; eBookConfig.enable_chatcodes = false; - + - @@ -151,6 +151,9 @@ eBookConfig.enable_chatcodes = false; \DeclareMathOperator{\E}{E} \DeclareMathOperator{\Var}{Var} \DeclareMathOperator{\Cov}{Cov} +\newcommand{\L}{\mathcal{L}} + +\newcommand{\est}{\widehat} \newcommand{\lt}{<} \newcommand{\gt}{>} \newcommand{\amp}{&} @@ -244,12 +247,16 @@ eBookConfig.enable_chatcodes = false; diff --git a/sec-Two-Sample-Tests.html b/sec-Two-Sample-Tests.html index d59d4bb..fba228c 100755 --- a/sec-Two-Sample-Tests.html +++ b/sec-Two-Sample-Tests.html @@ -62,7 +62,7 @@ window.MathJax = { "[pretext]/mathjaxknowl3.js" ], "paths": { - "pretext": "_static/pretext/js/lib" + "pretext": "_static/pretext/js" } }, "startup": { @@ -79,7 +79,7 @@ window.MathJax = { - + @@ -101,16 +101,16 @@ eBookConfig.allow_pairs = false; eBookConfig.enableScratchAC = false; eBookConfig.build_info = ""; eBookConfig.python3 = null; -eBookConfig.runestone_version = '7.11.11'; +eBookConfig.runestone_version = '7.11.13'; eBookConfig.jobehost = ''; eBookConfig.proxyuri_runs = ''; eBookConfig.proxyuri_files = ''; eBookConfig.enable_chatcodes = false; - + - @@ -151,6 +151,9 @@ eBookConfig.enable_chatcodes = false; \DeclareMathOperator{\E}{E} \DeclareMathOperator{\Var}{Var} \DeclareMathOperator{\Cov}{Cov} +\newcommand{\L}{\mathcal{L}} + +\newcommand{\est}{\widehat} \newcommand{\lt}{<} \newcommand{\gt}{>} \newcommand{\amp}{&} @@ -244,12 +247,16 @@ eBookConfig.enable_chatcodes = false; diff --git a/sec-Variance.html b/sec-Variance.html index fae702a..b52abae 100755 --- a/sec-Variance.html +++ b/sec-Variance.html @@ -62,7 +62,7 @@ window.MathJax = { "[pretext]/mathjaxknowl3.js" ], "paths": { - "pretext": "_static/pretext/js/lib" + "pretext": "_static/pretext/js" } }, "startup": { @@ -79,7 +79,7 @@ window.MathJax = { - + @@ -101,16 +101,16 @@ eBookConfig.allow_pairs = false; eBookConfig.enableScratchAC = false; eBookConfig.build_info = ""; eBookConfig.python3 = null; -eBookConfig.runestone_version = '7.11.11'; +eBookConfig.runestone_version = '7.11.13'; eBookConfig.jobehost = ''; eBookConfig.proxyuri_runs = ''; eBookConfig.proxyuri_files = ''; eBookConfig.enable_chatcodes = false; - + - @@ -151,6 +151,9 @@ eBookConfig.enable_chatcodes = false; \DeclareMathOperator{\E}{E} \DeclareMathOperator{\Var}{Var} \DeclareMathOperator{\Cov}{Cov} +\newcommand{\L}{\mathcal{L}} + +\newcommand{\est}{\widehat} \newcommand{\lt}{<} \newcommand{\gt}{>} \newcommand{\amp}{&} @@ -244,12 +247,16 @@ eBookConfig.enable_chatcodes = false;