x <- c(10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120)
y <- c(10, 18, 25, 29, 30, 28, 25, 22, 18, 15, 11, 8)
df <- data.frame(x,y)
plot(y ~ x, df)
model <- lm(y ~ x, df)
You're trying to fit a linear function to parabolic data. As such, you won't end up with a pretty line of best fit.
Something like this might work:
model <- lm(y ~ I(x^2), df)
plot(y ~ x, df)
lines(df$x, predict(model), col = 'blue')
Although that doesn't really fit well, we could try 3rd- or 4th-order polynomial models:
model <- lm(y ~ I(x^3), df)
lines(df$x, predict(model), col = 'red')
model <- lm(y ~ I(x^4), df)
lines(df$x, predict(model), col = 'green')
Although those don't fit very well, either. Look to Zheyuan's answer for a better-fitting function.