一元回归
我们使用R中自带的数据集trees。其中包含了Volume(体积)、Girth(树围)、Height(树高)这三个变量。我们需要看的是体积和树转的关系。
查看数据集:
> head(trees) Girth Height Volume 1 8.3 70 10.3 2 8.6 65 10.3 3 8.8 63 10.2 4 10.5 72 16.4 5 10.7 81 18.8 6 10.8 83 19.7
首先使用plot,看一下这两个变量的分布情况
plot(Volume~Girth,data=trees,pch=16,col='red')
model=lm(Volume~Girth,data=trees) abline(model,lty=2)
建立模型并且在模型上画线,使用summary看一样模型的情况
> summary(model) Call: lm(formula = Volume ~ Girth, data = trees) Residuals: Min 1Q Median 3Q Max -8.065 -3.107 0.152 3.495 9.587 Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) -36.9435 3.3651 -10.98 7.62e-12 *** Girth 5.0659 0.2474 20.48 < 2e-16 *** --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 Residual standard error: 4.252 on 29 degrees of freedom Multiple R-squared: 0.9353, Adjusted R-squared: 0.9331 F-statistic: 419.4 on 1 and 29 DF, p-value: < 2.2e-16
从summary的结果来看,模型的效果非常好。
查看预测区间
> plot(sqrt(Volume)~Girth,data=trees,pch=16,col='red') > model2=lm(sqrt(Volume)~Girth,data=trees) > data.pre=data.frame(predict(model2,interval='prediction')) > lines(data.pre$lwr~trees$Girth,col='blue',lty=2) > lines(data.pre$upr~trees$Girth,col='blue',lty=2)
多元线性回归
利用iris数据集,第一列为萼片的长度,第二列为萼片的宽度,第三列为花瓣的长度,第四列为花瓣的宽度,第五列表示种类。
> head(iris) Sepal.Length Sepal.Width Petal.Length Petal.Width Species 1 5.1 3.5 1.4 0.2 setosa 2 4.9 3.0 1.4 0.2 setosa 3 4.7 3.2 1.3 0.2 setosa 4 4.6 3.1 1.5 0.2 setosa 5 5.0 3.6 1.4 0.2 setosa 6 5.4 3.9 1.7 0.4 setosa
我们拿到数据集后可以先通过肉眼观察数据是否线性相关,可以通过以下代码完成:
x=iris[which(iris$Species=="setosa"),1:4] plot(x)
得到图形中画红框的部分,可以看到可以用直线拟合,分布很规律,所以此两列可以建立线性模型。