#set document(title: "14.2 Linear Fit Demo", author: "OpenStax") #set page(width: 8.5in, height: auto, margin: 1in) #import "@preview/cetz:0.5.2" #set text(font: ("STIX Two Text", "Libertinus Serif", "New Computer Modern"), size: 10.5pt, lang: "en") #show math.equation: set text(font: ("STIX Two Math", "New Computer Modern Math")) #set par(justify: true, leading: 0.62em, spacing: 0.9em) #set enum(spacing: 1.1em) // room between list items so tall inline fractions don't collide #set list(spacing: 1.1em) #set table(stroke: 0.5pt + rgb("#c7ccd3")) #let BLUE = rgb("#183B6F") // brand navy — section bars + example/solution labels (white on navy 11.09:1) #let ORANGE = rgb("#A94509") // brand primary-700 — AA-safe deep orange for TEXT (5.93:1 on white; raw brand #F37021 is 2.94:1 and must never carry text) #let RED = rgb("#DC2626") // brand error-600 #let GREEN = rgb("#059669") // brand success-600 (decoration only; small green text uses green-text #007942) #show heading.where(level: 1): it => block(width: 100%, above: 0pt, below: 16pt, fill: gradient.linear(BLUE, rgb("#2C5AA0")), inset: (x: 14pt, y: 12pt), radius: 3pt, text(fill: white, weight: "bold", size: 19pt, it.body)) #show heading.where(level: 2): it => block(width: 100%, above: 18pt, below: 10pt, fill: BLUE, inset: (x: 10pt, y: 6pt), radius: 2pt, text(fill: white, weight: "bold", size: 12pt, it.body)) #show heading.where(level: 3): it => text(fill: ORANGE, weight: "bold", size: 12.5pt, it.body) #show heading.where(level: 4): it => text(fill: BLUE, weight: "bold", size: 10.5pt, it.body) #let examplebox(label, title, body) = block(width: 100%, breakable: true, fill: rgb("#EFF1F5"), stroke: 0.5pt + rgb("#CFDDF0"), radius: 4pt, inset: 10pt, above: 12pt, below: 12pt)[ #block(below: 6pt)[#box(fill: BLUE, inset: (x: 6pt, y: 2pt), radius: 2pt, text(fill: white, weight: "bold", size: 8.5pt, label)) #h(0.4em) #strong[#title]] #body] // rail = decorative left rule (raw brand token); labelcolor = AA-safe label text shade #let notebox(label, rail, labelcolor, tint, body) = block(width: 100%, breakable: true, fill: tint, stroke: (left: 3pt + rail), inset: (left: 10pt, rest: 8pt), radius: (right: 4pt), above: 11pt, below: 11pt)[ #text(fill: labelcolor, weight: "bold", size: 7.5pt, tracking: 0.5pt)[#upper(label)] #linebreak() #body] #let solutionbox(body) = block(above: 4pt, below: 8pt)[ #text(fill: BLUE, weight: "bold", size: 8.5pt)[Solution] #linebreak() #body] #let figph(msg) = block(width: 100%, height: 60pt, fill: rgb("#f6f7f9"), stroke: (paint: rgb("#c7ccd3"), dash: "dashed"), radius: 4pt, inset: 10pt)[ #align(center + horizon, text(fill: rgb("#889"), style: "italic", size: 9pt, msg))] // Standardize inlined figure sizes: measure the natural CeTZ canvas, then scale to a // consistent envelope (aspect-aware; see build_typst.py FIG_* constants). Unlike the // print preamble, dimensions are FLOORED: in an editor a user can trim a figure to a // degenerate 1-D shape (a bare line), and w/h or tw/w would then divide by zero. #let _STD_W = 3.5 #let _WIDE_W = 5.6 #let _MAX_H = 3.4 #let _ASPECT_WIDE = 2.2 #let _UPSCALE_MAX = 1.15 #let stdfig(body) = context { let m = measure(body) let w = calc.max(m.width / 1in, 0.01) let h = calc.max(m.height / 1in, 0.01) let tw = if w / h > _ASPECT_WIDE { _WIDE_W } else { _STD_W } let s = calc.min(tw / w, _MAX_H / h, _UPSCALE_MAX) align(center, box(scale(x: s * 100%, y: s * 100%, reflow: true, body))) } #show figure: set block(breakable: false) #set figure(gap: 8pt) #show figure.caption: set text(size: 8.5pt, fill: rgb("#555")) == 14.2#h(0.6em)Linear Fit Demo This section is an interactive demonstration. The live simulation runs on the original site: #link("https://onlinestatbook.com/2/regression/linear_fit_demo.html")[open the demonstration at onlinestatbook.com]. Learning Objectives + Be able to approximate a regression line by eye. + State the relationship between MSE and fit. #strong[Instructions] #linebreak() This demonstration allows you to explore fitting data with linear functions. When the demonstration begins, five points are plotted in the graph. The X axis ranges from 1 to 5 and the Y axis ranges from 0 to 5. The five points are plotted in different colors; next to each point is the Y value of that point. For example, the red point has the value 1.00 next to it. A vertical black line is drawn with the Y value of 3.0; this line consists of the predicted values for Y. (It is clear that this line does not contain the best predictions.) This line is called the "regression line." The equation for the regression line is Y' = 0X +3 where Y' is the predicted value for Y. Since the slope is 0, the same prediction of 3 is made for all values of X. #linebreak() #linebreak() The error of prediction for each point is represented by a vertical line between the point and the regression line. For the point with a value of 1 on the X axis, the line goes from the point (1,1) to the point (1,3) on the line. The length of the vertical line is 2. This means the error of prediction is 2 and the squared error of prediction is 2 x 2 = 4. This error is depicted graphically by the graph on the right. The height of the red square is the error of prediction and the area of the red square is the squared error of prediction. #linebreak() #linebreak() The errors associated with the other points are plotted in a similar way. Therefore the height of the stacked squares is the sum of the errors of prediction (the lengths of the lines are used, so all errors are positive) and the area of all squares is the total sum of squared errors. #linebreak() #linebreak() This demonstration allows you to change the regression line and examine the effects on the errors of prediction. If you click and drag an end of the line, the slope of the line will change. If you click and drag the middle of the line, the intercept will change. As the line changes, the errors and squared errors are updated automatically. #linebreak() #linebreak() You can also change the values of the points by clicking on them and dragging. You can only change the Y values. #linebreak() #linebreak() You can get a good feeling for the regression line and error by changing the points and the slope and intercept of the line and observing the results. #linebreak() #linebreak() To see the line that minimizes the squared errors of prediction click the "OK" button. #linebreak() #linebreak() 1. Notice that the total deviation is 6. Compute this by summing the 5 separate abslote deviations (|1-3| + |2-3| etc.) #linebreak() 2. The total area is 10. Compute this by summing the squared deviations. #linebreak() 3. Click middle of the black line and drag it so that it is at 4. Has the error increased or decreased? #linebreak() 4. Click the left end of the line and drag it until the intercept is about 1. How has this affected the error? #linebreak() 5. Drag the line further so it has an intercept of about 0. Then drag the upper portion of the line so that it goest theourh the pont at 5.0. Within rounding error, the error should be 0 and the equation for the line should be Y' = 1X + 0. #linebreak() 6.Click on the green point at 3.0 and drag it down so that its value is about 2.0. Notice the error now is all based on this one pont. #linebreak() 7. Adjust the line to see if you can make the absolute error any smaller. #linebreak() 8. Adjust the line to see of you can make the squared error (area) as small as you can and note equation of the line and the size of the area. Press the OK button to see the smallest possible area. How does the line compare with the one you chose? #linebreak() 9. Move all the points around and then try again to fine the line that makes the area smallest. Compare the area to the line that gives the smallest area. #linebreak() 10. After you have found the line that gives the smallest area (smallest squared error) see if you can change the line so that the absolute error is lower than for this line that gives the smallest area. #strong[Illustrated Instructions] #linebreak() Video Demo #linebreak() The demonstration starts by dragging each of the 5 points to different locations on the Y axis. Notice how these changes influence the total deviation and area. The video continues by repositioning the regression line by draggin either end as well as the middle. Finaly the regression line that minimizes the squared errors is found by clicking the "OK" button. #strong[Video Demo] There are no questions for this demonstration. You can drag the points to different positions on the Y axis and drag the regression from either end as well as the middle. Clicking the "OK" button finds the line that minimizes the squared of the points. #link("https://onlinestatbook.com/movies/regression/linear_fit_demo.mp4")[Watch the video demonstration (onlinestatbook.com)]