R语言与数据挖掘(一)

本文介绍了一种利用水质化学参数预测有害海藻开花的方法。通过对200个样本进行预处理、可视化分析,确定关键水质指标,并利用140个测试样本预测7类海藻的数量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

要点:

1)数据可视化:直方图hist()、QQ图qq.plot()、箱图boxplot()、二维箱图bwplot()

2)空值处理:查找complete.cases()、空值删除na.omit()、均值/中位值填充mean()/median()

3)多元回归:lm()

4)回归树:rpart()

5)模型选择/交叉验证:

6)模型预测:


1、问题描述

监测和早期预测有害海藻开花对提升河流水质有很大作用。我们希望通过监测多条河流的化学成分变化及有害海藻情况,来预测海藻开花。在本问题中,有两个主要数据集:第一个数据集包括200个水质样本。为了更加精确,每个观测值实际上是同一条河流在一年中同一个季节连续3个月的取样聚合。每个观测值包括11个变量,其中3个是枚举值,描述了数据收集的季节、河流大小以及水流速度。剩余8个变量则是水质的8个化学参数,分别如下:
+ 最大PH值
+ 最小含氧量
+ 平均氯含量
+ 平均硝酸盐含量
+ 平均铵基盐含量
+ 平均正磷酸盐含量
+ 平均磷酸盐含量
+ 平均叶绿素含量
随后的7个变量是在各个水质样本中发现的有害海藻数量。第二个数据集是测试数据集,包含140个水质样本,与第一个数据集字段结构类似,但是缺少后面7个有害海藻数量字段。

目标:预测140个水质样本中7类海藻数量。
类别:通过已有数据预测特定变量,分辨对结果影响大的因素。

2、数据预处理
导入数据:
1)通过指令
algae <-read.table('Analysis.txt',header=F,dec='.',col.names=c('season','size','speed','mxPH','mnO2','Cl','NO3','NH4','oPO4','PO4','Chla','a1','a2','a3','a4','a5','a6','a7'),na.strings=c('XXXXXXX'))
2)通过菜单操作,R Data Import/Export

3、数据可视化和汇总
对未知数据集合,可以先进行简单统计分析。
> summary(algae)
    season       size       speed         mxPH            mnO2              Cl               NO3        
 autumn:40   large :45   high  :84   Min.   :5.600   Min.   : 1.500   Min.   :  0.222   Min.   : 0.050  
 spring:53   medium:84   low   :33   1st Qu.:7.700   1st Qu.: 7.725   1st Qu.: 10.981   1st Qu.: 1.296  
 summer:45   small :71   medium:83   Median :8.060   Median : 9.800   Median : 32.730   Median : 2.675  
 winter:62                           Mean   :8.012   Mean   : 9.118   Mean   : 43.636   Mean   : 3.282  
                                     3rd Qu.:8.400   3rd Qu.:10.800   3rd Qu.: 57.824   3rd Qu.: 4.446  
                                     Max.   :9.700   Max.   :13.400   Max.   :391.500   Max.   :45.650  
                                     NA's   :1       NA's   :2        NA's   :10        NA's   :2       
      NH4                oPO4             PO4              Chla               a1              a2        
 Min.   :    5.00   Min.   :  1.00   Min.   :  1.00   Min.   :  0.200   Min.   : 0.00   Min.   : 0.000  
 1st Qu.:   38.33   1st Qu.: 15.70   1st Qu.: 41.38   1st Qu.:  2.000   1st Qu.: 1.50   1st Qu.: 0.000  
 Median :  103.17   Median : 40.15   Median :103.29   Median :  5.475   Median : 6.95   Median : 3.000  
 Mean   :  501.30   Mean   : 73.59   Mean   :137.88   Mean   : 13.971   Mean   :16.92   Mean   : 7.458  
 3rd Qu.:  226.95   3rd Qu.: 99.33   3rd Qu.:213.75   3rd Qu.: 18.308   3rd Qu.:24.80   3rd Qu.:11.375  
 Max.   :24064.00   Max.   :564.60   Max.   :771.60   Max.   :110.456   Max.   :89.80   Max.   :72.600  
 NA's   :2          NA's   :2        NA's   :2        NA's   :12                                        
       a3               a4               a5               a6               a7        
 Min.   : 0.000   Min.   : 0.000   Min.   : 0.000   Min.   : 0.000   Min.   : 0.000  
 1st Qu.: 0.000   1st Qu.: 0.000   1st Qu.: 0.000   1st Qu.: 0.000   1st Qu.: 0.000  
 Median : 1.550   Median : 0.000   Median : 1.900   Median : 0.000   Median : 1.000  
 Mean   : 4.309   Mean   : 1.992   Mean   : 5.064   Mean   : 5.964   Mean   : 2.495  
 3rd Qu.: 4.925   3rd Qu.: 2.400   3rd Qu.: 7.500   3rd Qu.: 6.925   3rd Qu.: 2.400  
 Max.   :42.800   Max.   :44.600   Max.   :44.400   Max.   :77.600   Max.   :31.600  
对于枚举类型变量,提供各类数据的频次统计。比如,我们发现在冬天进行提取的水质样本最多。
对于数值类型变量,R语言提供一些统计属性描述,如最小值、均值、中位值、最大值、四分位值等。通过观察中位值、均值差距,以及四分位值之间的范围(如第3四分位值减去第1四分位值),我们可以了解分布的偏度(skewness)和分布(spread)。同时,最好通过图形了解这些信息。例如,
> hist(algae$mxPH, prob = T)
通过直方图,我们可以看出,变量mxPH近似呈现正态分布。更进一步可以使用QQ图检验。
> library(car)
> par(mfrow=c(1,2)) 
> hist(algae$mxPH, prob=T, xlab='',main='Histogram of maximum pH value',ylim=0:1)
> lines(density(algae$mxPH,na.rm=T))
> rug(jitter(algae$mxPH))
> qq.plot(algae$mxPH,main='Normal QQ plot of maximum pH')
> par(mfrow=c(1,1))
QQ图中虚线表示95%置信水平下样本呈现正态分布的范围。另一种分析形式是箱图,例如对于oPO4变量,
> boxplot(algae$oPO4, ylab = "Orthophosphate (oPO4)")
> rug(jitter(algae$oPO4), side = 2)
> abline(h = mean(algae$oPO4, na.rm = T), lty = 2)
框图的上下沿分别表示第1、3四分位数。框外上横线为第3四分位数字加上1.5倍的四分位数值,下横线为第1四分位数字减去1.5倍的四分位数值。在这两条横线之外的圆圈,表示极大或极小样本,通常被认为是异常值。同时,通过中位值与均值对比,可以发现异常值拉高了均值。
有时,我们希望了解异常值的具体数值,可以通过如下指令,
> plot(algae$NH4, xlab = "")
> abline(h = mean(algae$NH4, na.rm = T), lty = 1)
> abline(h = mean(algae$NH4, na.rm = T) + sd(algae$NH4, na.rm = T),lty = 2)
> abline(h = median(algae$NH4, na.rm = T), lty = 3)
> clicked.lines<-identify(algae$NH4)
> algae<-[clicked.lines,]
对于异常值,我们可以直接计算呈现,而不通过图形查看,
> algae[!is.na(algae$NH4) & algae$NH4 > 19000,]
为了更进一步考察两个变量关系,可以通过如下箱图进行呈现,
> library(lattice)
> bwplot(size ~ a1, data=algae, ylab='River Size',xlab='Algal A1')
从上图我们可以看出,在小河流中有害海藻的a1值更高。
对于两个连续的变量,可以通过如下离散化方式观察箱图,
> minO2 <- equal.count(na.omit(algae$mnO2),number=4,overlap=1/5)
> stripplot(season ~ a3|minO2,data=algae[!is.na(algae$mnO2),])
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值