R语言红酒模型实战

R语言数据分析报告

使用软件:R studio
一、对数据的基本分析
在这一次的数据分析报告我选取的是对红酒质量的一个数据分析。我从kaggle上下载了一个1599x12的数据集,其中对于红酒质量影响因素一共有11个因素,分别是:fixed.acidity volatile.acidity Citric.acid Residual.sugar chlorides free.sulfur.dioxide total.sulfur.dioxide density pH sulphates alcohol。接下来开始对该数据集进行分析。
我准备使用多元线性回归模型来对这个数据集建模,得到有关质量的一个回归模型。
首先先装载所需要用到的逻辑包:
其中选用MASS包的原因是为了后面对模型最优化的检验,而car包是为了拟合与评价回归模型,carData包则是安装car包前需要装载的一个包。
其中选用MASS包的原因是为了后面对模型最优化的检验,而car包是为了拟合与评价回归模型,carData包则是安装car包前需要装载的一个包。
由于从kaggle下载下来的数据集是csv文件,所以先将该文件读入r studio。
在这里插入图片描述
setwd是设置一个工作路径,方便读取,读取后的数据集如下图所示:
R语言红酒模型实战_第1张图片
对数据进行一个基本的排序,使用order函数,使数据集按照质量的顺序进行升序的排序:

R语言红酒模型实战_第2张图片
随后使用summary函数。对各列做一个基本的数据分析,了解各列的基本信息:
在这里插入图片描述
R语言红酒模型实战_第3张图片
从该图中可以得到各列的最小最大值,平均值、残差第一四分位数、残差第三四分位数以及中位数。可以看出,红酒质量的平均值是5.636,比5略高一点,并且没有达到质量为9的红酒。其中3Q和1Q的差被称为四分位距,可以由这个来得出各列的变量分散情况。使用箱线图,来得出各列变量的离散情况:
R语言红酒模型实战_第4张图片
从该图可以看出,各列都有着不少的异常点,所以在后面进行回归模型的拟合时,需要对异常点进行一个筛选与清除。
二、模型的建立与分析
2.1 接下来开始建立回归模型,在这里选用了多元线性回归模型来对数据集进行分析,而选用多元线性回归的原因是因为其用两个或多个量化的解释变量预测一个量化的响应变量,根据前面对红酒数据集的一个观察,发现符合该要求。并且因为红酒质量不属于类别型或计数型的因变量,而是一个连续型变量,并且所有自变量都是连续型变量,所以选择使用多元线性回归模型。但仍然无法确定这里使用多元线性回归模型是否是合适的,所以在2.2当中我们将要对其是否符合多元线性回归模型进行验证。
在这里插入图片描述
R语言红酒模型实战_第5张图片
2.2 这是建立后回归模型中各个变量的回归系数,从中可以看出,有六个因素与质量呈负相关,五个因素与质量呈正相关,可以发现,volatile、citric、density、sulphates、alcohol对质量的影响较大,接下来绘制成分残差图,观察各自变量与因变量是否呈非线性关系。
在这里插入图片描述
R语言红酒模型实战_第6张图片
R语言红酒模型实战_第7张图片
从该图可以看出,成分残差图证明了我开始对其的线性假设,所以多元线性回归模型的假设对于这一个数据集看起来是合适的。
2.3 经过前面对于统计假设的验证后,我们需要对各种变量进行一个筛选。在前面的分析中,可以看到许多因素的箱线图上有着许多的异常点,接下来需要对这些点进行一个筛选:
在这里插入图片描述
R语言红酒模型实战_第8张图片
所以需要删除这些值,得到一个新的回归模型。
2.4 使用coef函数得出哪个变量最为重要,这里在进行回归分析前,使用scale()函数将数据标准化为均值为0、标准差为1的数 据集,这样用R回归即可获得标准化的回归系数
在这里插入图片描述
在这里插入图片描述
可以看出alcohol因素相对于其他变量是最重要的。
2.5 现在我们初步的可以看出这个模型符合我们对其的线性假设,接卸了使用confint函数得出置信区间。
在这里插入图片描述
R语言红酒模型实战_第9张图片
其中fixed、residual的置信区间中包含0,所以可以得出结论:当其他变量不变时,fixed和residual的改变与红酒质量无关。不过,对这些结果的信念,都只建立在我的数据满足统计假设的前提之上。所以在接下来,我们需要对回归模型中的统计假设进行检验。
2.6 我们使用car包中的qqplot函数来检验模型的正态性。
R语言红酒模型实战_第10张图片
可以看出,除了653、833这两个点,其他店都离直线很近,表明正态性假设符合的很好。
2.7 而线性假设已经在前面检验过了,故这里不再进行检验。
2.8 接下来运用ncvTest函数检验同方差性。
在这里插入图片描述
P值不显著(p=2.0419e-06),说明满足方差不变假设。
2.9 现在对这两个因素进行筛选,使用anova函数和AIC函数,对包含与不包含这两个因素的模型作对比:
在这里插入图片描述
R语言红酒模型实战_第11张图片
R语言红酒模型实战_第12张图片
通过AIC值及p的对比,发现应该删去这两个因素。
2.10 接下来使用逐步回归法,得出一个更好的模型。
在这里插入图片描述
R语言红酒模型实战_第13张图片
R语言红酒模型实战_第14张图片
2.11 最终的模型是volatile.acidity+chlorides + free.sulfur.dioxide + total.sulfur.dioxide + pH + sulphates + alcohol这七个因素,对这两个模型进行对比:
R语言红酒模型实战_第15张图片
R语言红酒模型实战_第16张图片
2.12 可以发现,后得到的这个模型明显比先前的模型要好,所以在这里可以得出质量有关于这七个因素的一个模型。对新构建的模型运用plot函数,观察其模型的拟合情况。
R语言红酒模型实战_第17张图片
可以看出该模型的回归效果较为理想,基本符合了线性假设,同方差性,残差正态性(除了650、829、1273这三个点)。
2.13 对新构建的模型再次运用summary函数,可以得到一个新的计算公式:
R语言红酒模型实战_第18张图片
Quality=4.43-1.01volatile-2.017chlorides+0.005free-0.0035total-0.48pH+0.88sulphates+0.29alcohol。
对计算公式进行代入数值计算,发现结果基本吻合。
3. 结论
结论:在对红酒质量的数据分析中,一共有11个变量,在经过筛选之后,得出volatile.acidity+chlorides + free.sulfur.dioxide + total.sulfur.dioxide + pH + sulphates + alcohol这七个因素才是影响红酒质量的因素,并且可以根据构建的回归模型,得到一个和红酒质量有关的计算公式:Quality=4.43-1.01
volatile-2.017chlorides+0.005free-0.0035total-0.48pH+0.88sulphates+0.29alcohol。
附录一:代码整合:
library(plyr)
library(car)
library(MASS)

setwd(“D:\作业\r语言数据处理”)
file<-read.table(“winequality-red.csv”,header=T,sep=",",comment.char="")
View(file)
summary(file)
par(mfrow=c(3,4))
boxplot(t1 f i x e d . a c i d i t y , m a i n = " f i x e d . a c i d i t y " ) b o x p l o t ( t 1 fixed.acidity,main="fixed.acidity") boxplot(t1 fixed.acidity,main="fixed.acidity")boxplot(t1volatile.acidity,main=“volatile.acidity”)
boxplot(t1 c i t r i c . a c i d , m a i n = " c i t r i c . a c i d " ) b o x p l o t ( t 1 citric.acid,main="citric.acid") boxplot(t1 citric.acid,main="citric.acid")boxplot(t1residual.sugar,main=“residual.sugar”)
boxplot(t1 c h l o r i d e s , m a i n = " c h l o r i d e s " ) b o x p l o t ( t 1 chlorides,main="chlorides") boxplot(t1 chlorides,main="chlorides")boxplot(t1free.sulfur.dioxide,main=“free.sulfur.dioxide”)
boxplot(t1 t o t a l . s u l f u r . d i o x i d e , m a i n = " t o t a l . s u l f u r . d i o x i d e " ) b o x p l o t ( t 1 total.sulfur.dioxide,main="total.sulfur.dioxide") boxplot(t1 total.sulfur.dioxide,main="total.sulfur.dioxide")boxplot(t1density,main=“density”)
boxplot(t1 p H , m a i n = " p H " ) b o x p l o t ( t 1 pH,main="pH") boxplot(t1 pH,main="pH")boxplot(t1sulphates,main=“sulphates”)
boxplot(t1 a l c o h o l , m a i n = " a l c o h o l " ) n e w d a t a < − f i l e [ o r d e r ( f i l e alcohol,main="alcohol") newdata<-file[order(file alcohol,main="alcohol")newdata<file[order(filequality),]
quality<-lm(quality~fixed.acidity+volatile.acidity+citric.acid+residual.sugar+chlorides+free.sulfur.dioxide+total.sulfur.dioxide+density+pH+sulphates+alcohol,data=t1)
summary(quality)
crPlot(quality)
outlierTest(quality)
stepAIC(quality, direction=“backward”)
anova(test1,quality)
AIC(quality,test1)
confint(quality)
state<-as.data.frame(scale(file))
t2<-lm(quality~fixed.acidity+volatile.acidity+citric.acid+residual.sugar+chlorides+free.sulfur.dioxide+total.sulfur.dioxide+density+pH+sulphates+alcohol,data=state)
coef(t2)
test<-lm(quality ~ volatile.acidity + chlorides + free.sulfur.dioxide + total.sulfur.dioxide + pH + sulphates + alcohol,data=file)
anova(test,quality)

你可能感兴趣的:(R语言,R语言)