在R中绘制回归线
plot regression line in R
我想在R中绘制一条简单的回归线。我输入了数据,但回归线似乎不对。有人可以帮忙吗?
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)
abline(lm(y ~ x))
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)
您正在尝试将线性函数拟合到抛物线数据。因此,您不会得到最合适的漂亮系列。
类似这样的方法可能有效:
model <- lm(y ~ I(x^2), df)
plot(y ~ x, df)
lines(df$x, predict(model), col = 'blue')
虽然这不太合适,但我们可以尝试三阶或四阶多项式模型:
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')
尽管这些也不太合适。看看哲园的答案,以获得更好的拟合函数。
哦,@GBR24 有很好的格式化数据。然后我会根据我的评论详细说明。
fit <- lm(y ~ poly(x, 3)) ## polynomial of degree 3
plot(x, y) ## scatter plot (colour: black)
x0 <- seq(min(x), max(x), length = 20) ## prediction grid
y0 <- predict.lm(fit, newdata = list(x = x0)) ## predicted values
lines(x0, y0, col = 2) ## add regression curve (colour: red)
- 正如我上面所说,原始问题中的图表切换了 x 轴和 y 轴
- 线性模型的答案最适合这个问题,因为这就是所问的问题。
- 其他答案涉及进一步的建模选择,例如上面的最佳立方模型或下面的最佳二次模型。这只是结合了上面的推理。
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)
summary(lm(y~x))
plot(x,y)
abline(lm(y ~ x)) # black answer 1
########################
fit <- lm(y ~ poly(x, 2)) ## polynomial of degree 2
y0 <- predict.lm(fit) ## predicted values
lines(x, y0, col = 2) ## predicted poly red color
#y1 <- predict(fit, interval = "prediction")
[![#lines(x, y1\[,1\], col = 3) same as y1 green color # answer 2
#########################
w <- 1 + (x-1)^2 # with weights
wfit <- lm(y ~ poly(x,2), weights = w)
y2 <- predict(wfit, interval = "prediction")
lines(x, y2\[,1\], col = 4) # blue # answer 3
我想在R中绘制一条简单的回归线。我输入了数据,但回归线似乎不对。有人可以帮忙吗?
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)
abline(lm(y ~ x))
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)
您正在尝试将线性函数拟合到抛物线数据。因此,您不会得到最合适的漂亮系列。
类似这样的方法可能有效:
model <- lm(y ~ I(x^2), df)
plot(y ~ x, df)
lines(df$x, predict(model), col = 'blue')
虽然这不太合适,但我们可以尝试三阶或四阶多项式模型:
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')
尽管这些也不太合适。看看哲园的答案,以获得更好的拟合函数。
哦,@GBR24 有很好的格式化数据。然后我会根据我的评论详细说明。
fit <- lm(y ~ poly(x, 3)) ## polynomial of degree 3
plot(x, y) ## scatter plot (colour: black)
x0 <- seq(min(x), max(x), length = 20) ## prediction grid
y0 <- predict.lm(fit, newdata = list(x = x0)) ## predicted values
lines(x0, y0, col = 2) ## add regression curve (colour: red)
- 正如我上面所说,原始问题中的图表切换了 x 轴和 y 轴
- 线性模型的答案最适合这个问题,因为这就是所问的问题。
- 其他答案涉及进一步的建模选择,例如上面的最佳立方模型或下面的最佳二次模型。这只是结合了上面的推理。
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)
summary(lm(y~x))
plot(x,y)
abline(lm(y ~ x)) # black answer 1
########################
fit <- lm(y ~ poly(x, 2)) ## polynomial of degree 2
y0 <- predict.lm(fit) ## predicted values
lines(x, y0, col = 2) ## predicted poly red color
#y1 <- predict(fit, interval = "prediction")
[![#lines(x, y1\[,1\], col = 3) same as y1 green color # answer 2
#########################
w <- 1 + (x-1)^2 # with weights
wfit <- lm(y ~ poly(x,2), weights = w)
y2 <- predict(wfit, interval = "prediction")
lines(x, y2\[,1\], col = 4) # blue # answer 3