お金と数字と温泉を考えるブログ

お金と数字と温泉を考えています。

大気汚染データの判別分析

暇しているので、ネット上に上がっているデータを判別分析してみることにしました。
データはこちらから拝借しています。
データバンク | 松原望
ここの「大気汚染データ」を利用します。

データの説明変数としてSO2,D.D,NOXがあるようです。
被説明変数として、汚染されている(a)か汚染されていないか(b)として、
データ探索してみます。

d<-read.csv("2-3b.csv")#元データに"separate"というデータを追加しています
library(dplyr)
d2<-d%>%select(separate,SO2,D.D,NOX)#必要な項目だけ抽出する
d2
plot(d2[,1],d2[,2],pch=20)
plot(d2[,1],d2[,3],pch=20)
plot(d2[,1],d2[,4],pch=20)

f:id:umejiro330:20180507150833p:plain
区分分けとSO2との関係
SO2に関しては、汚染と見なされるかどうかに大きく影響しないようです。
f:id:umejiro330:20180507150839p:plain
区分分けとD.Dとの関係
f:id:umejiro330:20180507150844p:plain
区分分けとNOXとの関係
一方でD.DとNOXについては、値が大きいほど汚染と見なされるようです。

これらの情報から判別分析を行い、22番目のデータが汚染か非汚染かを判別してもらいます。ちなみに正解は非汚染(b)です。

lda1<-lda(separate~.,data=d2[-22,])#線形判別
qda1<-qda(separate~.,data=d2[-22,])#二次判別
t1<-table(predict(lda1)$class,d2[-22,]$separate)
#下記の通り
     a  b
  a  8  1
  b  2 10
t2<-table(predict(qda1)$class,d2[-22,]$separate)
#下記の通り
   a  b
  a 10  1
  b  0 10
predict(lda1,d2[22,])#間違って判別されている。22番目データはSO2が異常値のためであると考えられる。
$class
[1] a
Levels: a b

$posterior
           a         b
22 0.7621425 0.2378575

$x
          LD1
22 -0.6633224

predict(qda1,d2[22,])#間違いなく判別できた
$class
[1] b
Levels: a b

$posterior
               a b