3 #source('/home/pierre/workspace/iramuteq/Rscripts/afc.R')
4 #data<-read.table('output/corpus_bin.csv',header=TRUE,sep='\t')
5 source('/home/pierre/workspace/iramuteq/Rscripts/anacor.R')
7 CHD<-function(data,x=9){
13 print('vire colonnes vides en entree')#FIXME : il ne doit pas y avoir de colonnes vides en entree !!
14 for (m in 1:length(dtable)) {
15 if (sum(dtable[m-a])==0) {
17 dtable<-dtable[,-(m-a)]
25 listcol[[clnb]]<-vector()
26 listcol[[clnb+1]]<-vector()
27 #extraction du premier facteur de l'afc
30 #afc<-corresp(dtable,nd=1)
32 afc<-boostana(dtable,nd=1)
33 #coordonnees des colonnes sur le premier facteur
34 #coordrow=afc$rowcoord
35 #coordrow=as.matrix(afc$rscore)
36 #coordrow<-as.matrix(afc$rproj[,1])
37 coordrow<-as.matrix(afc$row.scores)
38 #row.names(coordrow)<-afc$rownames
39 row.names(coordrow)<-rownames(dtable)
40 #classement en fonction de la position sur le premier facteur
41 #listclasse<-ifelse(coordrow<0,paste('CLASSE',clnb,sep=''),paste('CLASSE',clnb+1,sep=''))
43 print('deb recherche meilleur partition')
44 coordrow<-as.matrix(coordrow[order(coordrow[,1]),])
45 #print(rownames(coordrow))
46 zeropoint<-which.min(abs(coordrow))
48 g<-length(coordrow[coordrow[,1]<coordrow[zeropoint]])
49 d<-length(coordrow[coordrow[,1]>coordrow[zeropoint]])
55 temptable<-as.matrix(coordrow[(zeropoint-g):(zeropoint+d)])
56 row.names(temptable)<-rownames(coordrow)[(zeropoint-g):(zeropoint+d)]
60 chtable<-matrix(0,2,(ncol(dtable)))
62 for (forme in 1:(ncol(dtable))) {
63 totforme[forme]<-sum(dtable[,forme])
66 for (l in 1:length(temptable)) {
67 # print(rownames(temptable)[l])
68 linetoswitch=as.matrix(dtable[rownames(temptable)[l],])
70 chtable[1,]<-chtable[1,]+linetoswitch
71 chtable[2,]<-chtable[2,]-linetoswitch
72 valchi<-chisq.test(chtable)$statistic
76 listchi<-append(listchi,valchi)
78 #listchi<-listchi[!is.na(listchi)]
79 maxchi<-which(listchi==max(listchi))
82 maxchi<-maxchi+missing
86 print(coordrow[(maxchi)])
87 listclasse<-ifelse(coordrow<=coordrow[(maxchi)],clnb,clnb+1)
88 # listclasse<-ifelse(coordrow<0,clnb,clnb+1)
89 listchi<-as.matrix(listchi)
90 listchi<-cbind(listchi,temptable)
91 filename<-paste('graphechi',as.character(i))
92 filename<-paste(filename,'.jpeg')
94 plot(listchi[,1]~listchi[,2])
96 print(coordrow[zeropoint-g])
97 abline(v=coordrow[zeropoint-g])
98 abline(v=coordrow[zeropoint+d])
99 abline(v=coordrow[(maxchi)])
102 #ajout du classement au tableau
103 dtable<-transform(dtable,cl1=listclasse)
105 #calcul de la specificite des colonnes
106 t1<-dtable[dtable$cl1==clnb,]
107 t2<-dtable[dtable$cl1==clnb+1,]
109 for (k in 1:(ncol(dtable)-1)) {
113 t[2,1]<-nrow(t1)-t[1,1]
114 t[2,2]<-nrow(t2)-t[1,2]
116 if (chi$statistic>6){#FIXME : valeur a mettre en option base :2.7
117 if (chi$expected[1,1]<t[1,1]){
118 listcol[[clnb+1]]<-append(listcol[[clnb+1]],k)
120 listcol[[clnb]]<-append(listcol[[clnb]],k)
126 listrownamedtable<-rownames(dtable)
127 listrownamedtable<-as.integer(listrownamedtable)
128 newcol<-vector(length=nrow(dataori))
129 #remplissage de la nouvelle colonne avec les nouvelles classes
132 for (ligne in listrownamedtable) {
134 newcol[ligne]<-as.vector(dtable$cl1[num])[1]
136 #recuperation de la classe precedante pour les cases vides
137 print('recuperation classes precedentes')
138 matori<-as.matrix(dataori)
141 for (ligne in 1:length(newcol)) {
142 # print(newcol[ligne])
143 if (newcol[ligne]==0) { # ce test renvoie un warning
144 newcol[ligne]<-matori[ligne,length(matori[1,])]
149 #???????????????????????????????????
150 #je ne comprends pas : j'ai vraiment besoin de faire ces deux actions pour ajouter la nouvelle colonne aux donnees ?
151 #si je ne le fais pas, ca plante...
152 dataori<-cbind(dataori,newcol)
153 dataori<-transform(dataori,newcol=newcol)
154 #???????????????????????????????????
156 #liste des noms de colonne
157 #colname<-colnames(dataori)
158 #nom de la derniere colonne
159 #colname<-colname[length(dataori)]
161 colclasse<-as.character(dataori[,ncol(dataori)])
163 #les modalites de la derniere colonne
164 classes<-levels(as.factor(colclasse))
166 #determination de la classe la plus grande
167 tailleclasse<-paste(NULL,1:length(classes))
169 for (classe in classes) {
171 dtable<-dataori[dataori[length(dataori)]==classe,]
172 tailleclasse[b]<-length(dtable[,1])
174 tailleclasse<-as.integer(tailleclasse)
176 plusgrand<-which(tailleclasse==max(tailleclasse))
178 #???????????????????????????????????
179 #Si 2 classes ont des effectifs egaux, on prend la premiere de la liste...
180 if (length(plusgrand)>1) {
181 plusgrand<-plusgrand[1]
183 #????????????????????????????????????
185 #constuction du prochain tableau a analyser
186 print('construction tableau suivant')
187 classe<-classes[plusgrand]
188 dtable<-dataori[dataori[length(dataori)]==classe,]
189 dtable<-dtable[,1:(length(dtable)-i)]
192 listcolelim<-listcol[[as.integer(classe)]]
193 mother<-listmere[[as.integer(classe)]]
195 listcolelim<-append(listcolelim,listcol[[mother]])
197 mother<-listmere[[mother]]
200 listcolelim<-sort(unique(listcolelim))
204 if (!is.logical(listcolelim)){
205 print('elimination colonne')
207 for (col in listcolelim){
208 dtable<-dtable[,-(col-a)]
214 #elimination des colonnes ne contenant que des 0
215 print('vire colonne vide dans boucle')
217 for (m in 1:ncol(dtable)) {
218 if (sum(dtable[,m-a])==0) {
219 dtable<-dtable[,-(m-a)]
223 #elimination des lignes ne contenant que des 0
224 # print('vire ligne vide dans boucle')
226 # for (m in 1:nrow(dtable)) {
227 # if (sum(dtable[m-a,])==0) {
228 # print('ligne vide')
229 # dtable<-dtable[-(m-a),]
234 dataori[(length(dataori)-x+1):length(dataori)]
237 #dataout<-CHD(data,9)
240 #dissmat<-daisy(dataout, metric = 'gower', stand = FALSE)
241 #chd<-diana(dissmat,diss=TRUE,)
244 #pour tester le type, passer chaque colonne en matice et faire mode(colonne)
245 #for (i in 1:13) {tmp<-as.matrix(data[i]);print(mode(tmp))}