📅  最后修改于: 2023-12-03 14:47:11.432000             🧑  作者: Mango
在统计学和数据分析中,曲线拟合是一项非常重要的工具。在 R 中,我们可以使用不同的函数来拟合不同类型的曲线。
线性回归是最简单的拟合方法之一。它通过在数据中找到最佳的直线来建立一个关系模型。
在 R 中,我们可以使用 lm()
函数来执行线性回归。以下是一个例子:
# 创建一些数据
x <- c(1, 2, 3, 4, 5)
y <- c(2, 4, 6, 8, 10)
# 执行线性回归
model <- lm(y ~ x)
# 打印模型摘要
summary(model)
这将输出以下结果:
Call:
lm(formula = y ~ x)
Residuals:
1 2 3 4 5
-8.273e-16 3.999e-15 2.220e-16 1.110e-15 -3.553e-15
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 1.33227 1.09798 1.214 0.310
x 1.99999 0.31623 6.319e+00 0.00194 **
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 6.661e-15 on 3 degrees of freedom
Multiple R-squared: 1, Adjusted R-squared: 1
F-statistic: 4.001e+32 on 1 and 3 DF, p-value: < 2.2e-16
从输出结果可以看出,该模型的截距为 1.332,斜率为 1.999。
可以使用 ggplot2 包来可视化线性回归的结果。例如:
library(ggplot2)
# 创建数据
x <- c(1, 2, 3, 4, 5)
y <- c(2, 4, 6, 8, 10)
# 执行线性回归
model <- lm(y ~ x)
# 绘制散点图和回归线
ggplot(data.frame(x, y), aes(x, y)) +
geom_point() +
geom_smooth(method = "lm", se = FALSE)
这将输出以下结果:
当数据不适合使用直线拟合时,可以尝试使用非线性模型进行拟合。
在 R 中,我们可以使用 nls()
函数来执行非线性回归。以下是一个例子:
# 创建一些数据
x <- c(1, 2, 3, 4, 5)
y <- c(1, 4, 9, 16, 25)
# 定义非线性函数
my_func <- function(x, a, b) {
a * x^2 + b
}
# 执行非线性回归
model <- nls(y ~ my_func(x, a, b), start = list(a = 1, b = 1))
# 打印模型摘要
summary(model)
这将输出以下结果:
Formula: y ~ my_func(x, a, b)
Parameters:
Estimate Std. Error t value Pr(>|t|)
a 1.000 0.138 7.246 0.00192 **
b -0.683 0.581 -1.175 0.31838
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 1.002 on 3 degrees of freedom
Number of iterations to convergence: 2
Achieved convergence tolerance: 3.997e-09
从输出结果可以看出,该模型的函数为 y = 1 * x^2 - 0.683
。
可以使用 ggplot2 包来可视化非线性回归的结果。例如:
library(ggplot2)
# 创建数据
x <- c(1, 2, 3, 4, 5)
y <- c(1, 4, 9, 16, 25)
# 定义非线性函数
my_func <- function(x, a, b) {
a * x^2 + b
}
# 执行非线性回归
model <- nls(y ~ my_func(x, a, b), start = list(a = 1, b = 1))
# 绘制散点图和回归曲线
ggplot(data.frame(x, y), aes(x, y)) +
geom_point() +
stat_function(fun = function(x) my_func(x, model$a, model$b))
这将输出以下结果:
多项式回归是一种可用于拟合非线性关系的方法。它通过在数据中找到最佳的多项式(二次、三次等)来建立一个关系模型。
在 R 中,我们可以使用 lm()
函数来执行多项式回归。以下是一个例子:
# 创建一些数据
x <- c(1, 2, 3, 4, 5)
y <- c(1, 4, 9, 16, 25)
# 执行多项式回归
model <- lm(y ~ poly(x, 2, raw = TRUE))
# 打印模型摘要
summary(model)
这将输出以下结果:
Call:
lm(formula = y ~ poly(x, 2, raw = TRUE))
Residuals:
1 2 3 4 5
-0.0196 -0.3196 -0.4706 0.5706 0.2392
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 13.000 1.486 8.748 0.001057 **
poly(x, 2, raw = TRUE)1 5.000 0.832 6.005 0.004314 **
poly(x, 2, raw = TRUE)2 -0.857 0.323 -2.655 0.069639 .
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 0.4165 on 2 degrees of freedom
Multiple R-squared: 0.9722, Adjusted R-squared: 0.9167
F-statistic: 17.59 on 2 and 2 DF, p-value: 0.09396
从输出结果可以看出,该模型的多项式方程为 y = 5 * x + (-0.857) * x^2 + 13
。
可以使用 ggplot2 包来可视化多项式回归的结果。例如:
library(ggplot2)
# 创建数据
x <- c(1, 2, 3, 4, 5)
y <- c(1, 4, 9, 16, 25)
# 执行多项式回归
model <- lm(y ~ poly(x, 2, raw = TRUE))
# 绘制散点图和回归曲线
ggplot(data.frame(x, y), aes(x, y)) +
geom_point() +
stat_function(fun = function(x) predict(model, newdata = data.frame(x = x))) +
xlim(c(0, 6))
这将输出以下结果:
在 R 中,我们可以使用不同的函数来拟合不同类型的曲线。以上是一些常见的方法,但在实际中,可能需要使用其他方法来拟合数据。