大気汚染データの判別分析
暇しているので、ネット上に上がっているデータを判別分析してみることにしました。
データはこちらから拝借しています。
データバンク | 松原望
ここの「大気汚染データ」を利用します。
データの説明変数として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)
SO2に関しては、汚染と見なされるかどうかに大きく影響しないようです。一方で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