{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# TOEFLやTOEICのスコアリングについて考える\n", "\n", "TOELEやTOEICは世界的(後者は日本国内で主流)な英語能力の検定試験の一種です。大学入試や留学,就活などでこれら検定試験のスコアが活用されることもあります。\n", "\n", "ところで,TOEICって,そのスコアのレンジ(範囲)が10点〜990点になるように **統計的な処理** が施されています。その理由はいくつかありますが,大きなものとしては「複数回受験した場合でも,能力を比較可能な形で表現するため」だったり,「異なる回を受験した,異なる受験者のスコアをなるべく平等に比較するため」だったりします。\n", "\n", "この**統計的な処理**については様々な憶測がありますが,よくあるのは「素点をもとに偏差値的な処理をする」というなんとも腑に落ちないものです。公式問題集には素点とスコアのざっくりとした対応表がついており,そこから,「50門正答したら,大体hoge点 ~ fuga点の間」ということがわかるようですが,やはり,そのスコアリングについては触れられていません。\n", "\n", "「TOEIC スコア 計算」などで検索すると,上記のようなことを説明してくれる不親切なまとめサイトがゴロゴロある一方で,みんなが口を揃えて言う**統計的な処理**については殆ど触れられていません。それもそのはずで,TOEICのテストを運用,スコアリングしているETSという非営利団体は,このスコアの計算方法を詳細に公開していないからです(のちに触れますが,これは決して受験者に意地悪しているのではなく,公平なテスト運用に欠かせないのです)。\n", "\n", "## TOEICのスコアリングに用いる統計処理について\n", "\n", "TOEICのスコアリングの方法は,実際のところETSが公開していないので,わかりません。これにつきます。[Examinee Handbook (直PDF)](https://www.ets.org/s/toeic/pdf/listening-reading-examinee-handbook.pdf)によれば,\n", "\n", "- Scores are determined by the number of correct answers, which is converted to a scaled score. \n", "- Scaled scores are transformed and derived from test takers’ raw scores through a proven statistical procedure called “equating.” \n", "\n", "とだけ記されています。つまり,正答数をなんらかの変換を施したものがスコアであり,そのスコア算出にはequatingという処理が施されている,ということです。\n", "\n", "よく「TOEICにはIRT(項目反応理論)が使われている」と言われるのですが,そう**予想**されているだけです(私もそうだと思っていて,まず間違いなくIRTを使っていると思っています。その理由については後述)。\n", "\n", "## TOEFLのスコアリングに用いる統計処理について\n", "TOEFLに関しては,IRTが使われていることが明言されています。たとえばこの[論文](https://onlinelibrary.wiley.com/doi/abs/10.1002/j.2333-8504.1993.tb01570.x)の初っ端に「IRTの3PLMっての使ってるで」って書いてあります。\n", "\n", "## 項目反応理論とはなにものなのか\n", "\n", "項目反応理論とは,一言でいうと,「個人の能力レベルと項目ごとの難しさなどを考慮して,個人が特定の項目に正答できる確率をモデル化したもの」です。具体的には,\n", "\n", "$$\n", "P(\\theta) = \\gamma + \\frac{1-\\gamma}{1 + exp(\\alpha(\\theta - \\beta))}\n", "$$\n", "\n", "このようなモデルに基づいています。$\\alpha, \\beta, \\gamma$はそれぞれ項目の識別力,困難度,当て推量のパラメタであり,$\\theta$が受験者の能力値を表しています。この$\\theta$に基づいてTOEFLのスコアは計算されています。IRTではこの反応確率を$\\theta$の関数とみなしたものをICC(Item Characteristic Curve)と呼んでいます。\n", "\n", "この$\\theta$が重要で,理論上は$[-\\infty, \\infty]$の区間の任意の値を取ります。しかも困ったことに,$\\theta$と$\\beta$を線形変換すると,パラメタは異なるのに正当確率が全く同じという組み合わせが無限にできてしまいます。これを尺度の不定性などと呼びます。この尺度の不定性を解決するために,IRTでは一般に「$\\theta$の平均を0,標準偏差を1」に固定して,すべてのパラメタを推定します。そうすると,受験者集団の$\\theta$が標準正規分布に従っていれば,プラスマイナス4標準偏差の範囲に,ほぼ100%の受験者のスコアが入ってくることになります。すべてのパラメタが推定し終わった後に,$\\theta$を任意の平均と標準偏差になるように線形変換すると,TOEFLのような0から1000点満点といったスコアが計算できるのです。" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "application/vnd.webio.node+json": { "children": [ { "children": [ { "children": [ { "children": [ { "children": [ { "children": [ "α" ], "instanceArgs": { "namespace": "html", "tag": "label" }, "nodeType": "DOM", "props": { "className": "interact ", "style": { "padding": "5px 10px 0px 10px" } }, "type": "node" } ], "instanceArgs": { "namespace": "html", "tag": "div" }, "nodeType": "DOM", "props": { "className": "interact-flex-row-left" }, "type": "node" }, { "children": [ { "children": [], "instanceArgs": { "namespace": "html", "tag": "input" }, "nodeType": "DOM", "props": { "attributes": { "data-bind": "numericValue: index, valueUpdate: 'input', event: {change: function (){this.changes(this.changes()+1)}}", "orient": "horizontal", "type": "range" }, "className": "slider slider is-fullwidth", "max": 301, "min": 1, "step": 1, "style": {} }, "type": "node" } ], "instanceArgs": { "namespace": "html", "tag": "div" }, "nodeType": "DOM", "props": { "className": "interact-flex-row-center" }, "type": "node" }, { "children": [ { "children": [], "instanceArgs": { "namespace": "html", "tag": "p" }, "nodeType": "DOM", "props": { "attributes": { "data-bind": "text: formatted_val" } }, "type": "node" } ], "instanceArgs": { "namespace": "html", "tag": "div" }, "nodeType": "DOM", "props": { "className": "interact-flex-row-right" }, "type": "node" } ], "instanceArgs": { "namespace": "html", "tag": "div" }, "nodeType": "DOM", "props": { "className": "interact-flex-row interact-widget" }, "type": "node" } ], "instanceArgs": { "handlers": { "changes": [ "(function (val){return (val!=this.model[\"changes\"]()) ? (this.valueFromJulia[\"changes\"]=true, this.model[\"changes\"](val)) : undefined})" ], "index": [ "(function (val){return (val!=this.model[\"index\"]()) ? (this.valueFromJulia[\"index\"]=true, this.model[\"index\"](val)) : undefined})" ] }, "id": "12514129453254694312", "imports": { "data": [ { "name": "knockout", "type": "js", "url": "/assetserver/8a25aee9ab7c0ff01c93039ce56f10fbc64ee308-knockout.js" }, { "name": "knockout_punches", "type": "js", "url": "/assetserver/8f7f2f607dcbcd95d4b35a7fe6451252ff6bde8d-knockout_punches.js" }, { "name": null, "type": "js", "url": "/assetserver/c73bec8302cc32c0a173062c134a504022cf02a7-all.js" }, { "name": null, "type": "css", "url": "/assetserver/7bc29f863e4ee9845ad2e19b2098119edc97fe62-style.css" }, { "name": null, "type": "css", "url": "/assetserver/377f32d1aec4fee67d3bbbed169304a486146cb6-bulma_confined.min.css" } ], "type": "async_block" }, "mount_callbacks": [ "function () {\n var handler = (function (ko, koPunches) {\n ko.punches.enableAll();\n ko.bindingHandlers.numericValue = {\n init: function(element, valueAccessor, allBindings, data, context) {\n var stringified = ko.observable(ko.unwrap(valueAccessor()));\n stringified.subscribe(function(value) {\n var val = parseFloat(value);\n if (!isNaN(val)) {\n valueAccessor()(val);\n }\n });\n valueAccessor().subscribe(function(value) {\n var str = JSON.stringify(value);\n if ((str == \"0\") && ([\"-0\", \"-0.\"].indexOf(stringified()) >= 0))\n return;\n if ([\"null\", \"\"].indexOf(str) >= 0)\n return;\n stringified(str);\n });\n ko.applyBindingsToNode(\n element,\n {\n value: stringified,\n valueUpdate: allBindings.get('valueUpdate'),\n },\n context,\n );\n }\n };\n var json_data = {\"formatted_vals\":[\"0.0\",\"0.01\",\"0.02\",\"0.03\",\"0.04\",\"0.05\",\"0.06\",\"0.07\",\"0.08\",\"0.09\",\"0.1\",\"0.11\",\"0.12\",\"0.13\",\"0.14\",\"0.15\",\"0.16\",\"0.17\",\"0.18\",\"0.19\",\"0.2\",\"0.21\",\"0.22\",\"0.23\",\"0.24\",\"0.25\",\"0.26\",\"0.27\",\"0.28\",\"0.29\",\"0.3\",\"0.31\",\"0.32\",\"0.33\",\"0.34\",\"0.35\",\"0.36\",\"0.37\",\"0.38\",\"0.39\",\"0.4\",\"0.41\",\"0.42\",\"0.43\",\"0.44\",\"0.45\",\"0.46\",\"0.47\",\"0.48\",\"0.49\",\"0.5\",\"0.51\",\"0.52\",\"0.53\",\"0.54\",\"0.55\",\"0.56\",\"0.57\",\"0.58\",\"0.59\",\"0.6\",\"0.61\",\"0.62\",\"0.63\",\"0.64\",\"0.65\",\"0.66\",\"0.67\",\"0.68\",\"0.69\",\"0.7\",\"0.71\",\"0.72\",\"0.73\",\"0.74\",\"0.75\",\"0.76\",\"0.77\",\"0.78\",\"0.79\",\"0.8\",\"0.81\",\"0.82\",\"0.83\",\"0.84\",\"0.85\",\"0.86\",\"0.87\",\"0.88\",\"0.89\",\"0.9\",\"0.91\",\"0.92\",\"0.93\",\"0.94\",\"0.95\",\"0.96\",\"0.97\",\"0.98\",\"0.99\",\"1.0\",\"1.01\",\"1.02\",\"1.03\",\"1.04\",\"1.05\",\"1.06\",\"1.07\",\"1.08\",\"1.09\",\"1.1\",\"1.11\",\"1.12\",\"1.13\",\"1.14\",\"1.15\",\"1.16\",\"1.17\",\"1.18\",\"1.19\",\"1.2\",\"1.21\",\"1.22\",\"1.23\",\"1.24\",\"1.25\",\"1.26\",\"1.27\",\"1.28\",\"1.29\",\"1.3\",\"1.31\",\"1.32\",\"1.33\",\"1.34\",\"1.35\",\"1.36\",\"1.37\",\"1.38\",\"1.39\",\"1.4\",\"1.41\",\"1.42\",\"1.43\",\"1.44\",\"1.45\",\"1.46\",\"1.47\",\"1.48\",\"1.49\",\"1.5\",\"1.51\",\"1.52\",\"1.53\",\"1.54\",\"1.55\",\"1.56\",\"1.57\",\"1.58\",\"1.59\",\"1.6\",\"1.61\",\"1.62\",\"1.63\",\"1.64\",\"1.65\",\"1.66\",\"1.67\",\"1.68\",\"1.69\",\"1.7\",\"1.71\",\"1.72\",\"1.73\",\"1.74\",\"1.75\",\"1.76\",\"1.77\",\"1.78\",\"1.79\",\"1.8\",\"1.81\",\"1.82\",\"1.83\",\"1.84\",\"1.85\",\"1.86\",\"1.87\",\"1.88\",\"1.89\",\"1.9\",\"1.91\",\"1.92\",\"1.93\",\"1.94\",\"1.95\",\"1.96\",\"1.97\",\"1.98\",\"1.99\",\"2.0\",\"2.01\",\"2.02\",\"2.03\",\"2.04\",\"2.05\",\"2.06\",\"2.07\",\"2.08\",\"2.09\",\"2.1\",\"2.11\",\"2.12\",\"2.13\",\"2.14\",\"2.15\",\"2.16\",\"2.17\",\"2.18\",\"2.19\",\"2.2\",\"2.21\",\"2.22\",\"2.23\",\"2.24\",\"2.25\",\"2.26\",\"2.27\",\"2.28\",\"2.29\",\"2.3\",\"2.31\",\"2.32\",\"2.33\",\"2.34\",\"2.35\",\"2.36\",\"2.37\",\"2.38\",\"2.39\",\"2.4\",\"2.41\",\"2.42\",\"2.43\",\"2.44\",\"2.45\",\"2.46\",\"2.47\",\"2.48\",\"2.49\",\"2.5\",\"2.51\",\"2.52\",\"2.53\",\"2.54\",\"2.55\",\"2.56\",\"2.57\",\"2.58\",\"2.59\",\"2.6\",\"2.61\",\"2.62\",\"2.63\",\"2.64\",\"2.65\",\"2.66\",\"2.67\",\"2.68\",\"2.69\",\"2.7\",\"2.71\",\"2.72\",\"2.73\",\"2.74\",\"2.75\",\"2.76\",\"2.77\",\"2.78\",\"2.79\",\"2.8\",\"2.81\",\"2.82\",\"2.83\",\"2.84\",\"2.85\",\"2.86\",\"2.87\",\"2.88\",\"2.89\",\"2.9\",\"2.91\",\"2.92\",\"2.93\",\"2.94\",\"2.95\",\"2.96\",\"2.97\",\"2.98\",\"2.99\",\"3.0\"],\"changes\":WebIO.getval({\"name\":\"changes\",\"scope\":\"12514129453254694312\",\"id\":\"ob_18\",\"type\":\"observable\"}),\"index\":WebIO.getval({\"name\":\"index\",\"scope\":\"12514129453254694312\",\"id\":\"ob_17\",\"type\":\"observable\"})};\n var self = this;\n function AppViewModel() {\n for (var key in json_data) {\n var el = json_data[key];\n this[key] = Array.isArray(el) ? ko.observableArray(el) : ko.observable(el);\n }\n \n [this[\"formatted_val\"]=ko.computed( function(){\n return this.formatted_vals()[parseInt(this.index())-(1)];\n }\n,this)]\n [this[\"changes\"].subscribe((function (val){!(this.valueFromJulia[\"changes\"]) ? (WebIO.setval({\"name\":\"changes\",\"scope\":\"12514129453254694312\",\"id\":\"ob_18\",\"type\":\"observable\"},val)) : undefined; return this.valueFromJulia[\"changes\"]=false}),self),this[\"index\"].subscribe((function (val){!(this.valueFromJulia[\"index\"]) ? (WebIO.setval({\"name\":\"index\",\"scope\":\"12514129453254694312\",\"id\":\"ob_17\",\"type\":\"observable\"},val)) : undefined; return this.valueFromJulia[\"index\"]=false}),self)]\n \n }\n self.model = new AppViewModel();\n self.valueFromJulia = {};\n for (var key in json_data) {\n self.valueFromJulia[key] = false;\n }\n ko.applyBindings(self.model, self.dom);\n}\n);\n (WebIO.importBlock({\"data\":[{\"name\":\"knockout\",\"type\":\"js\",\"url\":\"/assetserver/8a25aee9ab7c0ff01c93039ce56f10fbc64ee308-knockout.js\"},{\"name\":\"knockout_punches\",\"type\":\"js\",\"url\":\"/assetserver/8f7f2f607dcbcd95d4b35a7fe6451252ff6bde8d-knockout_punches.js\"}],\"type\":\"async_block\"})).then((imports) => handler.apply(this, imports));\n}\n" ], "observables": { "changes": { "id": "ob_18", "sync": false, "value": 0 }, "index": { "id": "ob_17", "sync": true, "value": 151 } }, "systemjs_options": null }, "nodeType": "Scope", "props": {}, "type": "node" } ], "instanceArgs": { "namespace": "html", "tag": "div" }, "nodeType": "DOM", "props": { "className": "field interact-widget" }, "type": "node" }, { "children": [ { "children": [ { "children": [ { "children": [ { "children": [ "β" ], "instanceArgs": { "namespace": "html", "tag": "label" }, "nodeType": "DOM", "props": { "className": "interact ", "style": { "padding": "5px 10px 0px 10px" } }, "type": "node" } ], "instanceArgs": { "namespace": "html", "tag": "div" }, "nodeType": "DOM", "props": { "className": "interact-flex-row-left" }, "type": "node" }, { "children": [ { "children": [], "instanceArgs": { "namespace": "html", "tag": "input" }, "nodeType": "DOM", "props": { "attributes": { "data-bind": "numericValue: index, valueUpdate: 'input', event: {change: function (){this.changes(this.changes()+1)}}", "orient": "horizontal", "type": "range" }, "className": "slider slider is-fullwidth", "max": 801, "min": 1, "step": 1, "style": {} }, "type": "node" } ], "instanceArgs": { "namespace": "html", "tag": "div" }, "nodeType": "DOM", "props": { "className": "interact-flex-row-center" }, "type": "node" }, { "children": [ { "children": [], "instanceArgs": { "namespace": "html", "tag": "p" }, "nodeType": "DOM", "props": { "attributes": { "data-bind": "text: formatted_val" } }, "type": "node" } ], "instanceArgs": { "namespace": "html", "tag": "div" }, "nodeType": "DOM", "props": { "className": "interact-flex-row-right" }, "type": "node" } ], "instanceArgs": { "namespace": "html", "tag": "div" }, "nodeType": "DOM", "props": { "className": "interact-flex-row interact-widget" }, "type": "node" } ], "instanceArgs": { "handlers": { "changes": [ "(function (val){return (val!=this.model[\"changes\"]()) ? (this.valueFromJulia[\"changes\"]=true, this.model[\"changes\"](val)) : undefined})" ], "index": [ "(function (val){return (val!=this.model[\"index\"]()) ? (this.valueFromJulia[\"index\"]=true, this.model[\"index\"](val)) : undefined})" ] }, "id": "13265937592986216686", "imports": { "data": [ { "name": "knockout", "type": "js", "url": "/assetserver/8a25aee9ab7c0ff01c93039ce56f10fbc64ee308-knockout.js" }, { "name": "knockout_punches", "type": "js", "url": "/assetserver/8f7f2f607dcbcd95d4b35a7fe6451252ff6bde8d-knockout_punches.js" }, { "name": null, "type": "js", "url": "/assetserver/c73bec8302cc32c0a173062c134a504022cf02a7-all.js" }, { "name": null, "type": "css", "url": "/assetserver/7bc29f863e4ee9845ad2e19b2098119edc97fe62-style.css" }, { "name": null, "type": "css", "url": "/assetserver/377f32d1aec4fee67d3bbbed169304a486146cb6-bulma_confined.min.css" } ], "type": "async_block" }, "mount_callbacks": [ "function () {\n var handler = (function (ko, koPunches) {\n ko.punches.enableAll();\n ko.bindingHandlers.numericValue = {\n init: function(element, valueAccessor, allBindings, data, context) {\n var stringified = ko.observable(ko.unwrap(valueAccessor()));\n stringified.subscribe(function(value) {\n var val = parseFloat(value);\n if (!isNaN(val)) {\n valueAccessor()(val);\n }\n });\n valueAccessor().subscribe(function(value) {\n var str = JSON.stringify(value);\n if ((str == \"0\") && ([\"-0\", \"-0.\"].indexOf(stringified()) >= 0))\n return;\n if ([\"null\", \"\"].indexOf(str) >= 0)\n return;\n stringified(str);\n });\n ko.applyBindingsToNode(\n element,\n {\n value: stringified,\n valueUpdate: allBindings.get('valueUpdate'),\n },\n context,\n );\n }\n };\n var json_data = {\"formatted_vals\":[\"-4.0\",\"-3.99\",\"-3.98\",\"-3.97\",\"-3.96\",\"-3.95\",\"-3.94\",\"-3.93\",\"-3.92\",\"-3.91\",\"-3.9\",\"-3.89\",\"-3.88\",\"-3.87\",\"-3.86\",\"-3.85\",\"-3.84\",\"-3.83\",\"-3.82\",\"-3.81\",\"-3.8\",\"-3.79\",\"-3.78\",\"-3.77\",\"-3.76\",\"-3.75\",\"-3.74\",\"-3.73\",\"-3.72\",\"-3.71\",\"-3.7\",\"-3.69\",\"-3.68\",\"-3.67\",\"-3.66\",\"-3.65\",\"-3.64\",\"-3.63\",\"-3.62\",\"-3.61\",\"-3.6\",\"-3.59\",\"-3.58\",\"-3.57\",\"-3.56\",\"-3.55\",\"-3.54\",\"-3.53\",\"-3.52\",\"-3.51\",\"-3.5\",\"-3.49\",\"-3.48\",\"-3.47\",\"-3.46\",\"-3.45\",\"-3.44\",\"-3.43\",\"-3.42\",\"-3.41\",\"-3.4\",\"-3.39\",\"-3.38\",\"-3.37\",\"-3.36\",\"-3.35\",\"-3.34\",\"-3.33\",\"-3.32\",\"-3.31\",\"-3.3\",\"-3.29\",\"-3.28\",\"-3.27\",\"-3.26\",\"-3.25\",\"-3.24\",\"-3.23\",\"-3.22\",\"-3.21\",\"-3.2\",\"-3.19\",\"-3.18\",\"-3.17\",\"-3.16\",\"-3.15\",\"-3.14\",\"-3.13\",\"-3.12\",\"-3.11\",\"-3.1\",\"-3.09\",\"-3.08\",\"-3.07\",\"-3.06\",\"-3.05\",\"-3.04\",\"-3.03\",\"-3.02\",\"-3.01\",\"-3.0\",\"-2.99\",\"-2.98\",\"-2.97\",\"-2.96\",\"-2.95\",\"-2.94\",\"-2.93\",\"-2.92\",\"-2.91\",\"-2.9\",\"-2.89\",\"-2.88\",\"-2.87\",\"-2.86\",\"-2.85\",\"-2.84\",\"-2.83\",\"-2.82\",\"-2.81\",\"-2.8\",\"-2.79\",\"-2.78\",\"-2.77\",\"-2.76\",\"-2.75\",\"-2.74\",\"-2.73\",\"-2.72\",\"-2.71\",\"-2.7\",\"-2.69\",\"-2.68\",\"-2.67\",\"-2.66\",\"-2.65\",\"-2.64\",\"-2.63\",\"-2.62\",\"-2.61\",\"-2.6\",\"-2.59\",\"-2.58\",\"-2.57\",\"-2.56\",\"-2.55\",\"-2.54\",\"-2.53\",\"-2.52\",\"-2.51\",\"-2.5\",\"-2.49\",\"-2.48\",\"-2.47\",\"-2.46\",\"-2.45\",\"-2.44\",\"-2.43\",\"-2.42\",\"-2.41\",\"-2.4\",\"-2.39\",\"-2.38\",\"-2.37\",\"-2.36\",\"-2.35\",\"-2.34\",\"-2.33\",\"-2.32\",\"-2.31\",\"-2.3\",\"-2.29\",\"-2.28\",\"-2.27\",\"-2.26\",\"-2.25\",\"-2.24\",\"-2.23\",\"-2.22\",\"-2.21\",\"-2.2\",\"-2.19\",\"-2.18\",\"-2.17\",\"-2.16\",\"-2.15\",\"-2.14\",\"-2.13\",\"-2.12\",\"-2.11\",\"-2.1\",\"-2.09\",\"-2.08\",\"-2.07\",\"-2.06\",\"-2.05\",\"-2.04\",\"-2.03\",\"-2.02\",\"-2.01\",\"-2.0\",\"-1.99\",\"-1.98\",\"-1.97\",\"-1.96\",\"-1.95\",\"-1.94\",\"-1.93\",\"-1.92\",\"-1.91\",\"-1.9\",\"-1.89\",\"-1.88\",\"-1.87\",\"-1.86\",\"-1.85\",\"-1.84\",\"-1.83\",\"-1.82\",\"-1.81\",\"-1.8\",\"-1.79\",\"-1.78\",\"-1.77\",\"-1.76\",\"-1.75\",\"-1.74\",\"-1.73\",\"-1.72\",\"-1.71\",\"-1.7\",\"-1.69\",\"-1.68\",\"-1.67\",\"-1.66\",\"-1.65\",\"-1.64\",\"-1.63\",\"-1.62\",\"-1.61\",\"-1.6\",\"-1.59\",\"-1.58\",\"-1.57\",\"-1.56\",\"-1.55\",\"-1.54\",\"-1.53\",\"-1.52\",\"-1.51\",\"-1.5\",\"-1.49\",\"-1.48\",\"-1.47\",\"-1.46\",\"-1.45\",\"-1.44\",\"-1.43\",\"-1.42\",\"-1.41\",\"-1.4\",\"-1.39\",\"-1.38\",\"-1.37\",\"-1.36\",\"-1.35\",\"-1.34\",\"-1.33\",\"-1.32\",\"-1.31\",\"-1.3\",\"-1.29\",\"-1.28\",\"-1.27\",\"-1.26\",\"-1.25\",\"-1.24\",\"-1.23\",\"-1.22\",\"-1.21\",\"-1.2\",\"-1.19\",\"-1.18\",\"-1.17\",\"-1.16\",\"-1.15\",\"-1.14\",\"-1.13\",\"-1.12\",\"-1.11\",\"-1.1\",\"-1.09\",\"-1.08\",\"-1.07\",\"-1.06\",\"-1.05\",\"-1.04\",\"-1.03\",\"-1.02\",\"-1.01\",\"-1.0\",\"-0.99\",\"-0.98\",\"-0.97\",\"-0.96\",\"-0.95\",\"-0.94\",\"-0.93\",\"-0.92\",\"-0.91\",\"-0.9\",\"-0.89\",\"-0.88\",\"-0.87\",\"-0.86\",\"-0.85\",\"-0.84\",\"-0.83\",\"-0.82\",\"-0.81\",\"-0.8\",\"-0.79\",\"-0.78\",\"-0.77\",\"-0.76\",\"-0.75\",\"-0.74\",\"-0.73\",\"-0.72\",\"-0.71\",\"-0.7\",\"-0.69\",\"-0.68\",\"-0.67\",\"-0.66\",\"-0.65\",\"-0.64\",\"-0.63\",\"-0.62\",\"-0.61\",\"-0.6\",\"-0.59\",\"-0.58\",\"-0.57\",\"-0.56\",\"-0.55\",\"-0.54\",\"-0.53\",\"-0.52\",\"-0.51\",\"-0.5\",\"-0.49\",\"-0.48\",\"-0.47\",\"-0.46\",\"-0.45\",\"-0.44\",\"-0.43\",\"-0.42\",\"-0.41\",\"-0.4\",\"-0.39\",\"-0.38\",\"-0.37\",\"-0.36\",\"-0.35\",\"-0.34\",\"-0.33\",\"-0.32\",\"-0.31\",\"-0.3\",\"-0.29\",\"-0.28\",\"-0.27\",\"-0.26\",\"-0.25\",\"-0.24\",\"-0.23\",\"-0.22\",\"-0.21\",\"-0.2\",\"-0.19\",\"-0.18\",\"-0.17\",\"-0.16\",\"-0.15\",\"-0.14\",\"-0.13\",\"-0.12\",\"-0.11\",\"-0.1\",\"-0.09\",\"-0.08\",\"-0.07\",\"-0.06\",\"-0.05\",\"-0.04\",\"-0.03\",\"-0.02\",\"-0.01\",\"0.0\",\"0.01\",\"0.02\",\"0.03\",\"0.04\",\"0.05\",\"0.06\",\"0.07\",\"0.08\",\"0.09\",\"0.1\",\"0.11\",\"0.12\",\"0.13\",\"0.14\",\"0.15\",\"0.16\",\"0.17\",\"0.18\",\"0.19\",\"0.2\",\"0.21\",\"0.22\",\"0.23\",\"0.24\",\"0.25\",\"0.26\",\"0.27\",\"0.28\",\"0.29\",\"0.3\",\"0.31\",\"0.32\",\"0.33\",\"0.34\",\"0.35\",\"0.36\",\"0.37\",\"0.38\",\"0.39\",\"0.4\",\"0.41\",\"0.42\",\"0.43\",\"0.44\",\"0.45\",\"0.46\",\"0.47\",\"0.48\",\"0.49\",\"0.5\",\"0.51\",\"0.52\",\"0.53\",\"0.54\",\"0.55\",\"0.56\",\"0.57\",\"0.58\",\"0.59\",\"0.6\",\"0.61\",\"0.62\",\"0.63\",\"0.64\",\"0.65\",\"0.66\",\"0.67\",\"0.68\",\"0.69\",\"0.7\",\"0.71\",\"0.72\",\"0.73\",\"0.74\",\"0.75\",\"0.76\",\"0.77\",\"0.78\",\"0.79\",\"0.8\",\"0.81\",\"0.82\",\"0.83\",\"0.84\",\"0.85\",\"0.86\",\"0.87\",\"0.88\",\"0.89\",\"0.9\",\"0.91\",\"0.92\",\"0.93\",\"0.94\",\"0.95\",\"0.96\",\"0.97\",\"0.98\",\"0.99\",\"1.0\",\"1.01\",\"1.02\",\"1.03\",\"1.04\",\"1.05\",\"1.06\",\"1.07\",\"1.08\",\"1.09\",\"1.1\",\"1.11\",\"1.12\",\"1.13\",\"1.14\",\"1.15\",\"1.16\",\"1.17\",\"1.18\",\"1.19\",\"1.2\",\"1.21\",\"1.22\",\"1.23\",\"1.24\",\"1.25\",\"1.26\",\"1.27\",\"1.28\",\"1.29\",\"1.3\",\"1.31\",\"1.32\",\"1.33\",\"1.34\",\"1.35\",\"1.36\",\"1.37\",\"1.38\",\"1.39\",\"1.4\",\"1.41\",\"1.42\",\"1.43\",\"1.44\",\"1.45\",\"1.46\",\"1.47\",\"1.48\",\"1.49\",\"1.5\",\"1.51\",\"1.52\",\"1.53\",\"1.54\",\"1.55\",\"1.56\",\"1.57\",\"1.58\",\"1.59\",\"1.6\",\"1.61\",\"1.62\",\"1.63\",\"1.64\",\"1.65\",\"1.66\",\"1.67\",\"1.68\",\"1.69\",\"1.7\",\"1.71\",\"1.72\",\"1.73\",\"1.74\",\"1.75\",\"1.76\",\"1.77\",\"1.78\",\"1.79\",\"1.8\",\"1.81\",\"1.82\",\"1.83\",\"1.84\",\"1.85\",\"1.86\",\"1.87\",\"1.88\",\"1.89\",\"1.9\",\"1.91\",\"1.92\",\"1.93\",\"1.94\",\"1.95\",\"1.96\",\"1.97\",\"1.98\",\"1.99\",\"2.0\",\"2.01\",\"2.02\",\"2.03\",\"2.04\",\"2.05\",\"2.06\",\"2.07\",\"2.08\",\"2.09\",\"2.1\",\"2.11\",\"2.12\",\"2.13\",\"2.14\",\"2.15\",\"2.16\",\"2.17\",\"2.18\",\"2.19\",\"2.2\",\"2.21\",\"2.22\",\"2.23\",\"2.24\",\"2.25\",\"2.26\",\"2.27\",\"2.28\",\"2.29\",\"2.3\",\"2.31\",\"2.32\",\"2.33\",\"2.34\",\"2.35\",\"2.36\",\"2.37\",\"2.38\",\"2.39\",\"2.4\",\"2.41\",\"2.42\",\"2.43\",\"2.44\",\"2.45\",\"2.46\",\"2.47\",\"2.48\",\"2.49\",\"2.5\",\"2.51\",\"2.52\",\"2.53\",\"2.54\",\"2.55\",\"2.56\",\"2.57\",\"2.58\",\"2.59\",\"2.6\",\"2.61\",\"2.62\",\"2.63\",\"2.64\",\"2.65\",\"2.66\",\"2.67\",\"2.68\",\"2.69\",\"2.7\",\"2.71\",\"2.72\",\"2.73\",\"2.74\",\"2.75\",\"2.76\",\"2.77\",\"2.78\",\"2.79\",\"2.8\",\"2.81\",\"2.82\",\"2.83\",\"2.84\",\"2.85\",\"2.86\",\"2.87\",\"2.88\",\"2.89\",\"2.9\",\"2.91\",\"2.92\",\"2.93\",\"2.94\",\"2.95\",\"2.96\",\"2.97\",\"2.98\",\"2.99\",\"3.0\",\"3.01\",\"3.02\",\"3.03\",\"3.04\",\"3.05\",\"3.06\",\"3.07\",\"3.08\",\"3.09\",\"3.1\",\"3.11\",\"3.12\",\"3.13\",\"3.14\",\"3.15\",\"3.16\",\"3.17\",\"3.18\",\"3.19\",\"3.2\",\"3.21\",\"3.22\",\"3.23\",\"3.24\",\"3.25\",\"3.26\",\"3.27\",\"3.28\",\"3.29\",\"3.3\",\"3.31\",\"3.32\",\"3.33\",\"3.34\",\"3.35\",\"3.36\",\"3.37\",\"3.38\",\"3.39\",\"3.4\",\"3.41\",\"3.42\",\"3.43\",\"3.44\",\"3.45\",\"3.46\",\"3.47\",\"3.48\",\"3.49\",\"3.5\",\"3.51\",\"3.52\",\"3.53\",\"3.54\",\"3.55\",\"3.56\",\"3.57\",\"3.58\",\"3.59\",\"3.6\",\"3.61\",\"3.62\",\"3.63\",\"3.64\",\"3.65\",\"3.66\",\"3.67\",\"3.68\",\"3.69\",\"3.7\",\"3.71\",\"3.72\",\"3.73\",\"3.74\",\"3.75\",\"3.76\",\"3.77\",\"3.78\",\"3.79\",\"3.8\",\"3.81\",\"3.82\",\"3.83\",\"3.84\",\"3.85\",\"3.86\",\"3.87\",\"3.88\",\"3.89\",\"3.9\",\"3.91\",\"3.92\",\"3.93\",\"3.94\",\"3.95\",\"3.96\",\"3.97\",\"3.98\",\"3.99\",\"4.0\"],\"changes\":WebIO.getval({\"name\":\"changes\",\"scope\":\"13265937592986216686\",\"id\":\"ob_21\",\"type\":\"observable\"}),\"index\":WebIO.getval({\"name\":\"index\",\"scope\":\"13265937592986216686\",\"id\":\"ob_20\",\"type\":\"observable\"})};\n var self = this;\n function AppViewModel() {\n for (var key in json_data) {\n var el = json_data[key];\n this[key] = Array.isArray(el) ? ko.observableArray(el) : ko.observable(el);\n }\n \n [this[\"formatted_val\"]=ko.computed( function(){\n return this.formatted_vals()[parseInt(this.index())-(1)];\n }\n,this)]\n [this[\"changes\"].subscribe((function (val){!(this.valueFromJulia[\"changes\"]) ? (WebIO.setval({\"name\":\"changes\",\"scope\":\"13265937592986216686\",\"id\":\"ob_21\",\"type\":\"observable\"},val)) : undefined; return this.valueFromJulia[\"changes\"]=false}),self),this[\"index\"].subscribe((function (val){!(this.valueFromJulia[\"index\"]) ? (WebIO.setval({\"name\":\"index\",\"scope\":\"13265937592986216686\",\"id\":\"ob_20\",\"type\":\"observable\"},val)) : undefined; return this.valueFromJulia[\"index\"]=false}),self)]\n \n }\n self.model = new AppViewModel();\n self.valueFromJulia = {};\n for (var key in json_data) {\n self.valueFromJulia[key] = false;\n }\n ko.applyBindings(self.model, self.dom);\n}\n);\n (WebIO.importBlock({\"data\":[{\"name\":\"knockout\",\"type\":\"js\",\"url\":\"/assetserver/8a25aee9ab7c0ff01c93039ce56f10fbc64ee308-knockout.js\"},{\"name\":\"knockout_punches\",\"type\":\"js\",\"url\":\"/assetserver/8f7f2f607dcbcd95d4b35a7fe6451252ff6bde8d-knockout_punches.js\"}],\"type\":\"async_block\"})).then((imports) => handler.apply(this, imports));\n}\n" ], "observables": { "changes": { "id": "ob_21", "sync": false, "value": 0 }, "index": { "id": "ob_20", "sync": true, "value": 401 } }, "systemjs_options": null }, "nodeType": "Scope", "props": {}, "type": "node" } ], "instanceArgs": { "namespace": "html", "tag": "div" }, "nodeType": "DOM", "props": { "className": "field interact-widget" }, "type": "node" }, { "children": [ { "children": [ { "children": [ { "children": [ { "children": [ "γ" ], "instanceArgs": { "namespace": "html", "tag": "label" }, "nodeType": "DOM", "props": { "className": "interact ", "style": { "padding": "5px 10px 0px 10px" } }, "type": "node" } ], "instanceArgs": { "namespace": "html", "tag": "div" }, "nodeType": "DOM", "props": { "className": "interact-flex-row-left" }, "type": "node" }, { "children": [ { "children": [], "instanceArgs": { "namespace": "html", "tag": "input" }, "nodeType": "DOM", "props": { "attributes": { "data-bind": "numericValue: index, valueUpdate: 'input', event: {change: function (){this.changes(this.changes()+1)}}", "orient": "horizontal", "type": "range" }, "className": "slider slider is-fullwidth", "max": 101, "min": 1, "step": 1, "style": {} }, "type": "node" } ], "instanceArgs": { "namespace": "html", "tag": "div" }, "nodeType": "DOM", "props": { "className": "interact-flex-row-center" }, "type": "node" }, { "children": [ { "children": [], "instanceArgs": { "namespace": "html", "tag": "p" }, "nodeType": "DOM", "props": { "attributes": { "data-bind": "text: formatted_val" } }, "type": "node" } ], "instanceArgs": { "namespace": "html", "tag": "div" }, "nodeType": "DOM", "props": { "className": "interact-flex-row-right" }, "type": "node" } ], "instanceArgs": { "namespace": "html", "tag": "div" }, "nodeType": "DOM", "props": { "className": "interact-flex-row interact-widget" }, "type": "node" } ], "instanceArgs": { "handlers": { "changes": [ "(function (val){return (val!=this.model[\"changes\"]()) ? (this.valueFromJulia[\"changes\"]=true, this.model[\"changes\"](val)) : undefined})" ], "index": [ "(function (val){return (val!=this.model[\"index\"]()) ? (this.valueFromJulia[\"index\"]=true, this.model[\"index\"](val)) : undefined})" ] }, "id": "2961590104758986936", "imports": { "data": [ { "name": "knockout", "type": "js", "url": "/assetserver/8a25aee9ab7c0ff01c93039ce56f10fbc64ee308-knockout.js" }, { "name": "knockout_punches", "type": "js", "url": "/assetserver/8f7f2f607dcbcd95d4b35a7fe6451252ff6bde8d-knockout_punches.js" }, { "name": null, "type": "js", "url": "/assetserver/c73bec8302cc32c0a173062c134a504022cf02a7-all.js" }, { "name": null, "type": "css", "url": "/assetserver/7bc29f863e4ee9845ad2e19b2098119edc97fe62-style.css" }, { "name": null, "type": "css", "url": "/assetserver/377f32d1aec4fee67d3bbbed169304a486146cb6-bulma_confined.min.css" } ], "type": "async_block" }, "mount_callbacks": [ "function () {\n var handler = (function (ko, koPunches) {\n ko.punches.enableAll();\n ko.bindingHandlers.numericValue = {\n init: function(element, valueAccessor, allBindings, data, context) {\n var stringified = ko.observable(ko.unwrap(valueAccessor()));\n stringified.subscribe(function(value) {\n var val = parseFloat(value);\n if (!isNaN(val)) {\n valueAccessor()(val);\n }\n });\n valueAccessor().subscribe(function(value) {\n var str = JSON.stringify(value);\n if ((str == \"0\") && ([\"-0\", \"-0.\"].indexOf(stringified()) >= 0))\n return;\n if ([\"null\", \"\"].indexOf(str) >= 0)\n return;\n stringified(str);\n });\n ko.applyBindingsToNode(\n element,\n {\n value: stringified,\n valueUpdate: allBindings.get('valueUpdate'),\n },\n context,\n );\n }\n };\n var json_data = {\"formatted_vals\":[\"0.0\",\"0.01\",\"0.02\",\"0.03\",\"0.04\",\"0.05\",\"0.06\",\"0.07\",\"0.08\",\"0.09\",\"0.1\",\"0.11\",\"0.12\",\"0.13\",\"0.14\",\"0.15\",\"0.16\",\"0.17\",\"0.18\",\"0.19\",\"0.2\",\"0.21\",\"0.22\",\"0.23\",\"0.24\",\"0.25\",\"0.26\",\"0.27\",\"0.28\",\"0.29\",\"0.3\",\"0.31\",\"0.32\",\"0.33\",\"0.34\",\"0.35\",\"0.36\",\"0.37\",\"0.38\",\"0.39\",\"0.4\",\"0.41\",\"0.42\",\"0.43\",\"0.44\",\"0.45\",\"0.46\",\"0.47\",\"0.48\",\"0.49\",\"0.5\",\"0.51\",\"0.52\",\"0.53\",\"0.54\",\"0.55\",\"0.56\",\"0.57\",\"0.58\",\"0.59\",\"0.6\",\"0.61\",\"0.62\",\"0.63\",\"0.64\",\"0.65\",\"0.66\",\"0.67\",\"0.68\",\"0.69\",\"0.7\",\"0.71\",\"0.72\",\"0.73\",\"0.74\",\"0.75\",\"0.76\",\"0.77\",\"0.78\",\"0.79\",\"0.8\",\"0.81\",\"0.82\",\"0.83\",\"0.84\",\"0.85\",\"0.86\",\"0.87\",\"0.88\",\"0.89\",\"0.9\",\"0.91\",\"0.92\",\"0.93\",\"0.94\",\"0.95\",\"0.96\",\"0.97\",\"0.98\",\"0.99\",\"1.0\"],\"changes\":WebIO.getval({\"name\":\"changes\",\"scope\":\"2961590104758986936\",\"id\":\"ob_24\",\"type\":\"observable\"}),\"index\":WebIO.getval({\"name\":\"index\",\"scope\":\"2961590104758986936\",\"id\":\"ob_23\",\"type\":\"observable\"})};\n var self = this;\n function AppViewModel() {\n for (var key in json_data) {\n var el = json_data[key];\n this[key] = Array.isArray(el) ? ko.observableArray(el) : ko.observable(el);\n }\n \n [this[\"formatted_val\"]=ko.computed( function(){\n return this.formatted_vals()[parseInt(this.index())-(1)];\n }\n,this)]\n [this[\"changes\"].subscribe((function (val){!(this.valueFromJulia[\"changes\"]) ? (WebIO.setval({\"name\":\"changes\",\"scope\":\"2961590104758986936\",\"id\":\"ob_24\",\"type\":\"observable\"},val)) : undefined; return this.valueFromJulia[\"changes\"]=false}),self),this[\"index\"].subscribe((function (val){!(this.valueFromJulia[\"index\"]) ? (WebIO.setval({\"name\":\"index\",\"scope\":\"2961590104758986936\",\"id\":\"ob_23\",\"type\":\"observable\"},val)) : undefined; return this.valueFromJulia[\"index\"]=false}),self)]\n \n }\n self.model = new AppViewModel();\n self.valueFromJulia = {};\n for (var key in json_data) {\n self.valueFromJulia[key] = false;\n }\n ko.applyBindings(self.model, self.dom);\n}\n);\n (WebIO.importBlock({\"data\":[{\"name\":\"knockout\",\"type\":\"js\",\"url\":\"/assetserver/8a25aee9ab7c0ff01c93039ce56f10fbc64ee308-knockout.js\"},{\"name\":\"knockout_punches\",\"type\":\"js\",\"url\":\"/assetserver/8f7f2f607dcbcd95d4b35a7fe6451252ff6bde8d-knockout_punches.js\"}],\"type\":\"async_block\"})).then((imports) => handler.apply(this, imports));\n}\n" ], "observables": { "changes": { "id": "ob_24", "sync": false, "value": 0 }, "index": { "id": "ob_23", "sync": true, "value": 51 } }, "systemjs_options": null }, "nodeType": "Scope", "props": {}, "type": "node" } ], "instanceArgs": { "namespace": "html", "tag": "div" }, "nodeType": "DOM", "props": { "className": "field interact-widget" }, "type": "node" }, { "children": [ { "children": [], "instanceArgs": { "id": "ob_30", "name": "obs-node" }, "nodeType": "ObservableNode", "props": {}, "type": "node" } ], "instanceArgs": { "handlers": {}, "id": "7656910305414329916", "imports": { "data": [], "type": "async_block" }, "mount_callbacks": [], "observables": { "obs-node": { "id": "ob_30", "sync": false, "value": { "children": [ { "children": [], "instanceArgs": { "namespace": "html", "tag": "div" }, "nodeType": "DOM", "props": { "setInnerHtml": "\n\n" }, "type": "node" } ], "instanceArgs": { "namespace": "html", "tag": "div" }, "nodeType": "DOM", "props": { "className": "interact-flex-row interact-widget" }, "type": "node" } } }, "systemjs_options": null }, "nodeType": "Scope", "props": {}, "type": "node" } ], "instanceArgs": { "namespace": "html", "tag": "div" }, "nodeType": "DOM", "props": {}, "type": "node" }, "text/html": [ "