Search code examples
rdrawingplotcurve-fitting

Restrict fitted regression line (abline) to range of data used in model


Is it possible to draw an abline of a fit only in a certain range of x-values?

I have a dataset with a linear fit of a subset of that dataset:

# The dataset:
daten <- data.frame(x = c(0:6), y = c(0.3, 0.1, 0.9, 3.1, 5, 4.9, 6.2))

# make a linear fit for the datapoints 3, 4, 5
daten_fit <- lm(formula = y~x, data = daten, subset = 3:5)

When I plot the data and draw a regression line:

plot (y ~ x, data = daten)
abline(reg = daten_fit)

The line is drawn for the full range of x-values in the original data. But, I want to draw the regression line only for the subset of data that was used for curve fitting. There were 2 ideas that came to my mind:

  1. Draw a second line that is thicker, but is only shown in the range 3:5. I checked the parameters for abline, lines and segments but I could not find anything

  2. Add small ticks to the respective positions, that are perpendicular to the abline. I have now idea how I could do this. this would be the nicer way of course.

Do you have any idea for a solution?


Solution

  • One way would be to use colours to distinguish between points that are fitted and those that aren't:

    daten_fit <- lm(formula = y~x, data = daten[3:5, ])
    
    plot(y ~ x, data = daten)
    points(y ~ x, data = daten[3:5, ], col="red")
    abline(reg=daten_fit, col="red")
    

    enter image description here

    The second way is to plot the tick marks on the x-axis. These ticks are called rugs, and can be drawn using the rug function. But first you have to calculate the range:

    #points(y ~ x, data = daten[3:5, ], col="red")
    abline(reg=daten_fit, col="red")
    rug(range(daten[3:5, 1]), lwd=3, col="red")
    

    enter image description here