数据准备
df <- read.table(file = "D:/Documents/R wd/df.csv", header = T, sep = ",", colClasses = c(year = "character", nitrogen = "character", variety = "character", block = "character")) # 数据导入。
df # 查看数据。
## year nitrogen variety block v1 v2 v3 v4 v5
## 1 2020 N1 a 1 1.26 2.14 3.4 4.66 3.25
## 2 2020 N1 a 2 1.20 2.90 4.1 5.30 1.27
## 3 2020 N1 a 3 1.30 3.00 4.3 5.60 2.24
## 4 2020 N1 b 1 1.08 1.72 2.8 3.88 1.00
## 5 2020 N1 b 2 1.05 1.65 2.7 3.75 3.12
## 6 2020 N1 b 3 1.15 1.35 2.5 3.65 4.57
## 7 2020 N2 a 1 1.32 3.78 5.1 6.42 5.85
## 8 2020 N2 a 2 1.28 4.32 5.6 6.88 6.48
## 9 2020 N2 a 3 1.35 3.95 5.3 6.65 7.21
## 10 2020 N2 b 1 1.33 3.47 4.8 6.13 6.56
## 11 2020 N2 b 2 1.28 2.72 4.0 5.28 8.43
## 12 2020 N2 b 3 1.30 3.90 5.2 6.50 7.55
## 13 2021 N1 a 1 1.19 3.61 4.8 5.99 3.11
## 14 2021 N1 a 2 1.21 3.29 4.5 5.71 2.54
## 15 2021 N1 a 3 1.24 3.26 4.5 5.74 1.28
## 16 2021 N1 b 1 1.09 2.71 3.8 4.89 3.24
## 17 2021 N1 b 2 1.28 2.32 3.6 4.88 1.27
## 18 2021 N1 b 3 1.35 1.95 3.3 4.65 1.15
## 19 2021 N2 a 1 1.45 4.35 5.8 7.25 5.74
## 20 2021 N2 a 2 1.40 3.80 5.2 6.60 6.85
## 21 2021 N2 a 3 1.37 4.23 5.6 6.97 7.42
## 22 2021 N2 b 1 1.28 2.72 4.0 5.28 8.20
## 23 2021 N2 b 2 1.15 3.35 4.5 5.65 5.70
## 24 2021 N2 b 3 1.24 3.46 4.7 5.94 6.00
8.2.3 多项式回归
多项式回归,回归函数是回归变量多项式的回归。多项式回归模型是线性回归模型的一种,此时回归函数关于回归系数是线性的。
研究一个因变量与一个或多个自变量间多项式的回归分析方法,称为多项式回归(Polynomial Regression)。如果自变量只有一个时,称为一元多项式回归;如果自变量有多个时,称为多元多项式回归。在一元回归分析中,如果依变量y与自变量x的关系为非线性的,但是又找不到适当的函数曲线来拟合,则可以采用一元多项式回归。
多项式回归的最大优点就是可以通过增加x的高次项对实测点进行逼近,直至满意为止。
1、添加一个二次项(即X2)来提高回归的预测精度。
fit1 <- lm(v4 ~ v3, data = df) # v4和v3的简单线性回归。
fit2 <- lm(v4 ~ v3 + I(v3^2), data = df) # 加入v3的平方项提高拟合精度。
summary(fit2) # 返回二次项拟合结果。从结果看,二次项不显著,表明这个二次项没有提供拟合度,可以从图上看出,二次拟合的直线与简单线性拟合的直线基本快重合了。
##
## Call:
## lm(formula = v4 ~ v3 + I(v3^2), data = df)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.12169 -0.05722 0.01059 0.05442 0.17058
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 1.054053 0.306055 3.444 0.00243 **
## v3 1.014917 0.150637 6.738 1.15e-06 ***
## I(v3^2) 0.006991 0.017936 0.390 0.70062
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.07798 on 21 degrees of freedom
## Multiple R-squared: 0.9946, Adjusted R-squared: 0.9941
## F-statistic: 1938 on 2 and 21 DF, p-value: < 2.2e-16
plot(df$v3, df$v4, xlab = "v3", ylab = "v4") # 绘制两个变量的关系图。
abline(fit1, col = "red")
lines(df$v3, fitted(fit2), col = "blue") # 添加二次项拟合线。
image.png
一般来说,n次多项式生成一个n-1个弯曲的曲线。
2、添加一个三次项(即X3)来提高回归的预测精度。
fit3 <- lm(v4 ~ v3 + I(v3^2) + I(v3^3), data = df) # 加入v3的平方项提高拟合精度。
summary(fit3) # 返回分析结果。
##
## Call:
## lm(formula = v4 ~ v3 + I(v3^2) + I(v3^3), data = df)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.148866 -0.049283 0.009733 0.040493 0.132619
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -1.25819 1.36180 -0.924 0.3665
## v3 2.81293 1.04422 2.694 0.0140 *
## I(v3^2) -0.44010 0.25775 -1.707 0.1032
## I(v3^3) 0.03577 0.02058 1.738 0.0975 .
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.07447 on 20 degrees of freedom
## Multiple R-squared: 0.9953, Adjusted R-squared: 0.9946
## F-statistic: 1417 on 3 and 20 DF, p-value: < 2.2e-16
library(car) # 调用car包。
scatterplot(v4 ~ v3, data = df, pch = 1, xlab = "v3", ylab = "v4") # 绘制三次项拟合线。
abline(fit1, col = "red") # 添加简单线性拟合线。
image.png
参考资料:
- 《R语言实战》(中文版),人民邮电出版社,2013.
- 多项式回归-百度,https://baike.baidu.com/item/%E5%A4%9A%E9%A1%B9%E5%BC%8F%E5%9B%9E%E5%BD%92