// Numbas version: finer_feedback_settings {"name": "Linear Regression-SES", "extensions": ["stats", "jsxgraph"], "custom_part_types": [], "resources": [], "navigation": {"allowregen": true, "showfrontpage": false, "preventleave": false, "typeendtoleave": false}, "question_groups": [{"pickingStrategy": "all-ordered", "questions": [{"variable_groups": [], "variables": {"tol": {"group": "Ungrouped variables", "templateType": "anything", "description": "", "definition": "0.1", "name": "tol"}, "tol2": {"group": "Ungrouped variables", "templateType": "anything", "description": "", "definition": "1", "name": "tol2"}, "r2": {"group": "Ungrouped variables", "templateType": "anything", "description": "", "definition": "map(round(a1+b1*x+random(-9..9)),x,r1)", "name": "r2"}, "tcorr": {"group": "Ungrouped variables", "templateType": "anything", "description": "", "definition": "spxy/sqrt(ss[0]*ss[1])", "name": "tcorr"}, "sxy": {"group": "Ungrouped variables", "templateType": "anything", "description": "", "definition": "sum(map(r1[x]*r2[x],x,0..n-1))", "name": "sxy"}, "ch": {"group": "Ungrouped variables", "templateType": "anything", "description": "", "definition": "random(0..11)", "name": "ch"}, "corr": {"group": "Ungrouped variables", "templateType": "anything", "description": "", "definition": "precround(tcorr,2)", "name": "corr"}, "ja": {"group": "Ungrouped variables", "templateType": "anything", "description": "", "definition": "precround(1/n*(t[1]-spxy/ss[0]*t[0]),3)", "name": "ja"}, "r1": {"group": "Ungrouped variables", "templateType": "anything", "description": "", "definition": "[random(0..6),random(1..7),random(4..10),random(7..13),random(12..18),random(4..20),random(16..22),random(19..25),random(17..23),random(13..19),random(8..14),random(3..9)]", "name": "r1"}, "a1": {"group": "Ungrouped variables", "templateType": "anything", "description": "", "definition": "random(10..20)", "name": "a1"}, "sumr": {"group": "Ungrouped variables", "templateType": "anything", "description": "", "definition": "precround(sum(map(res[x]^2,x,0..n-1)),3)", "name": "sumr"}, "res": {"group": "Ungrouped variables", "templateType": "anything", "description": "", "definition": "map(precround(r2[x]-(a+b*r1[x]),2),x,0..n-1)", "name": "res"}, "prediction": {"group": "Ungrouped variables", "templateType": "anything", "description": "", "definition": "round(a+b*thisval)", "name": "prediction"}, "tsqovern": {"group": "Ungrouped variables", "templateType": "anything", "description": "", "definition": "[t[0]^2/n,t[1]^2/n]", "name": "tsqovern"}, "a": {"group": "Ungrouped variables", "templateType": "anything", "description": "", "definition": "precround(1/n*(t[1]-spxy/ss[0]*t[0]),3)", "name": "a"}, "tol1": {"group": "Ungrouped variables", "templateType": "anything", "description": "", "definition": "0.01", "name": "tol1"}, "owner": {"group": "Ungrouped variables", "templateType": "anything", "description": "", "definition": "random(\"Kevin\",\"Mary\",\"Bill\",\"Doreen\",\"Peter\",\"Helen\",\"Michael\",\"Samantha\")", "name": "owner"}, "thisval": {"group": "Ungrouped variables", "templateType": "anything", "description": "", "definition": "random(15..22)", "name": "thisval"}, "ls": {"group": "Ungrouped variables", "templateType": "anything", "description": "", "definition": "precround(a+b*sc,2)", "name": "ls"}, "jb": {"group": "Ungrouped variables", "templateType": "anything", "description": "", "definition": "precround(spxy/ss[0],3)", "name": "jb"}, "n": {"group": "Ungrouped variables", "templateType": "anything", "description": "", "definition": "12", "name": "n"}, "ss": {"group": "Ungrouped variables", "templateType": "anything", "description": "", "definition": "[ssq[0]-t[0]^2/n,ssq[1]-t[1]^2/n]", "name": "ss"}, "ssq": {"group": "Ungrouped variables", "templateType": "anything", "description": "", "definition": "[sum(map(x^2,x,r1)),sum(map(x^2,x,r2))]", "name": "ssq"}, "spxy": {"group": "Ungrouped variables", "templateType": "anything", "description": "", "definition": "sxy-t[0]*t[1]/n", "name": "spxy"}, "beverage": {"group": "Ungrouped variables", "templateType": "anything", "description": "", "definition": "random(\"home-brewed beer\",\"home-brewed lager\",\"specially-brewed beer\",\"super-strength lager\",\"cold-filtered lager\",\"ice-filtered cider\",\"cherry cider\")", "name": "beverage"}, "b": {"group": "Ungrouped variables", "templateType": "anything", "description": "", "definition": "precround(spxy/ss[0],3)", "name": "b"}, "pub": {"group": "Ungrouped variables", "templateType": "anything", "description": "", "definition": "random(\"Black Bull Inn\",\"County Inn\",\"Dog and Duck Pub\",\"Slug and Lettuce Pub\", \"Cross Keys Pub\",\"Newcastle Arms Pub\",\"Red Lion Pub\")", "name": "pub"}, "sc": {"group": "Ungrouped variables", "templateType": "anything", "description": "", "definition": "r1[ch]", "name": "sc"}, "b1": {"group": "Ungrouped variables", "templateType": "anything", "description": "", "definition": "random(0.25..0.45#0.05)", "name": "b1"}, "obj": {"group": "Ungrouped variables", "templateType": "anything", "description": "", "definition": "['Jan','Feb','March','April','May','June','July','August','Sept','Oct','Nov','Dec']", "name": "obj"}, "t": {"group": "Ungrouped variables", "templateType": "anything", "description": "", "definition": "[sum(r1),sum(r2)]", "name": "t"}, "rsquared": {"group": "Ungrouped variables", "templateType": "anything", "description": "", "definition": "precround(spxy^2/(ss[0]*ss[1]),3)", "name": "rsquared"}}, "tags": [], "advice": "

{regfun(r1,r2,max(r1)+10,max(r2)+10,rsquared,sumr)}

", "ungrouped_variables": ["ch", "prediction", "b1", "owner", "sxy", "res", "spxy", "ls", "tol", "tcorr", "tsqovern", "ssq", "sumr", "thisval", "a1", "pub", "corr", "a", "b", "obj", "r1", "r2", "ss", "tol1", "n", "beverage", "t", "sc", "rsquared", "ja", "jb", "tol2"], "metadata": {"licence": "Creative Commons Attribution 4.0 International", "description": "

Find a regression equation given 12 months data on temperature and sales of a drink. Includes an interactive diagram for experimenting with fitting a regression line.

\n

rebelmaths

"}, "name": "Linear Regression-SES", "parts": [{"variableReplacements": [], "scripts": {}, "sortAnswers": false, "gaps": [{"type": "numberentry", "correctAnswerStyle": "plain", "variableReplacements": [], "scripts": {}, "minValue": "ja-tol", "correctAnswerFraction": false, "extendBaseMarkingAlgorithm": true, "mustBeReduced": false, "maxValue": "ja+tol", "unitTests": [], "showFeedbackIcon": true, "variableReplacementStrategy": "originalfirst", "notationStyles": ["plain", "en", "si-en"], "allowFractions": false, "showCorrectAnswer": true, "customMarkingAlgorithm": "", "marks": 1, "mustBeReducedPC": 0}, {"type": "numberentry", "correctAnswerStyle": "plain", "variableReplacements": [], "scripts": {}, "minValue": "jb-tol1", "correctAnswerFraction": false, "extendBaseMarkingAlgorithm": true, "mustBeReduced": false, "maxValue": "jb+tol1", "unitTests": [], "showFeedbackIcon": true, "variableReplacementStrategy": "originalfirst", "notationStyles": ["plain", "en", "si-en"], "allowFractions": false, "showCorrectAnswer": true, "customMarkingAlgorithm": "", "marks": 1, "mustBeReducedPC": 0}], "type": "gapfill", "extendBaseMarkingAlgorithm": true, "prompt": "

\\[Y = a + b  x.\\] Using the least squares method to find $a$ and $b$ to 5 decimal places, then input them below to 3 decimal places. You will use these approximate values in the rest of the question. 

\n

  $a=\\;$[[0]] $b=\\;$[[1]],     (enter both to 3 decimal places).

", "stepsPenalty": 0, "unitTests": [], "showFeedbackIcon": true, "variableReplacementStrategy": "originalfirst", "showCorrectAnswer": true, "customMarkingAlgorithm": "", "marks": 0, "steps": [{"unitTests": [], "showCorrectAnswer": true, "showFeedbackIcon": true, "scripts": {}, "variableReplacementStrategy": "originalfirst", "prompt": "

To find $a$ and $b$ you first find  $\\displaystyle b = \\frac{n\\Sigma xy-\\Sigma x \\Sigma y}{n\\Sigma x^2 -(\\Sigma x)^2}$

\n

Then $\\displaystyle a = \\frac{\\Sigma y - b \\Sigma x}{n}$

\n

Note that $n$ is the number of data points. In this case $\\var{n}$

\n

Now go back and fill in the values for $a$ and $b$.

\n

 

", "variableReplacements": [], "type": "information", "customMarkingAlgorithm": "", "marks": 0, "extendBaseMarkingAlgorithm": true}]}, {"variableReplacements": [], "scripts": {}, "sortAnswers": false, "gaps": [{"type": "numberentry", "correctAnswerStyle": "plain", "variableReplacements": [], "scripts": {}, "minValue": "b-tol2", "correctAnswerFraction": false, "extendBaseMarkingAlgorithm": true, "mustBeReduced": false, "maxValue": "b+tol2", "unitTests": [], "showFeedbackIcon": true, "variableReplacementStrategy": "originalfirst", "notationStyles": ["plain", "en", "si-en"], "allowFractions": false, "showCorrectAnswer": true, "customMarkingAlgorithm": "", "marks": 1, "mustBeReducedPC": 0}, {"type": "numberentry", "correctAnswerStyle": "plain", "variableReplacements": [], "scripts": {}, "minValue": "a-tol", "correctAnswerFraction": false, "extendBaseMarkingAlgorithm": true, "mustBeReduced": false, "maxValue": "a+tol", "unitTests": [], "showFeedbackIcon": true, "variableReplacementStrategy": "originalfirst", "notationStyles": ["plain", "en", "si-en"], "allowFractions": false, "showCorrectAnswer": true, "customMarkingAlgorithm": "", "marks": 1, "mustBeReducedPC": 0}], "type": "gapfill", "extendBaseMarkingAlgorithm": true, "prompt": "

A scatter diagram for the data is plotted below.

\n

Using the equation of the least squares regression line that you found in part (a) plot the line on the diagram below. Find two points on line from the equation and then drag the points A and B to these points. 

\n

\\[Y = a + b x.\\] 

\n

The equation of the line you ploted is 

\n

$Y=$[[1]]$+$[[0]]$x$

\n

\n

{regressline(r1,r2,min(r1)-10,max(r1)+10,min(r2)-10,max(r2)+10)}

\n

SSE=

\n

SSE for fitted regression line: {sumr}

\n

The SSE is displayed which gives an indication of the fit. The nearer the SSE for fitted regression line is the SSE the better.

\n

", "unitTests": [], "showFeedbackIcon": true, "variableReplacementStrategy": "originalfirst", "showCorrectAnswer": true, "customMarkingAlgorithm": "", "marks": 0}, {"variableReplacements": [], "scripts": {}, "sortAnswers": false, "gaps": [{"type": "numberentry", "correctAnswerStyle": "plain", "variableReplacements": [], "scripts": {}, "minValue": "corr-tol1", "correctAnswerFraction": false, "extendBaseMarkingAlgorithm": true, "mustBeReduced": false, "maxValue": "corr+tol1", "unitTests": [], "showFeedbackIcon": true, "variableReplacementStrategy": "originalfirst", "notationStyles": ["plain", "en", "si-en"], "allowFractions": false, "showCorrectAnswer": true, "customMarkingAlgorithm": "", "marks": 1, "mustBeReducedPC": 0}], "type": "gapfill", "extendBaseMarkingAlgorithm": true, "prompt": "

Calculate the coefficient of correlation  $r$ for these data:

\n

$r=\\;$[[0]] (enter to 2 decimal places).

", "stepsPenalty": 0, "unitTests": [], "showFeedbackIcon": true, "variableReplacementStrategy": "originalfirst", "showCorrectAnswer": true, "customMarkingAlgorithm": "", "marks": 0, "steps": [{"unitTests": [], "showCorrectAnswer": true, "showFeedbackIcon": true, "scripts": {}, "variableReplacementStrategy": "originalfirst", "prompt": "

\\[r=\\frac{n\\Sigma xy -\\Sigma x \\Sigma y}{\\sqrt{n\\Sigma x^2-(\\Sigma x)^2}\\sqrt{n\\Sigma y^2-(\\Sigma y)^2}}\\]

", "variableReplacements": [], "type": "information", "customMarkingAlgorithm": "", "marks": 0, "extendBaseMarkingAlgorithm": true}]}, {"variableReplacements": [], "scripts": {}, "sortAnswers": false, "gaps": [{"type": "numberentry", "correctAnswerStyle": "plain", "variableReplacements": [], "scripts": {}, "minValue": "prediction-1", "correctAnswerFraction": false, "extendBaseMarkingAlgorithm": true, "mustBeReduced": false, "maxValue": "prediction+1", "unitTests": [], "showFeedbackIcon": true, "variableReplacementStrategy": "originalfirst", "notationStyles": ["plain", "en", "si-en"], "allowFractions": false, "showCorrectAnswer": true, "customMarkingAlgorithm": "", "marks": 1, "mustBeReducedPC": 0}], "type": "gapfill", "extendBaseMarkingAlgorithm": true, "prompt": "

Next month, the average temperature in {owner}'s town is forecast to be  {thisval} Celsius. Use the regression equation $Y = a + b  x$, with the values of $a$ and $b$ that you calculated in part (a), to predict sales of the {beverage} in that month.

\n

What is the predicted value of sales (in hundreds of euros) ?

\n

Use the values of $a$ and $b$ you input above to 3 decinal places.

\n

Enter the predicted sales here:  [[0]] (hundreds of euros to the nearest whole number).

\n

", "unitTests": [], "showFeedbackIcon": true, "variableReplacementStrategy": "originalfirst", "showCorrectAnswer": true, "customMarkingAlgorithm": "", "marks": 0}], "statement": "

{owner} owns the {pub}. {owner} believes that sales of {beverage} in the pub are linked to the average monthly temperature, with higher sales being recorded in months with higher temperatures. To investigate, {owner} records the average monthly temperature in the local town over a period of one year ($X$ degrees Celsius), along with total monthly sales of {beverage} ($Y$ hundred euros). The results are shown in the table below: 

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Month$\\var{obj[0]}$$\\var{obj[1]}$$\\var{obj[2]}$$\\var{obj[3]}$$\\var{obj[4]}$$\\var{obj[5]}$$\\var{obj[6]}$$\\var{obj[7]}$$\\var{obj[8]}$$\\var{obj[9]}$$\\var{obj[10]}$$\\var{obj[11]}$
$X$ (temperature)$\\var{r1[0]}$$\\var{r1[1]}$$\\var{r1[2]}$$\\var{r1[3]}$$\\var{r1[4]}$$\\var{r1[5]}$$\\var{r1[6]}$$\\var{r1[7]}$$\\var{r1[8]}$$\\var{r1[9]}$$\\var{r1[10]}$$\\var{r1[11]}$
$Y$ (sales, €100s)$\\var{r2[0]}$$\\var{r2[1]}$$\\var{r2[2]}$$\\var{r2[3]}$$\\var{r2[4]}$$\\var{r2[5]}$$\\var{r2[6]}$$\\var{r2[7]}$$\\var{r2[8]}$$\\var{r2[9]}$$\\var{r2[10]}$$\\var{r2[11]}$
\n

You are given the following information:

\n\n\n\n\n\n\n\n\n\n\n\n
$X$ $\\sum x=\\;\\var{t[0]}$$\\sum x^2=\\;\\var{ssq[0]}$
$Y$$\\sum y=\\;\\var{t[1]}$$\\sum y^2=\\;\\var{ssq[1]}$
\n

Also you are given $\\sum xy = \\var{sxy}$.

", "extensions": ["jsxgraph", "stats"], "variablesTest": {"condition": "", "maxRuns": 100}, "rulesets": {"std": ["all", "fractionNumbers", "!collectNumbers", "!noLeadingMinus"]}, "preamble": {"css": "", "js": ""}, "functions": {"regfun": {"type": "html", "language": "javascript", "definition": "\n var div = Numbas.extensions.jsxgraph.makeBoard('600px','600px',\n{boundingBox:[-5,maxy,maxx,-5],\n axis:true,\n showNavigation:false,\n grid:true});\n var board = div.board; \nvar l1=board.create('text',[maxx/2,-2,'Temperature']);\nvar l2=board.create('text',[-2,maxy/2,'Sales']);\n var names = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'];\n for (j=0;j<12;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:'blue',name:'Regression Line.',withLabel:true}); \n //for(var i=0;i<12;i++){board.create(\"segment\",[[r1[i],r2[i]],[r1[i],regressionPolynomial(r1[i])]])};\n\nvar regExpression = regressionPolynomial.getTerm();\nvar regTeX = Numbas.jme.display.exprToLaTeX(regExpression,[],scope);\n\nvar t = board.create('text',[1,5,\nfunction(){ return \"\\\\[r(Y) = \" + regExpression +'\\\\]';}\n],\n{strokeColor:'black',fontSize:18}); \nvar t1 = board.create('text',[5,maxy,\nfunction(){ return \"\\\\[SSE = \" + sumr +'\\\\]';}\n],\n{strokeColor:'black',fontSize:18}); \nvar t2 = board.create('text',[20,maxy,\nfunction(){ return \"\\\\[R^2 = \" + rsquared +'\\\\]';}\n],\n{strokeColor:'black',fontSize:18}); \nreturn div;\n \n", "parameters": [["r1", "list"], ["r2", "list"], ["maxx", "number"], ["maxy", "number"], ["rsquared", "number"], ["sumr", "number"]]}, "regressline": {"type": "html", "language": "javascript", "definition": "\n var div = Numbas.extensions.jsxgraph.makeBoard('600px','600px',\n{boundingBox:[-5,maxy,maxx,-5],\n axis:true,\n showNavigation:false,\n grid:false});\n var board = div.board; \nvar l1=board.create('text',[maxx/2,-2,'Temperature']);\nvar l2=board.create('text',[-2,maxy/2,'Sales']);\nvar names = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'];\nfor (j=0;j<12;j++){ board.create('point',[r1[j],r2[j]],{fixed:true, style:3,name:'\\['+names[j]+'\\]'})};\nvar a1 = board.create('point',[minx+5,miny+5],{color:'blue'});\nvar b1 = board.create('point',[minx+7,miny+5],{color:'blue'});\nfunction updr(a,b){\n var s=0;\n for(var i=0;i<12;i++){\ns=s+Math.pow(r2[i]-a*r1[i]-b,2);}\nvar html = $(question.display.html);\ns=Numbas.math.niceNumber(Numbas.math.precround(s,2));\nhtml.find('#rsquared').text(s);}\n var li=board.create('line',[a1,b1], {straightFirst:false, straightLast:false});\n var a=0;\n var b=0;\n function 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[1].gaps[0].display.studentAnswer(a);\n Numbas.exam.currentQuestion.parts[1].gaps[1].display.studentAnswer(b);\n updr(a,b);\n })};\n dr(a1);\n dr(b1);\n \nreturn div;\n\n \n", "parameters": [["r1", "list"], ["r2", "list"], ["minx", "number"], ["maxx", "number"], ["miny", "number"], ["maxy", "number"]]}}, "type": "question", "contributors": [{"name": "Lauren Frances Desoysa", "profile_url": "https://numbas.mathcentre.ac.uk/accounts/profile/2490/"}]}]}], "contributors": [{"name": "Lauren Frances Desoysa", "profile_url": "https://numbas.mathcentre.ac.uk/accounts/profile/2490/"}]}