// Numbas version: finer_feedback_settings {"name": "Linear regression (employe test scores)", "extensions": ["stats", "jsxgraph"], "custom_part_types": [], "resources": [], "navigation": {"allowregen": true, "showfrontpage": false, "preventleave": false, "typeendtoleave": false}, "question_groups": [{"pickingStrategy": "all-ordered", "questions": [{"variables": {"varreg2": {"name": "varreg2", "group": "Ungrouped variables", "definition": "rsquared*ss[1]/n", "description": "", "templateType": "anything"}, "tsqovern": {"name": "tsqovern", "group": "Ungrouped variables", "definition": "[t[0]^2/n,t[1]^2/n]", "description": "", "templateType": "anything"}, "t": {"name": "t", "group": "Ungrouped variables", "definition": "[sum(r1),sum(r2)]", "description": "", "templateType": "anything"}, "y_bar": {"name": "y_bar", "group": "Ungrouped variables", "definition": "mean(r2)", "description": "", "templateType": "anything"}, "company_name": {"name": "company_name", "group": "Unnamed group", "definition": "random(company_names)", "description": "", "templateType": "anything"}, "varreg1": {"name": "varreg1", "group": "Ungrouped variables", "definition": "variance(list(vector(r2)-vector(res)))", "description": "", "templateType": "anything"}, "tol": {"name": "tol", "group": "Ungrouped variables", "definition": "0.01", "description": "", "templateType": "anything"}, "ss": {"name": "ss", "group": "Ungrouped variables", "definition": "[ssq[0]-t[0]^2/n,ssq[1]-t[1]^2/n]", "description": "", "templateType": "anything"}, "sxy": {"name": "sxy", "group": "Ungrouped variables", "definition": "sum(map(r1[x]*r2[x],x,0..n-1))", "description": "", "templateType": "anything"}, "ch": {"name": "ch", "group": "Ungrouped variables", "definition": "random(0..7)", "description": "", "templateType": "anything"}, "x_bar": {"name": "x_bar", "group": "Ungrouped variables", "definition": "mean(r1)", "description": "", "templateType": "anything"}, "b_0": {"name": "b_0", "group": "Ungrouped variables", "definition": "y_bar - b_1*x_bar", "description": "", "templateType": "anything"}, "a1": {"name": "a1", "group": "Ungrouped variables", "definition": "random(10..20)", "description": "", "templateType": "anything"}, "sumr": {"name": "sumr", "group": "Ungrouped variables", "definition": "precround(sum(map(res[x]^2,x,0..n-1)),3)", "description": "", "templateType": "anything"}, "spxy": {"name": "spxy", "group": "Ungrouped variables", "definition": "sxy-t[0]*t[1]/n", "description": "", "templateType": "anything"}, "b": {"name": "b", "group": "Ungrouped variables", "definition": "spxy/ss[0]", "description": "", "templateType": "anything"}, "R": {"name": "R", "group": "Ungrouped variables", "definition": "1/(n-1)*sum(map((r1[x] - x_bar)/s_x*(r2[x] - y_bar)/s_y,x,0..n-1))", "description": "", "templateType": "anything"}, "company_names": {"name": "company_names", "group": "Unnamed group", "definition": "[ \"Hardwork, Inc.\", \"Thriftforth\\'s\", \"Pennykeep & Co.\", \"I. Save and Sons\" ]", "description": "", "templateType": "list of strings"}, "s_y": {"name": "s_y", "group": "Ungrouped variables", "definition": "stdev(r2,true)", "description": "", "templateType": "anything"}, "sc": {"name": "sc", "group": "Ungrouped variables", "definition": "r1[ch]", "description": "", "templateType": "anything"}, "b1": {"name": "b1", "group": "Ungrouped variables", "definition": "random(0.25..0.45#0.05)", "description": "", "templateType": "anything"}, "n": {"name": "n", "group": "Ungrouped variables", "definition": "8", "description": "", "templateType": "anything"}, "ls": {"name": "ls", "group": "Ungrouped variables", "definition": "b_0+b_1*sc", "description": "", "templateType": "anything"}, "obj": {"name": "obj", "group": "Ungrouped variables", "definition": "['A','B','C','D','E','F','G','H']", "description": "", "templateType": "anything"}, "ssq": {"name": "ssq", "group": "Ungrouped variables", "definition": "[sum(map(x^2,x,r1)),sum(map(x^2,x,r2))]", "description": "", "templateType": "anything"}, "a": {"name": "a", "group": "Ungrouped variables", "definition": "1/n*(t[1]-spxy/ss[0]*t[0])", "description": "", "templateType": "anything"}, "r2": {"name": "r2", "group": "Ungrouped variables", "definition": "map(round(a1+b1*x+random(-9..9)),x,r1)", "description": "", "templateType": "anything"}, "res": {"name": "res", "group": "Ungrouped variables", "definition": "map(r2[x]-(b_0+b_1*r1[x]),x,0..n-1)", "description": "", "templateType": "anything"}, "r1": {"name": "r1", "group": "Ungrouped variables", "definition": "repeat(round(normalsample(67,8)),n)", "description": "", "templateType": "anything"}, "b_1": {"name": "b_1", "group": "Ungrouped variables", "definition": "s_y/s_x*R", "description": "", "templateType": "anything"}, "s_x": {"name": "s_x", "group": "Ungrouped variables", "definition": "stdev(r1,true)", "description": "", "templateType": "anything"}, "rsquared": {"name": "rsquared", "group": "Ungrouped variables", "definition": "precround(spxy^2/(ss[0]*ss[1]),3)", "description": "", "templateType": "anything"}}, "showQuestionGroupNames": false, "ungrouped_variables": ["ch", "b1", "sxy", "res", "spxy", "ls", "tol", "tsqovern", "ssq", "sumr", "a1", "varreg2", "varreg1", "a", "b", "obj", "r1", "r2", "ss", "n", "t", "sc", "rsquared", "x_bar", "y_bar", "s_x", "s_y", "R", "b_1", "b_0"], "advice": "", "extensions": ["stats", "jsxgraph"], "name": "Linear regression (employe test scores)", "parts": [{"prompt": "
Manually fit the best fitting regression line:
\n\\[\\hat{y} = b_{0} + b_{1}x\\]
\nby clicking-on and dragging the points marked I and J in the figure below. The objective is to minimise the sum of the residuals squared (SSE), which is shown below the figure for your fitted line.
\nMet die hand pas die beste regressielyn:
\n\\[\\hat{y} = b_{0} + b_{1}x\\]
\ndeur op die punte gemerk I en J in die figuur hieronder te druk en dit rond te sleep. Die doel is om die som van die residue kwadraat (SSE), wat onder die figuur vir jou toegerus lyn getoon word te minimeer.
\n$b_0=\\;$[[0]] , $b_1=\\;$[[1]]
\n{regressline(r1,r2,min(r1)-10,max(r1)+10,min(r2)-10,max(r2)+10)}
\nSSE for interactive line:
\n", "gaps": [{"allowFractions": false, "correctAnswerFraction": false, "maxValue": "b_0+0.5", "scripts": {}, "variableReplacementStrategy": "originalfirst", "minValue": "b_0-0.5", "variableReplacements": [], "marks": "1", "type": "numberentry", "showCorrectAnswer": true}, {"allowFractions": false, "correctAnswerFraction": false, "maxValue": "b_1+0.5", "scripts": {}, "variableReplacementStrategy": "originalfirst", "minValue": "b_1-0.5", "variableReplacements": [], "marks": "1", "type": "numberentry", "showCorrectAnswer": true}], "scripts": {}, "variableReplacementStrategy": "originalfirst", "variableReplacements": [], "marks": 0, "type": "gapfill", "showCorrectAnswer": true}, {"prompt": "Calculate the correlation cofficient, $R$, between the first and second test score for the eigth employees using the following formula:
\n$R = \\frac{1}{n-1}\\sum_{i=1}^{n}\\frac{x_i - \\bar{x}}{s_x}\\frac{y_i - \\bar{y}}{s_y}$.
\nFirst calculate the average, $\\bar{x}$, and standard deviation, $s_x$, for the first score, $x$, then calculate the average, $\\bar{y}$, and standard deviation, $s_y$, for the second score, $y$. Thereafter calculate the correlation cofficient $R$.
\nBereken die korrelasie gebeurlikheidskoëffisiënt, $R$, tussen die eerste en tweede toetstelling vir die agt werknemers met behulp van die volgende formule:
\n$R = \\frac{1}{n-1}\\sum_{i=1}^{n}\\frac{x_i - \\bar{x}}{s_x}\\frac{y_i - \\bar{y}}{s_y}$.
\nBereken eers die gemiddelde, $\\bar{x}$, en standaardafwyking, $s_x$, vir die eerste telling, $x$, bereken dan die gemiddelde, $\\bar{y}$, en standaardafwyking, $s_y$, vir die tweede telling, $y$. Daarna bereken die korrelasie gebeurlikheidskoëffisiënt $R$.
\n$\\bar{x} =$ [[0]] , $s_x =$ [[1]]
\n$\\bar{y} =$ [[2]] , $s_y =$ [[3]]
\n$R =$ [[4]]
", "gaps": [{"strictPrecision": false, "allowFractions": false, "marks": "1", "maxValue": "x_bar + tol", "precisionMessage": "You have not given your answer to the correct precision.
", "variableReplacements": [], "correctAnswerFraction": false, "showCorrectAnswer": true, "precisionType": "dp", "precision": "3", "showPrecisionHint": true, "scripts": {}, "minValue": "x_bar - tol", "variableReplacementStrategy": "originalfirst", "type": "numberentry", "precisionPartialCredit": 0}, {"strictPrecision": false, "allowFractions": false, "marks": "1", "maxValue": "s_x + tol", "precisionMessage": "You have not given your answer to the correct precision.
", "variableReplacements": [], "correctAnswerFraction": false, "showCorrectAnswer": true, "precisionType": "dp", "precision": "3", "showPrecisionHint": true, "scripts": {}, "minValue": "s_x - tol", "variableReplacementStrategy": "originalfirst", "type": "numberentry", "precisionPartialCredit": 0}, {"strictPrecision": false, "allowFractions": false, "marks": "1", "maxValue": "y_bar + tol", "precisionMessage": "You have not given your answer to the correct precision.
", "variableReplacements": [], "correctAnswerFraction": false, "showCorrectAnswer": true, "precisionType": "dp", "precision": "3", "showPrecisionHint": true, "scripts": {}, "minValue": "y_bar - tol", "variableReplacementStrategy": "originalfirst", "type": "numberentry", "precisionPartialCredit": 0}, {"strictPrecision": false, "allowFractions": false, "marks": "1", "maxValue": "s_y + tol", "precisionMessage": "You have not given your answer to the correct precision.
", "variableReplacements": [], "correctAnswerFraction": false, "showCorrectAnswer": true, "precisionType": "dp", "precision": "3", "showPrecisionHint": true, "scripts": {}, "minValue": "s_y - tol", "variableReplacementStrategy": "originalfirst", "type": "numberentry", "precisionPartialCredit": 0}, {"strictPrecision": false, "allowFractions": false, "marks": "2", "maxValue": "R + tol", "precisionMessage": "You have not given your answer to the correct precision.
", "variableReplacements": [{"variable": "x_bar", "part": "p1g0", "must_go_first": false}, {"variable": "s_x", "part": "p1g1", "must_go_first": false}, {"variable": "y_bar", "part": "p1g2", "must_go_first": false}, {"variable": "s_y", "part": "p1g3", "must_go_first": false}], "correctAnswerFraction": false, "showCorrectAnswer": true, "precisionType": "dp", "precision": "3", "showPrecisionHint": true, "scripts": {}, "minValue": "R - tol", "variableReplacementStrategy": "originalfirst", "type": "numberentry", "precisionPartialCredit": 0}], "scripts": {}, "variableReplacementStrategy": "originalfirst", "variableReplacements": [], "marks": 0, "type": "gapfill", "showCorrectAnswer": true}, {"variableReplacementStrategy": "originalfirst", "stepsPenalty": 0, "prompt": "Calculate the equation of the best fitting regression line:
\n\\[\\hat{y} = b_{0} + b_{1}x.\\]
\nFind $b_0$ and $b_1$.
\nClick on Show steps if you want more information on calculating $b_0$ and $b_1$. You will not lose any marks by doing so, and be sure to check your results against your manually fitted line from Part a.
\nBereken die vergelyking van die beste pas regressielyn:
\n\\[\\hat{y} = b_{0} + b_{1}x.\\]
\nVind $b_0$ en $b_1$ tot vyf desimale plekke, en gee jou antwoord tot 3 desimale plekke. Jy sal hierdie benaderde waardes gebruik in die res van die vraag.
\nKlik op \"Show steps\" as jy meer inligting oor die berekening van $b_0 $ en $b_1$ benodig. Jy sal geen punte verloor deur dit te doen nie, en maak seker om jou uitslae teen jou hand toegepaste lyn van Deel A te vergelyk.
\n$b_1=\\;$[[0]] , $b_0=\\;$[[1]]
", "steps": [{"prompt": "To find $b_0$ and $b_1$, use the following formulas:
\nOm $b_0$ en $b_1$ te kry gebruik die volgende formules. Bereken dan die parameters soos volg:
\n$b_1 = \\frac{s_y}{s_x}R$
\n$b_0 = \\bar{y} - b_1\\bar{x}$
", "scripts": {}, "variableReplacementStrategy": "originalfirst", "variableReplacements": [], "marks": 0, "type": "information", "showCorrectAnswer": true}], "scripts": {}, "marks": 0, "variableReplacements": [], "gaps": [{"strictPrecision": false, "allowFractions": false, "marks": "2", "maxValue": "b_1+tol", "precisionMessage": "You have not given your answer to the correct precision.
", "variableReplacements": [{"variable": "R", "part": "p1g4", "must_go_first": false}, {"variable": "s_x", "part": "p1g1", "must_go_first": false}, {"variable": "s_y", "part": "p1g3", "must_go_first": false}], "correctAnswerFraction": false, "showCorrectAnswer": true, "precisionType": "dp", "precision": "3", "showPrecisionHint": true, "scripts": {}, "minValue": "b_1-tol", "variableReplacementStrategy": "originalfirst", "type": "numberentry", "precisionPartialCredit": 0}, {"strictPrecision": false, "allowFractions": false, "marks": "2", "maxValue": "b_0+tol", "precisionMessage": "You have not given your answer to the correct precision.
", "variableReplacements": [{"variable": "x_bar", "part": "p1g0", "must_go_first": false}, {"variable": "y_bar", "part": "p1g2", "must_go_first": false}, {"variable": "b_1", "part": "p2g0", "must_go_first": false}], "correctAnswerFraction": false, "showCorrectAnswer": true, "precisionType": "dp", "precision": "3", "showPrecisionHint": true, "scripts": {}, "minValue": "b_0-tol", "variableReplacementStrategy": "originalfirst", "type": "numberentry", "precisionPartialCredit": 0}], "type": "gapfill", "showCorrectAnswer": true}, {"strictPrecision": false, "allowFractions": false, "marks": 1, "precision": "3", "maxValue": "ls+tol", "precisionMessage": "You have not given your answer to the correct precision.
", "variableReplacements": [{"variable": "b_0", "part": "p2g1", "must_go_first": false}, {"variable": "b_1", "part": "p2g0", "must_go_first": false}], "correctAnswerFraction": false, "showCorrectAnswer": true, "precisionType": "dp", "prompt": "What is the predicted Later score for employee $\\var{obj[ch]}$ based on the the First test?
\nUse your best fitted regression line from the previous part.
\nWat is die voorspelde \"Later score\" vir werknemer $\\var{obj[ch]}$ gebaseer op die eerste toets?
\nGebruik jou best gepaste regressielyn van die vorige deel.
", "showPrecisionHint": true, "scripts": {}, "minValue": "ls-tol", "variableReplacementStrategy": "originalfirst", "type": "numberentry", "precisionPartialCredit": 0}, {"variableReplacementStrategy": "originalfirst", "stepsPenalty": 0, "prompt": "Calculate the residual value for employee $\\var{obj[ch]}$. Note that if Part (d) is incorrect, this part will also be incorrect.
\nClick on Show steps to see what is meant by the residual value if you have forgotten. You will not lose any marks by doing so.
\nBereken die reswaarde vir werknemer $\\var{obj[ch]}$. Let op dat indien Deel (d) verkeerd is, die deel ook verkeerd gemerk sal word.
\nKlik op \"Show steps\" om te sien wat bedoel word met die reswaarde as jy vergeet het. Jy sal geen punte verloor deur dit te doen nie.
\nResidual value/reswaarde = [[0]]
", "steps": [{"prompt": "The residual of the $i^\\text{th}$ value is given by:
\n$e_{i} = y_i - \\hat{y}_i$.
\nIn this case the observed value for $\\var{obj[ch]}$ is $\\var{r2[ch]}$ and you get the fitted value by feeding the First test value $\\var{r1[ch]}$ into the regression equation.
\nDiereswaarde van die$i^\\text{th}$ waarde word gegee deur:
\n$e_{i} = y_i - \\hat{y}_i$.
\nIn hierdie geval is die waargeneem waarde vir $\\var{obj[ch]}$ gelyk aan $\\var{r2[ch]}$ en mens kry die toegerusde waarde deur die \"First test\" waarde $\\var{r2[ch]}$ in die regressievergelyking in te voer.
", "scripts": {}, "variableReplacementStrategy": "originalfirst", "variableReplacements": [], "marks": 0, "type": "information", "showCorrectAnswer": true}], "scripts": {}, "marks": 0, "variableReplacements": [], "gaps": [{"strictPrecision": false, "allowFractions": false, "marks": "2", "maxValue": "res[ch]+tol", "precisionMessage": "You have not given your answer to the correct precision.
", "variableReplacements": [{"variable": "b_1", "part": "p2g0", "must_go_first": false}, {"variable": "b_0", "part": "p2g1", "must_go_first": false}], "correctAnswerFraction": false, "showCorrectAnswer": true, "precisionType": "dp", "precision": "3", "showPrecisionHint": true, "scripts": {}, "minValue": "res[ch]-tol", "variableReplacementStrategy": "originalfirst", "type": "numberentry", "precisionPartialCredit": 0}], "type": "gapfill", "showCorrectAnswer": true}], "rulesets": {"std": ["all", "fractionNumbers", "!collectNumbers", "!noLeadingMinus"]}, "variable_groups": [{"variables": ["company_names", "company_name"], "name": "Unnamed group"}], "statement": "To monitor its staff appraisal methods, the personnel department of {company_name} compares the results of the tests carried out on employees at their first appraisal with an assessment score of the same individuals two years later. The resulting data are as follows:
\nOm sy personeel evaluering metodes te monitor, vergelyk die personeel departement van {company_name} die resultate van toetse wat werknemers by hul eerste beoordeling uitgevoer het met 'n aanslag telling van dieselfde individue twee jaar later. Die gevolglike data is soos volg:
\nEmployee | $\\var{obj[0]}$ | $\\var{obj[1]}$ | $\\var{obj[2]}$ | $\\var{obj[3]}$ | $\\var{obj[4]}$ | $\\var{obj[5]}$ | $\\var{obj[6]}$ | $\\var{obj[7]}$ |
---|---|---|---|---|---|---|---|---|
First Test $(x)$ | \n$\\var{r1[0]}$ | \n$\\var{r1[1]}$ | \n$\\var{r1[2]}$ | \n$\\var{r1[3]}$ | \n$\\var{r1[4]}$ | \n$\\var{r1[5]}$ | \n$\\var{r1[6]}$ | \n$\\var{r1[7]}$ | \n
Later Score $(y)$ | \n$\\var{r2[0]}$ | \n$\\var{r2[1]}$ | \n$\\var{r2[2]}$ | \n$\\var{r2[3]}$ | \n$\\var{r2[4]}$ | \n$\\var{r2[5]}$ | \n$\\var{r2[6]}$ | \n$\\var{r2[7]}$ | \n
Answer all the following questions, and unless otherwise stated, round your answer to THREE (3) decimal values.
\nBeantwoord al die volgende vrae, en tensy anders vermeld, rond jou antwoord tot DRIE (3) desimale waardes.
", "metadata": {"description": "Find a regression equation.
\nNow includes a graph of the regression line and another interactive graph gives users the opportunity to move the regression line around. Could be used for allowing users to experiment with what they think the line should be and see how this compares with the calculated line.
\nAlso includes an updated SSE to see how the sum of the squares of the residuals varies with the regression line.
", "licence": "Creative Commons Attribution 4.0 International"}, "preamble": {"css": "", "js": ""}, "tags": [], "functions": {"regressline": {"parameters": [["r1", "list"], ["r2", "list"], ["minx", "number"], ["maxx", "number"], ["miny", "number"], ["maxy", "number"]], "definition": "\nvar div = Numbas.extensions.jsxgraph.makeBoard('600px','600px',\n {boundingBox:[-5,maxy,maxx,-5],\n axis:true,\n showNavigation:false,\n grid:false});\nvar board = div.board; \nfor (j=0;j<8;j++){ board.create('point',[r1[j],r2[j]],{fixed:true,face:'v'})};\nvar a1 = board.create('point',[minx+5,miny+5]);\nvar b1 = board.create('point',[minx+7,miny+5]);\nvar html = $(question.display.html);\nfunction updr(a,b){\n var s=0;\n for(var i=0;i<8;i++){\n s=s+Math.pow(r2[i]-a*r1[i]-b,2);}\n s=Numbas.math.niceNumber(Numbas.math.precround(s,2));\n html.find('#rsquared').text(s);}\nvar li=board.create('line',[a1,b1], {straightFirst:false, straightLast:false, fixed: true});\nvar a=0;\nvar b=0;\nfunction dr(p){\n p.on('drag',function(){\n a = Numbas.math.niceNumber((b1.Y()-a1.Y())/(b1.X()-a1.X()));\n b = Numbas.math.niceNumber((a1.Y()*b1.X()-a1.X()*b1.Y())/(b1.X()-a1.X()));\n Numbas.exam.currentQuestion.parts[0].gaps[1].display.studentAnswer(a);\n Numbas.exam.currentQuestion.parts[0].gaps[0].display.studentAnswer(b);\n updr(a,b);\n })};\ndr(a1);\ndr(b1);\n\nreturn div;\n\n\n", "type": "html", "language": "javascript"}, "pstdev": {"parameters": [["l", "list"]], "definition": "sqrt(abs(l)/(abs(l)-1))*stdev(l)", "type": "number", "language": "jme"}, "regfun": {"parameters": [["r1", "list"], ["r2", "list"], ["maxx", "number"], ["maxy", "number"], ["rsquared", "number"], ["sumr", "number"]], "definition": "\nvar div = Numbas.extensions.jsxgraph.makeBoard('400px','400px',\n {boundingBox:[-5,maxy,maxx,-5],\n axis:true,\n showNavigation:false,\n grid:false});\nvar board = div.board; \nvar names = 'ABCDEFGHIJKLMNOP';\nfor (j=0;j<8;j++){ board.create('point',[r1[j],r2[j]],{fixed:true, style:3, strokecolor:\"#0000a0\", name:'\\\\['+names[j]+'\\\\]'})};\nvar regressionPolynomial = JXG.Math.Numerics.regressionPolynomial(1, r1, r2);\nvar reg = board.create('functiongraph',[regressionPolynomial],{strokeColor:'black'}); \nfor(var i=0;i<8;i++){board.create(\"segment\",[[r1[i],r2[i]],[r1[i],regressionPolynomial(r1[i])]])};\nvar regExpression = regressionPolynomial.getTerm();\nvar regTeX = Numbas.jme.display.exprToLaTeX(regExpression,['all'],scope);\n\nt = board.create('text',[10,50,\n function(){ return \"\\\\[r(Y) = \" + regTeX +'\\\\]';}\n ],\n {strokeColor:'black',fontSize:18}); \nt1 = board.create('text',[10,45,\n function(){ return \"\\\\[SSE = \" + sumr +'\\\\]';}\n ],\n {strokeColor:'black',fontSize:18}); \nt2 = board.create('text',[10,40,\n function(){ return \"\\\\[R^2 = \" + rsquared +'\\\\]';}\n ],\n {strokeColor:'black',fontSize:18}); \nreturn div;\n\n", "type": "html", "language": "javascript"}}, "variablesTest": {"condition": "", "maxRuns": 100}, "question_groups": [{"name": "", "pickQuestions": 0, "pickingStrategy": "all-ordered", "questions": []}], "type": "question", "contributors": [{"name": "Elias Jakobus Willemse", "profile_url": "https://numbas.mathcentre.ac.uk/accounts/profile/846/"}, {"name": "Xiaodan Leng", "profile_url": "https://numbas.mathcentre.ac.uk/accounts/profile/2146/"}]}]}], "contributors": [{"name": "Elias Jakobus Willemse", "profile_url": "https://numbas.mathcentre.ac.uk/accounts/profile/846/"}, {"name": "Xiaodan Leng", "profile_url": "https://numbas.mathcentre.ac.uk/accounts/profile/2146/"}]}