最近工作用到了一些回归分析方面的知识,整理一下,放在这里备忘。主要是简单的多元线性回归和分位数回归两种,基本上都只需要几个R语言命令就能解决了。
1.多元线性回归
上面是我这次分析所用的数据,基本上是很完美的线性关系,下面就用参考多个博客的命令来进行一下多元线性回归。
X <- read.csv("mlr5.csv")
lm.sol=lm(y~x1+x2+x3+x4+x5+x6+x7+x8+x9,data=X)
summary(lm.sol)
Call:
lm(formula = y ~ x1 + x2 + x3 + x4 + x5 + x6 + x7 + x8 + x9,
data = X)
Residuals:
ALL 10 residuals are 0: no residual degrees of freedom!
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -265.18 NA NA NA
x1 345.07 NA NA NA
x2 -655.88 NA NA NA
x3 46.38 NA NA NA
x4 -36.65 NA NA NA
x5 186.83 NA NA NA
x6 40.89 NA NA NA
x7 -233.92 NA NA NA
x8 540.26 NA NA NA
x9 152.05 NA NA NA
Residual standard error: NaN on 0 degrees of freedom
Multiple R-squared: 1, Adjusted R-squared: NaN
F-statistic: NaN on 9 and 0 DF, p-value: NA
predict(lm.sol)
1 2 3 4 5 6 7 8 9 10
36 36 45 36 31 39 50 36 30 28
这样,一个无比完美的线性回归方程就有了,各个参数就在第一列了。十个预测值完全没有差别。。。如果每个回归都是这样就好了。
2.分位数回归
还是同样一批数据,不同的包,上面的命令用的是R语言自带有lm(),这里用quantreg这个包。
library(quantreg)
X <- read.csv("mlr5.csv")
fit1 <- rq(y~x1+x2+x3+x4+x5+x6+x7+x8+x9, data = X,tau=.1)
fit2 <- rq(y~x1+x2+x3+x4+x5+x6+x7+x8+x9, data = X,tau=.50)
fit3 <- rq(y~x1+x2+x3+x4+x5+x6+x7+x8+x9, data = X,tau=.9)
coef(fit3) #得到了各个参数
(Intercept) x1 x2 x3 x4 x5 x6 x7
83.391861 -41.040375 -25.241735 -5.691673 -33.080284 8.233973 -33.918471 14.092511
x8 x9
92.153919 -7.844839
比较无语的是没有R-square这个值,应该是这个回归不需要这个值。画个图,看下预测值和真实值的情况:
plot(X$y,fitted(fit2),xlim=c(22,45), ylim =c(22,45))
lmfit <- lm(X$y~fitted(fit1))
abline(lmfit)
lmfit2 <- lm(X$y~fitted(fit2))
abline(lmfit2)
lmfit3 <- lm(X$y~fitted(fit3))
abline(lmfit3)
最简单的图,暂时就不管美观情况了,直接上个丑图: