Erreur d'allocation de fichier

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

Renaud Lancelot
Messages : 2484
Enregistré le : 16 Déc 2004, 08:01
Contact :

Messagepar Renaud Lancelot » 10 Sep 2008, 13:41

Je prends le train en marche...

Le message est un message d'erreur de R et à ma connaissance, WinBUGS n'écrit pas directement d'objets R dans une session R qui serait ouverte. Il se passe donc qque chose dans l'exécution de votre script qui essaie de créer un objet R dont la taille excède les capacités du système d'exploitation.

La longueur des chaines semble faible et j'ai du mal à comprendre pourquoi vous êtes confrontée au pb. Impossible à dire sans savoir ce que fait précisément la fct wbs. Peut-être y-a-t-il une phase d'importation d'un fichier de sortie WinBugs, qui lui même serait très gros ???

Renaud

Jue Binette
Messages : 17
Enregistré le : 09 Sep 2008, 12:24

Messagepar Jue Binette » 10 Sep 2008, 14:30

J'essais tout ça... en attendant, voici le script auquel la fonction wbs refère

wbs<-function(data0=thewho, model = '1diff2stateM.bug', samples = 2000, burn = 1000, thin = 2, sim = FALSE, sim.data = NULL, dim = 2, debug = FALSE, codaPkg=F, chains = 2, switch = 2){

### List of proceedures to prepare data and initial values for a number of parameters.

loc.tmp<-data0
oidx<-max(loc.tmp$Oidx)
Ridx<-loc.tmp$Ridx
RegN<-max(Ridx)
RegO<-RegN+1
numtracks <- length(loc.tmp$Ridx)-1
y<-loc.tmp$y
row <- unique(1:nrow(y))
na.row <- row[is.na(y)]
na.row <- na.row[1:(length(na.row)/2)]
# y.init <- y
# y.init[!is.na(y.init)] <- 9999
# tmp <- sapply(1:length(na.row), function(i){c(mean(y[c(na.row[i] - 1, na.row[i] + 1),1], na.rm = T), mean(y[c(na.row[i] - 1, na.row[i] + 1),2], na.rm = T))})
# tmp[tmp=='NaN'] <- rep(c(mean(tmp[1,], na.rm = T), mean(tmp[2,], na.rm = T)), length(tmp[tmp=='NaN'])/2)
# y.init[na.row,] <- t(tmp)
# y.init[y.init == 9999] <- NA
bmode.init <- unlist(lapply(1:numtracks, function(i){c(rep(1, (Ridx[i+1] - Ridx[i] - 1)), NA)}))
bmode.init <- bmode.init[-length(bmode.init)]
tmp<-strsplit(deparse(substitute(data0)),"\\.")[[1]][1]




### Final preparation of initials, data, and paramaters to follow through the MCMC proceedure
data1 <- list(y = loc.tmp$y, idx = loc.tmp$idx, j = loc.tmp$j, Ridx = loc.tmp$Ridx, numtracks = numtracks, itau = loc.tmp$itau, nu = loc.tmp$nu, Omega = matrix(c(1,0,0,1),2,2))
inits <- list(list(iSigma = matrix(c(1, 0, 0, 1), 2, 2), alpha = c(0.9,0.1), vfact= rep(0.5,numtracks), lambda = matrix(rep(c(0.5, NA),numtracks),numtracks,2,byrow=T), gamma1 = c(0.5,0.5), tprior = c(0.5,0.5), bmode = bmode.init, x = matrix(rep(loc.tmp$y[1,],RegO-2),RegO-2,2,byrow=T)), list(iSigma = matrix(c(1, 0, 0, 1), 2, 2), alpha = c(0.9,0.1), vfact= rep(0.5,numtracks), lambda = matrix(rep(c(0.5, NA),numtracks),numtracks,2,byrow=T), gamma1 = c(0.5,0.5), tprior = c(0.5,0.5), bmode = bmode.init, x = matrix(rep(loc.tmp$y[1,],RegO-2),RegO-2,2,byrow=T))) #bmode = bmode.init,
parameters <- c('Sigma', 'tprior', 'gamma', 'bmode', 'alpha', 'x', 'vfact')
### End final preparation of initials, data, and parameters to follow.



ptm<-proc.time() # stopwatch of CPU time

### Call WinBUGS
test1<-bugs(data1, inits, parameters.to.save=parameters, model, n.chains = chains, n.iter = samples, n.burnin = burn, n.thin = thin, debug = debug, digits = 8, codaPkg = codaPkg, bugs.directory = "C:/Documents and Settings/harveyv/Mes documents/WinBUGS14/")

wbtime<-proc.time()-ptm # stopwatch of CPU time

### Move results to R workspace
test1<-list(summary = test1$summary, median = test1$median, mean=test1$mean, DIC = test1$DIC, pD = test1$pD, sims.matrix = as.data.frame(test1$sims.matrix), wbtime = wbtime[3], tstep=loc.tmp$timestep, btfac=loc.tmp$btfac, bt=loc.tmp$bt, model=model, Ridx = data0$Ridx, rmonth = data0$rmonth, lc=data0$lc, sead = data0$sead, seallist = data0$seallist, Oidx = data0$Oidx, POidx = data0$POidx)
assign(paste(tmp,'.wb',sep=''),test1,pos=1)



print(test1$wbtime,digits.summary=3)

}

encore une fois merci!

Jue Binette
Messages : 17
Enregistré le : 09 Sep 2008, 12:24

Messagepar Jue Binette » 10 Sep 2008, 14:40

En fait, lorsque je fais rouler le modèle avec un petit nombre de sample et de burns ca fonctionne et je n'ai aucun problème à récupérer le fichier.

ex: wbs(test, model = '1diff2stateM.bug', samples=50, burn = 40, thin = 2, chains = 2, debug = FALSE)
ou
wbs(test, model = '1diff2stateM.bug', samples=1000, burn = 500, thin = 2, chains = 2, debug = FALSE)

Le résultat n'est cependant pas très précis d'où l'importance d'augmenter le nombre de sample lors des analyses...

L'anlayse que j'ai fait rouler la nuit passer avait :
wbs(test, model = '1diff2stateM.bug', samples=5000, burn = 2500, thin = 2, chains = 2, debug = FALSE)
et ca n'a pas fonctionné...

Aurélien Madouasse
Messages : 352
Enregistré le : 26 Fév 2007, 11:23

Messagepar Aurélien Madouasse » 10 Sep 2008, 15:36

La fonction vbs fait beacoup de choses!!!!!!

L'appel a WinBUGS se fait ici via bugs(), et le résultat des simulations est stocké dans test1 qui est ensuite analysé. Demande conseil auprès de la personne qui t'a écris la fonction.

Personnellement, je supprimerais les 2 premières lignes qui créent vbs, j'utiliserais codaPkg = TRUE dans l'appel a bugs(). Une fois que les simulations sont terminées tu peux ouvrir une nouvelle session R et récupérer tout ou partie des chaines avec read.coda pour pouvoir les analyser.

Aurélien

Jue Binette
Messages : 17
Enregistré le : 09 Sep 2008, 12:24

Messagepar Jue Binette » 10 Sep 2008, 17:33

Ok.. je veux essayer... mais comme je ne suis pas très à l'aise avec tout ça, j'ai peut-être besoin de davantage de précision car mes essais des deux dernières heures se sont avérées un peu infructueuses...

Bref, je suprime

wbs<-function(data0=thewho, model = '1diff2stateM.bug', samples = 2000, burn = 1000, thin = 2, sim = FALSE, sim.data = NULL, dim = 2, debug = FALSE, codaPkg=F, chains = 2, switch = 2)


Dois-je aussi supprimer la dernière partie qui renvoie les résultats dans R?
soit:
### Move results to R workspace
test1<-list(summary = test1$summary, median = test1$median, mean=test1$mean, DIC = test1$DIC, pD = test1$pD, sims.matrix = as.data.frame(test1$sims.matrix), wbtime = wbtime[3], tstep=loc.tmp$timestep, btfac=loc.tmp$btfac, bt=loc.tmp$bt, model=model, Ridx = data0$Ridx, rmonth = data0$rmonth, lc=data0$lc, sead = data0$sead, seallist = data0$seallist, Oidx = data0$Oidx, POidx = data0$POidx)
assign(paste(tmp,'.wb',sep=''),test1,pos=1)

Dans quel partie de la programmation dois-je indiquer TRUE pour l'arguent codaPkg?

Et une dernière chose, est-ce cette fonction du package coda que je dois par la suite utilisé pour lire le fichier créer à partir de Winbugs?

Milles mercis encore une fois...

Aurélien Madouasse
Messages : 352
Enregistré le : 26 Fév 2007, 11:23

Messagepar Aurélien Madouasse » 10 Sep 2008, 18:14

Le fait de spécifier codaPkg=TRUE va faire WinBUGS créer un fichier coda par chaine et un fichier codaIndex.txt.

Les fichiers coda contiennent les valeurs pour chaque simulation et codaIndex dit à R comment s'y retrouver. Il va falloir que tu lises un peu de doc pour pouvoir analyser tes données. Les packages R2WinBUGS et coda sont indispensables.

ftp://ftp.cirad.fr/pub/group-r/groupe-r/Fiches/R2WinBUGS_SLaurent.pdf

http://cran.r-project.org/web/packages/R2WinBUGS/vignettes/R2WinBUGS.pdf

Aurélien


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité