# przyklad_3_5.r # Metoda Latinne, Debeir etc. # glosowanie mvote0<-function(x) { t<-table(x) ll<-length(t) tm<-as.matrix(t) m<-rownames(tm)[which.max(t)] if (sum(t==max(t))>1) { c<-which(t==max(t)) m<-rownames(tm)[sample(c,1)] } return(m) } # w kazdej kolumnie oracle dla wynikow agregacji "1:i" modeli # load(file="sat 1000 .dat") zbiór z wynikami predykcji 1000 modeli bazowych lmod<-300 lobs<-nrow(sat.test.c) agr<-vector(length=1000) sat.agr.o<-matrix(ncol=1000,nrow=lobs) for (i in 1:1000) { for (j in 1:lobs) agr[j]<-mvote0(sat.test.c[j,1:i]) sat.agr.o[,i]<-as.numeric(agr==sat.test.y) } # zliczanie zgodnosci # zwolnienie pamieci rm(sat.test.c) rm(sat.test.p) tb<-NULL #macierz wspolrzednych for (m in 1:(lmod-1)) for (n in (m+1):lmod) { cm<-sat.agr.o[,m] cn<-sat.agr.o[,n] # macierz oracle tt<-table(cm,cn) #print(tt) a<-tt[2,2] b<-tt[2,1] c<-tt[1,2] d<-tt[1,1] # tylko zapisujemy te, ktore sie roznia if ((b+c)>=20) { mcn<-(abs(b-c)-1)^2/(b+c) if (mcn>3.841459) tb<-rbind(tb,c(m,n)) } #McNemar exact test #if ((b+c)<20) #{ #p<-0.5 #cc<-b+c #bb<-max(b,c) # petla #ss<-0 #for (i in bb:cc) ss<-ss+choose(cc,i)*(p^(i))*((1-p)^(cc-i)) #if (ss<0.05) #{ #tb<-rbind(tb,c(m,n)) #} #} # nieuzywany, bo to nieliczne przypadki } plot(tb[,2],tb[,1],xlab="Liczba modeli bazowych w Dm",ylab="Liczba modeli bazowych w Dn",main="Zbiór Satellite",ylim=c(0,lmod))