Beruflich Dokumente
Kultur Dokumente
Instrucciones
Seleccione el número de cantidades de entrada.
Cambie los nombres de cantidad si es necesario.
Para cada cantidad de entrada, elija su distribución y sus
parámetros.
Elija y establezca las correlaciones si es necesario.
Elige el número de realizaciones.
Escriba la definición de la cantidad de salida en una
expresión R válida.
Ejecute el cálculo.
ave = 1.727e-05
sd = 1.7e-06
mediana = 1.727e-05
loco = 1.2e-06
Intervalos de cobertura
ANOVA (% de contribuciones)
--------------------------------------------
y = 1.727e-05
u (y) = 1.8e-06
SensitivityCoeffs Percent.u2
L0 -7.9e-03 2.0e + 01
T0 2.0e-07 5.4e-04
L1 7.8e-03 8.0e + 01
T1 -2.0e-07 3.4e-03
Correlaciones NA 0.0e + 00
============================================
Descargue el archivo de datos binario R con los valores de
Monte Carlo de la cantidad de salida
Descargue un archivo de texto con los valores de Monte
Carlo de la cantidad de salida
Descargue el archivo de texto con los resultados
numéricos que se muestran en esta página
Descargue el archivo JPEG con el gráfico que se muestra
en esta página
Descargue el archivo de configuración
Introducción
1
L 1
0
1
1
T 1
0
1
1
L 1
1
1
1
T 1
1
1
Correlaciones
# Version
cat("NIST Validation & Verification R Script Version 1.4 \r\n")
maxTry <- 2
for (packageName in
c("truncnorm","triangle","nleqslv","mvtnorm","numDeriv","parallel","ev
d","sn"))
{
cnt = 1
while(!is.installed(packageName))
{
print(packageName)
if(cnt>maxTry) break
install.packages(packageName,repos="http://lib.stat.cmu.edu/R/C
RAN")
cnt <- cnt+1
}
}
require(methods)
truncnormL = require(truncnorm)
triangleL = require(triangle)
nleqslvL = require(nleqslv)
mvtnormL = require(mvtnorm)
numDerivL = require(numDeriv)
parallelL = require(parallel)
require(evd)
require(sn)
parallelL2 = exists("mcparallel")
if(parallelL)
{
nCores = detectCores()
if(nCores < 4)
{
parallelL = FALSE
parallelL2 = FALSE
}
}
#Asymmetric function
if (forceGEV) {
modelSelection = "GEV"
cat("Selected GEV Model\n")
theta.start = c(x, sqrt(uL*uR), if (uR > uL) {0.25} else {-
0.25})
theta.optim = try(optim(par=theta.start, fn=fGEV,
method="Nelder-Mead",
xL=x-uL, xM=x, xR=x+uR,
pL=(1-p)/2, pM=0.5, pR=(1+p)/2,
wL=wL, wM=wM, wR=wR))
if (class(theta.optim) == "try-error") {
cat(paste("ERROR (asymmetricalModelSelection):",
"unable to reproduce uL and uR\n"))
theta = NULL
} else {
x.mu = theta.optim$par[1]
x.sigma = theta.optim$par[2]
x.xi = theta.optim$par[3]
theta = c(mu=x.mu, sigma=x.sigma, xi=x.xi) }
return(list(modelSelection=modelSelection,
modelParameters=theta))
}
centralSkew = uR/uL
#UncertaintyMachine functions
signifDigits = function (x, y)
{
n = 1
if(x==y)
return(Inf)
while (signif(x, n) == signif(y, n)) {n = n + 1}
return(n-1)
}
deviceType=NULL
if(!is.null(getOption("bitmapType")) && capabilities("cairo"))
deviceType = "cairo"
# distrib
distrib =
function(nbVar,nbReal,varNames,expression,type,parameters,symmetrical,
correlation,outputFile,copulaType=NULL,copulaDf=NULL,pretreatment=NA)
{
# cat("nbVar = ",nbVar,"\n")
# cat("nbReal = ",nbReal,"\n")
# cat("expre = ",expression,"\n")
# cat("type = ",type,"\n")
# cat("parameters = \n")
# print(parameters)
# cat("correlation = \n")
# print(correlation)
# cat("outputFile = ",outputFile,"\n")
# cat("pretreatment = ",pretreatment,"\n")
if(outputFile!="no-output")
{
tempout=unlist(strsplit(outputFile,split="\\."))
if (tempout[length(tempout)]!="txt")
outputFile=paste(outputFile,"txt",sep=".")
tempout=unlist(strsplit(outputFile,split="\\."))
tempout2=tempout[1]
if(length(tempout)>2)
for(iu in 2:(length(tempout)-1))
tempout2=paste(tempout2,tempout[iu],sep=".")
outputFile =paste(tempout2,"-values.Rd",sep="")
outputFile2=paste(tempout2,"-results.txt",sep="")
outputFile3=paste(tempout2,"-density.jpg",sep="")
if(file.exists(outputFile))
file.remove(outputFile)
if(file.exists(outputFile2))
file.remove(outputFile2)
if(file.exists(outputFile3))
file.remove(outputFile3)
}
##Selection of the error file NULL local outputFile2 for web
version
errorFile=outputFile2
if (!truncnormL)
errorStop("Impossible to load the package
truncnorm",errorFile)
if (!triangleL)
errorStop("Impossible to load the package
triangle",errorFile)
if (!nleqslvL)
errorStop("Impossible to load the package
nleqslv",errorFile)
if (!mvtnormL)
errorStop("Impossible to load the package
mvtnorm",errorFile)
if (!numDerivL)
errorStop("Impossible to load the package
numDeriv",errorFile)
if(nbReal<100000)
errorStop("The number of realizations should be greater
than 100000\n",errorFile)
if(symmetrical == TRUE)
{
quantileY = matrix(rep(NA,4),ncol=4)
}
else
{
quantileY = quantile(0, probs=c(0.005, 0.025, 0.05,
pnorm(-1), pnorm(1),
0.95, 0.975, 0.995))
}
sdX = numeric(nbVar)
meanX = numeric(nbVar)
##Safe Environment
safe_f <- c(
getGroupMembers("Math"),
getGroupMembers("Arith"),
getGroupMembers("Compare"),
"<-
","{","(","[","=","pi","complex","Re","Im","Mod","Arg","c","function",
"$","mapply",
"matrix","%*%","pmin","pmax"
)
for (f in safe_f) {
varEnv[[f]] <- get(f, "package:base")
}
varEnv[["uniroot"]] <- get("uniroot")
varEnv[["t"]] <- get("t.default")
varEnv[["solve"]] <- get("solve.default")
if(is.logical(correlation))
{
for(ii in 1:nbVar)
{
res =
drawDistrib(type,parameters,varNames,varEnv,errorFile,ii)
meanX[ii]=res$meanX
sdX[ii]=res$sdX
}
}else
{
if(copulaType=="Gaussian")
{
z = rmvnorm(nbReal, mean=rep(0, nbVar),
sigma=correlation)
z = pnorm(z)
}else
{
z = rmvt(nbReal, sigma=correlation,
df=copulaDf)
z = pt(z, df=copulaDf)
}
for(ii in 1:nbVar)
{
res =
drawDistribCorel(type,parameters,varNames,z,varEnv,errorFile,ii)
meanX[ii]=res$meanX
sdX[ii]=res$sdX
}
}
y=NULL
timeOut = 300
if(!is.na(pretreatment))
{
setTimeLimit(timeOut, timeOut)
res1<-try(eval(parse(text=pretreatment),envir =
varEnv),silent = TRUE)
setTimeLimit(Inf, Inf)
if(class(res1) == "try-error")
errorStop(paste("Impossible to evaluate the
output expression \n",strsplit(res1,":")[[1]][2], "\n"), errorFile)
}
setTimeLimit(timeOut, timeOut)
res2<-try(eval(parse(text=paste( "y
=",expression,sep="")),envir = varEnv),silent = TRUE)
setTimeLimit(Inf, Inf)
if(class(res2) == "try-error")
errorStop(paste("Error in the evaluation of the output
expression:" ,expression, "\n",strsplit(res2,":")[[1]][2], "\n"),
errorFile)
y = varEnv$y
for(ii in 1:nbVar)
{
eval(parse(text=paste(varNames[ii],
"=varEnv$",varNames[ii],sep="")))
}
if(class(y)!="numeric")
errorStop("Ouput quantity is not of type:
numeric\nPlease check its definition", errorFile)
if(any(is.na(y)))
errorStop("NaNs produced in the ouput
quantities\nPlease check its definition", errorFile)
if(any(y==Inf))
errorStop("Inf values produced in the ouput
quantities\nPlease check its definition", errorFile)
if(all(y==y[1]))
errorStop("This application does not support a constant
output quantity", errorFile)
if(outputFile!="no-output")
{
if(is.null(deviceType))
jpeg(file=outputFile3, width=5, height=4,
units="in",
res=600, quality=100,
pointsize=10, bg="white")
else
jpeg(file=outputFile3, width=5, height=4,
units="in",
res=600, quality=100,
pointsize=10, bg="white",type=deviceType)
par(mar=c(4.5, 4.5, 0.5, 0.75))
if(parallelL2)
mcparallel(
{
plot(density(y, from=mean(y)-3*sd(y),
to=mean(y)+3*sd(y)), bty="n",
col="Blue", main="",
xlab="", ylab="Probability
Density")
curve(dnorm(x, mean=mean(y),
sd=sd(y)), lty=3, lwd=2, col="Red", from=mean(y)-3*sd(y),
to=mean(y)+3*sd(y), add=TRUE)
mtext("Output quantity (Y) ",
side=1, line=2,adj = 1)
legend("bottomleft",inset =c(-0.17,-
0.20) , c("Monte Carlo sample drawn from distribution of output
quantity","Gaussian distribution with same mean and standard deviation
as Monte Carlo sample"), col = c("blue","red"), lty = c(1,3),cex =
0.55,xpd = TRUE)
dev.off()
})
else
{
plot(density(y, from=mean(y)-3*sd(y),
to=mean(y)+3*sd(y)), bty="n",
col="Blue", main="",
xlab="", ylab="Probability Density")
curve(dnorm(x, mean=mean(y), sd=sd(y)), lty=3, lwd=2,
col="Red", from=mean(y)-3*sd(y), to=mean(y)+3*sd(y), add=TRUE)
mtext("Output quantity (Y) ", side=1,
line=2,adj = 1)
legend("bottomleft",inset =c(-0.17,- 0.20) ,
c("Monte Carlo sample drawn from distribution of output
quantity","Gaussian distribution with same mean and standard deviation
as Monte Carlo sample"), col = c("blue","red"), lty = c(1,3),cex =
0.55,xpd = TRUE)
dev.off()
}
cat("\nY values being saved in file:
",outputFile,"\n")
cat("Results being saved in file: ",outputFile2,"\n")
cat("Y Density being saved in file: ",outputFile3,"\n")
}
nSample = min(c(5e5, nbReal))
iz = sample(1:nbReal, size=nSample, replace=FALSE)
sub = list()
for (ji in 1:nbVar) {sub[[ji]]
=get(varNames[ji],envir=varEnv)[iz]}
sub[[nbVar+1]] = y[iz]
names(sub) = c(varNames, "y")
sub = as.data.frame(sub)
meanY=mean(y)
sdY=sd(y)
if(parallelL2)
{
yAve = mcparallel(significator(y, stat=mean,
digits=TRUE))
ySd = mcparallel(significator(y, stat=sd, digits=TRUE))
yMedian = mcparallel(significator(y, stat=median))
yMad = mcparallel(significator(y, stat=mad))
}
else
{
yAve = significator(y, stat=mean, digits=TRUE)
ySd = significator(y, stat=sd, digits=TRUE)
yMedian = significator(y, stat=median)
yMad = significator(y, stat=mad)
res =list(yAve,ySd,yMedian,yMad)
}
if(symmetrical == TRUE)
{
ptm3 <- proc.time()
if(parallelL)
{
no_cores <- min(nCores - 1,4 )
cl <- makeCluster(no_cores)
clusterExport(cl, "significator")
clusterExport(cl, "symmetricalCI")
quantileY = unlist(parLapply(cl,
c(0.99,0.95,0.90,0.68), function(cover) significator(y,
stat=symmetricalCI, estimate = meanY, coverage = cover)))
stopCluster(cl)
}
else
{
quantileY = c(
significator(y, stat=symmetricalCI,
estimate = meanY, coverage = 0.99),
significator(y, stat=symmetricalCI,
estimate = meanY, coverage = 0.95),
significator(y, stat=symmetricalCI,
estimate = meanY, coverage = 0.90),
significator(y, stat=symmetricalCI,
estimate = meanY, coverage = 0.68)
)
}
}
else
{
if(parallelL)
{
no_cores <- min(nCores - 1,8 )
cl <- makeCluster(no_cores)
clusterExport(cl, "significator")
quantileY = unlist(parLapply(cl,
c(0.005,0.025,0.05,pnorm(-1),pnorm(1),0.95,0.975,0.995),
function(prob) significator(y, stat=quantile, probs=prob)))
stopCluster(cl)
}
else
{
quantileY = c(
significator(y, stat=quantile,
probs=0.005),
significator(y, stat=quantile,
probs=0.025),
significator(y, stat=quantile,
probs=0.05),
significator(y, stat=quantile,
probs=pnorm(-1)),
significator(y, stat=quantile,
probs=pnorm(1)),
significator(y, stat=quantile,
probs=0.95),
significator(y, stat=quantile,
probs=0.975),
significator(y, stat=quantile,
probs=0.995)
)
}
}
if( outputFile!="no-output")
{
ptm2 <- proc.time()
if(parallelL2)
writeThread =
mcparallel(eval(parse(text=paste0("save(y,",paste(varNames,coll
apse=","),",file = outputFile)"))))
else
eval(parse(text=paste0("save(y,",paste(varNames,collapse=","),"
,file = outputFile)")))
ptm2 <- proc.time() - ptm2
cat("write time: ")
print(ptm2)
}
functionString = paste(functionString,
"eval(parse(text=treatment),envir = varEnv);")
functionString = paste(functionString,
"return(varEnv$yvalue)}")
try(eval(parse(text=functionString)))
if(exists("yfunction"))
{
sdGauss=NA
if(is.logical(correlation))
try(sdGauss <- gummer(f=yfunction, x=meanX,
u=sdX))
else
try(sdGauss <- gummer(f=yfunction, x=meanX,
u=sdX, r=correlation))
budget = data.frame(
"SensitivityCoeffs"=signif(c(sensitivity, NA), 2),
"Percent.u2"=signif(100*proportions, 2))
rownames(budget) = c(varNames, "Correlations")
}
## Computation of coverage intervals
CI = matrix(rep(NA,16),ncol=4)
if(symmetrical == TRUE)
{
CI[1,1] = meanY-quantileY[1]
CI[2,1] = meanY+quantileY[1]
CI[3,1] = signif((CI[2,1]-CI[1,1])/(2*sdY),2)
CI[1,2] = meanY-quantileY[2]
CI[2,2] = meanY+quantileY[2]
CI[3,2] = signif((CI[2,2]-CI[1,2])/(2*sdY),2)
CI[1,3] = meanY-quantileY[3]
CI[2,3] = meanY+quantileY[3]
CI[3,3] = signif((CI[2,3]-CI[1,3])/(2*sdY),2)
CI[1,4] = meanY-quantileY[4]
CI[2,4] = meanY+quantileY[4]
CI[3,4] = signif((CI[2,4]-CI[1,4])/(2*sdY),2)
}
else
{
CI[1,1] = quantileY[1]
CI[2,1] = quantileY[8]
CI[3,1] = signif((CI[2,1]-CI[1,1])/(2*sdY),2)
CI[1,2] = quantileY[2]
CI[2,2] = quantileY[7]
CI[3,2] = signif((CI[2,2]-CI[1,2])/(2*sdY),2)
CI[1,3] = quantileY[3]
CI[2,3] = quantileY[6]
CI[3,3] = signif((CI[2,3]-CI[1,3])/(2*sdY),2)
CI[1,4] = quantileY[4]
CI[2,4] = quantileY[5]
CI[3,4] = signif((CI[2,4]-CI[1,4])/(2*sdY),2)
if(parallelL2)
{
res <- mccollect(list(yAve, ySd,yMedian,yMad))
yAve = res[[1]]
ySd = res[[2]]
yMedian = res[[3]]
yMad = res[[4]]
}
if(parallelL2)
{
res2 <- mccollect(list(s))
s = res2[[1]]
}
ssr = s[[1]]["Residuals", "Sum Sq"]
ss = s[[1]]$"Sum Sq"
rowNames = dimnames(as.data.frame(s[[1]]))[[1]]
rowNames = rowNames[1:length(rowNames)-1]
anova = cbind(c(round(100*ss[-length(ss)]/(sum(ss)-ssr), 2),
NA),round(100*ss/sum(ss), 2))
if(parallelL2)
res2 <- mccollect(list(writeThread))
#Result Formating
######################################################################
## SECTION (SPECIFICATION) ===========================================
######################################################################
## Function mergeOutput:
## Function merging the different results file in one
## =======================
## SPECIFICATION -- INPUTS
outputList = paste(outputFile,"All-results.txt",sep="")
for( ii in 1:nbOut)
{
write.table(paste("=====RESULTS
OUTPUT",ii,"======================\r\n"), col.names=FALSE,
row.names=FALSE, quote=FALSE, file = output.file, append=TRUE,
eol="\r\n")
fh = file( fileList[ii], open='rt' )
lines = readLines(fh)
lines = lines [-1:-2]
write.table(lines, col.names=FALSE, row.names=FALSE,
quote=FALSE, file = output.file, append=TRUE, eol="\r\n")
close(fh)
}
close(output.file)
fileList = {};
outputList = paste(outputFile,"All-values.Rd",sep="")
yList = list()
outNames= NULL
for( ii in 1:length(fileList))
{
if(file.exists(fileList[ii]))
{
load(fileList[ii])
if(exists("y"))
{
yList =c(yList,list(y))
outNames =
c(outNames,paste("y",as.character(ii),sep=""))
}
}
yList = as.data.frame(yList)
dimnames(yList)[[2]] = outNames
save(yList,file = outputList)
#drawDistrib
drawDistrib = function(type,parameters,varNames,varEnv,errorFile,ii)
{
varTemp=NaN
meanX=NaN
sdX=NaN
if(type[ii]==0) ## Bernoulli (Prob. of success)
{
checkParam(type[ii],parameters[[ii]],varNames[ii],errorFile)
varTemp=rbinom(nbReal, size=1,
prob=parameters[[ii]][1])*1.0
meanX=parameters[[ii]][1];
sdX=sqrt(parameters[[ii]][1]*(1-parameters[[ii]][1]));
}
if(type[ii]==1) ## Beta (Mean, StdDev)
{
checkParam(type[ii],parameters[[ii]],varNames[ii],errorFile)
Mean=parameters[[ii]][1]
StdDev=parameters[[ii]][2]
a = Mean*(Mean*(1-Mean)-StdDev^2)/StdDev^2
b = (1-Mean)*(Mean*(1-Mean)-StdDev^2)/StdDev^2
varTemp=rbeta(nbReal, shape1=a, shape2=b)
meanX = parameters[[ii]][1];
sdX = parameters[[ii]][2];
}
if(type[ii]==2) ## Beta (Shape1, Shape2)
{
checkParam(type[ii],parameters[[ii]],varNames[ii],errorFile)
varTemp=rbeta(nbReal, shape1=parameters[[ii]][1],
shape2=parameters[[ii]][2])
meanX =
parameters[[ii]][1]/(parameters[[ii]][1]+parameters[[ii]][2])
sdX =
sqrt(parameters[[ii]][1]*parameters[[ii]][2]/(((parameters[[ii]][1]+pa
rameters[[ii]][2])^2)*(parameters[[ii]][1]+parameters[[ii]][2]+1)))
}
if(type[ii]==3) ## Chi-Squared (DF)
{
checkParam(type[ii],parameters[[ii]],varNames[ii],errorFile)
varTemp=rchisq(nbReal, df=parameters[[ii]][1])
meanX = parameters[[ii]][1];
sdX = sqrt(2*parameters[[ii]][1]);
}
if(type[ii]==4) ## Exponential (Mean)
{
checkParam(type[ii],parameters[[ii]],varNames[ii],errorFile)
varTemp= rexp(nbReal, rate=1/parameters[[ii]][1])
meanX = parameters[[ii]][1];
sdX = parameters[[ii]][1];
}
if(type[ii]==5) ## Gamma (Mean, StdDev)
{
checkParam(type[ii],parameters[[ii]],varNames[ii],errorFile)
Mean=parameters[[ii]][1]
StdDev=parameters[[ii]][2]
Shape = (Mean/StdDev)^2
Scale = StdDev^2/Mean
varTemp=rgamma(nbReal, shape=Shape, scale=Scale)
meanX = parameters[[ii]][1];
sdX = parameters[[ii]][2];
}
if(type[ii]==6) ## Gamma (Shape, Scale)
{
checkParam(type[ii],parameters[[ii]],varNames[ii],errorFile)
varTemp=rgamma(nbReal, shape=parameters[[ii]][1],
scale=parameters[[ii]][2])
meanX = parameters[[ii]][1]* parameters[[ii]][2];
sdX = sqrt(parameters[[ii]][1])* parameters[[ii]][2];
}
if(type[ii]==7) ## Gaussian (Mean, StdDev)
{
checkParam(type[ii],parameters[[ii]],varNames[ii],errorFile)
varTemp=rnorm(nbReal, mean=parameters[[ii]][1],
sd=parameters[[ii]][2])
meanX = parameters[[ii]][1];
sdX = parameters[[ii]][2];
}
if(type[ii]==8) ## Gaussian -- Truncated (Mean, StdDev, Left,
Right)
{
checkParam(type[ii],parameters[[ii]],varNames[ii],errorFile)
varTemp=rtruncnorm(nbReal, a=parameters[[ii]][3],
b=parameters[[ii]][4], mean=parameters[[ii]][1],
sd=parameters[[ii]][2])
meanX = etruncnorm(a=parameters[[ii]][3],
b=parameters[[ii]][4], mean=parameters[[ii]][1],
sd=parameters[[ii]][2])
sdX = sqrt(vtruncnorm(a=parameters[[ii]][3],
b=parameters[[ii]][4], mean=parameters[[ii]][1],
sd=parameters[[ii]][2]))
}
if(type[ii]==9) ## Rectangular -- Continuous (Mean, StdDev)
{
checkParam(type[ii],parameters[[ii]],varNames[ii],errorFile)
Mean=parameters[[ii]][1]
StdDev=parameters[[ii]][2]
a = Mean - StdDev*sqrt(3)
b = Mean + StdDev*sqrt(3)
varTemp=runif(nbReal, min=a, max=b)
meanX = parameters[[ii]][1];
sdX = parameters[[ii]][2];
}
if(type[ii]==10) ## Rectangular -- Continuous (Left, Right)
{
checkParam(type[ii],parameters[[ii]],varNames[ii],errorFile)
varTemp=runif(nbReal, min=parameters[[ii]][1],
max=parameters[[ii]][2])
meanX = (parameters[[ii]][1]+parameters[[ii]][2])/2;
sdX = (parameters[[ii]][2]-
parameters[[ii]][1])/sqrt(12);
}
if(type[ii]==11) ## Student t (Mean, StdDev, DF)
{
checkParam(type[ii],parameters[[ii]],varNames[ii],errorFile)
scale =
parameters[[ii]][2]/sqrt(parameters[[ii]][3]/(parameters[[ii]][3]-2))
varTemp = parameters[[ii]][1] + scale*rt(nbReal,
df=parameters[[ii]][3])
meanX = parameters[[ii]][1];
sdX = parameters[[ii]][2];
}
if(type[ii]==12) ## Student t (Center, Scale, DF)
{
checkParam(type[ii],parameters[[ii]],varNames[ii],errorFile)
varTemp = parameters[[ii]][1] +
parameters[[ii]][2]*rt(nbReal, df=parameters[[ii]][3])
meanX = parameters[[ii]][1];
if (parameters[[ii]][3] > 2)
sdX = parameters[[ii]][2] *
sqrt(parameters[[ii]][3]/(parameters[[ii]][3]-2))
else
sdX = Inf
checkParam(type[ii],parameters[[ii]],varNames[ii],errorFile)
varTemp = rtriangle(nbReal, a=parameters[[ii]][1],
b=parameters[[ii]][2], c=(parameters[[ii]][1]+parameters[[ii]][2])/2)
a = parameters[[ii]][1]
b = parameters[[ii]][2]
c = (a+b)/2
meanX = (a+b+c)/3;
sdX = sqrt((a^2 + b^2 + c^2 - a*b - a*c - b*c)/18)
}
if(type[ii]==15) ## Triangular -- Asymmetric (Left, Mode,
Right)
{
checkParam(type[ii],parameters[[ii]],varNames[ii],errorFile)
varTemp = rtriangle(nbReal, a=parameters[[ii]][1],
b=parameters[[ii]][3], c=parameters[[ii]][2])
a = parameters[[ii]][1]
b = parameters[[ii]][3]
c = parameters[[ii]][2]
meanX = (a+b+c)/3;
sdX = sqrt((a^2 + b^2 + c^2 - a*b - a*c - b*c)/18)
}
if(type[ii]==16) ## Uniform -- Continuous (Mean, StdDev)
{
checkParam(type[ii],parameters[[ii]],varNames[ii],errorFile)
Mean=parameters[[ii]][1]
StdDev=parameters[[ii]][2]
a = Mean - StdDev*sqrt(3)
b = Mean + StdDev*sqrt(3)
varTemp=runif(nbReal, min=a, max=b)
meanX = parameters[[ii]][1];
sdX = parameters[[ii]][2];
}
if(type[ii]==17) ## Uniform -- Continuous (Left, Right)
{
checkParam(type[ii],parameters[[ii]],varNames[ii],errorFile)
varTemp=runif(nbReal, min=parameters[[ii]][1],
max=parameters[[ii]][2])
meanX = (parameters[[ii]][1]+parameters[[ii]][2])/2;
sdX = (parameters[[ii]][2]-
parameters[[ii]][1])/sqrt(12);
}
if(type[ii]==18) ## Weibull (Mean, StdDev)
{
checkParam(type[ii],parameters[[ii]],varNames[ii],errorFile)
f = function (betaeta, mu, sigma)
{
beta = betaeta[1]; eta = betaeta[2]
y = numeric(2)
y[1] = eta*gamma(1 + 1/beta) - mu
y[2] = eta^2 * (gamma(1 + 2/beta) - gamma(1 +
1/beta)^2) - sigma^2
return(y)
}
s = nleqslv(x=c(1,1), fn=f, mu=parameters[[ii]][1],
sigma=parameters[[ii]][2])
if (s$termcd %in% c(1,2))
{
beta = s$x[1]; eta = s$x[2]
}else {
errorStop("Cannot assign given Mean and StdDev
to Weibull distribution\n", errorFile)
}
varTemp=rweibull(nbReal, shape=beta, scale=eta)
meanX = parameters[[ii]][1];
sdX = parameters[[ii]][2];
}
if(type[ii]==19) ## Weibull (Shape, Scale)
{
checkParam(type[ii],parameters[[ii]],varNames[ii],errorFile)
varTemp=rweibull(nbReal, shape=parameters[[ii]][1],
scale=parameters[[ii]][2])
meanX = parameters[[ii]][2] * gamma(1 +
1/parameters[[ii]][1]);
sdX = parameters[[ii]][2] * sqrt(gamma(1 +
2/parameters[[ii]][1]) - (gamma(1 + 1/parameters[[ii]][1]))^2);
}
if(type[ii]==20) ## Constant (value)
{
varTemp=rep(parameters[[ii]][1],nbReal)
meanX = parameters[[ii]][1];
sdX = 0;
}
if(type[ii]==21) ## Beta (Mean, StdDev, Left, Right)
{
checkParam(type[ii],parameters[[ii]],varNames[ii],errorFile)
Mean=parameters[[ii]][1]
StdDev=parameters[[ii]][2]
Left=parameters[[ii]][3]
Right=parameters[[ii]][4]
M = (Mean-Left)/(Right-Left)
S = StdDev/sqrt(Right-Left)
a = M*(M*(1-M)-S^2)/S^2
b = (1-M)*(M*(1-M)-S^2)/S^2
checkParam(type[ii],parameters[[ii]],varNames[ii],errorFile)
varTemp=parameters[[ii]][3] + (parameters[[ii]][4]-
parameters[[ii]][3])*rbeta(nbReal, shape1=parameters[[ii]][1],
shape2=parameters[[ii]][2])
meanX =
parameters[[ii]][1]/(parameters[[ii]][1]+parameters[[ii]][2])
sdX =
sqrt(parameters[[ii]][1]*parameters[[ii]][2]/(((parameters[[ii]][1]+pa
rameters[[ii]][2])^2)*(parameters[[ii]][1]+parameters[[ii]][2]+1)))
}
}
if(type[ii]==24) ## Sample distribution provided
{
checkParam(type[ii],parameters[[ii]],varNames[ii],errorFile)
varTemp = sample(parameters[[ii]], nbReal, replace=T)
meanX = mean(parameters[[ii]]);
sdX = sd(parameters[[ii]]);
}
if(type[ii]==26) ## Asymmetric (Median, Left uncertainty, Right
uncertainty, Coverage probability)
{
checkParam(type[ii],parameters[[ii]],varNames[ii],errorFile)
A.model =
asymmetricalModelSelection(x=parameters[[ii]][1] ,
uL=parameters[[ii]][1]-parameters[[ii]][2] ,
uR=parameters[[ii]][3]-
parameters[[ii]][1] , p=parameters[[ii]][4])
varEnv$varTemp=varTemp
eval(parse(text=paste(varNames[ii], "=varTemp",sep="")),envir =
varEnv)
checkParam(type[ii],parameters[[ii]],varNames[ii],errorFile)
varTemp=qbinom(z[,ii], size=1,
prob=parameters[[ii]][1])*1.0
meanX=parameters[[ii]][1];
sdX=sqrt(parameters[[ii]][1]*(1-parameters[[ii]][1]));
}
checkParam(type[ii],parameters[[ii]],varNames[ii],errorFile)
Mean=parameters[[ii]][1]
StdDev=parameters[[ii]][2]
a = Mean*(Mean*(1-Mean)-StdDev^2)/StdDev^2
b = (1-Mean)*(Mean*(1-Mean)-StdDev^2)/StdDev^2
varTemp=qbeta(z[,ii], shape1=a, shape2=b)
meanX = parameters[[ii]][1];
sdX = parameters[[ii]][2];
}
checkParam(type[ii],parameters[[ii]],varNames[ii],errorFile)
varTemp=qbeta(z[,ii], shape1=parameters[[ii]][1],
shape2=parameters[[ii]][2])
meanX =
parameters[[ii]][1]/(parameters[[ii]][1]+parameters[[ii]][2])
sdX =
sqrt(parameters[[ii]][1]*parameters[[ii]][2]/(((parameters[[ii]][1]+pa
rameters[[ii]][2])^2)*(parameters[[ii]][1]+parameters[[ii]][2]+1)))
}
if(type[ii]==3) ## Chi-Squared (DF)
{
checkParam(type[ii],parameters[[ii]],varNames[ii],errorFile)
varTemp=qchisq(z[,ii], df=parameters[[ii]][1])
meanX = parameters[[ii]][1];
sdX = sqrt(2*parameters[[ii]][1]);
}
if(type[ii]==4) ## Exponential (Mean)
{
checkParam(type[ii],parameters[[ii]],varNames[ii],errorFile)
varTemp= qexp(z[,ii], rate=1/parameters[[ii]][1])
meanX = parameters[[ii]][1];
sdX = parameters[[ii]][1];
}
if(type[ii]==5) ## Gamma (Mean, StdDev)
{
checkParam(type[ii],parameters[[ii]],varNames[ii],errorFile)
Mean=parameters[[ii]][1]
StdDev=parameters[[ii]][2]
Shape = (Mean/StdDev)^2
Scale = StdDev^2/Mean
varTemp=qgamma(z[,ii], shape=Shape, scale=Scale)
meanX = parameters[[ii]][1];
sdX = parameters[[ii]][2];
}
if(type[ii]==6) ## Gamma (Shape, Scale)
{
checkParam(type[ii],parameters[[ii]],varNames[ii],errorFile)
varTemp=qgamma(z[,ii], shape=parameters[[ii]][1],
scale=parameters[[ii]][2])
meanX = parameters[[ii]][1]* parameters[[ii]][2];
sdX = sqrt(parameters[[ii]][1])* parameters[[ii]][2];
}
if(type[ii]==7) ## Gaussian (Mean, StdDev)
{
checkParam(type[ii],parameters[[ii]],varNames[ii],errorFile)
varTemp=qnorm(z[,ii], mean=parameters[[ii]][1],
sd=parameters[[ii]][2])
meanX = parameters[[ii]][1];
sdX = parameters[[ii]][2];
}
if(type[ii]==8) ## Gaussian -- Truncated (Mean, StdDev, Left,
Right)
{
checkParam(type[ii],parameters[[ii]],varNames[ii],errorFile)
varTemp=qtruncnorm(z[,ii], a=parameters[[ii]][3],
b=parameters[[ii]][4], mean=parameters[[ii]][1],
sd=parameters[[ii]][2])
meanX = etruncnorm(a=parameters[[ii]][3],
b=parameters[[ii]][4], mean=parameters[[ii]][1],
sd=parameters[[ii]][2])
sdX = sqrt(vtruncnorm(a=parameters[[ii]][3],
b=parameters[[ii]][4], mean=parameters[[ii]][1],
sd=parameters[[ii]][2]))
}
if(type[ii]==9) ## Rectangular -- Continuous (Mean, StdDev)
{
checkParam(type[ii],parameters[[ii]],varNames[ii],errorFile)
Mean=parameters[[ii]][1]
StdDev=parameters[[ii]][2]
a = Mean - StdDev*sqrt(3)
b = Mean + StdDev*sqrt(3)
varTemp=qunif(z[,ii], min=a, max=b)
meanX = parameters[[ii]][1];
sdX = parameters[[ii]][2];
}
if(type[ii]==10) ## Rectangular -- Continuous (Left, Right)
{
checkParam(type[ii],parameters[[ii]],varNames[ii],errorFile)
varTemp=qunif(z[,ii], min=parameters[[ii]][1],
max=parameters[[ii]][2])
meanX = (parameters[[ii]][1]+parameters[[ii]][2])/2;
sdX = (parameters[[ii]][2]-
parameters[[ii]][1])/sqrt(12);
}
if(type[ii]==11) ## Student t (Mean, StdDev, DF)
{
checkParam(type[ii],parameters[[ii]],varNames[ii],errorFile)
scale =
parameters[[ii]][2]/sqrt(parameters[[ii]][3]/(parameters[[ii]][3]-2))
varTemp = parameters[[ii]][1] + scale*qt(z[,ii],
df=parameters[[ii]][3])
meanX = parameters[[ii]][1];
sdX = parameters[[ii]][2];
}
if(type[ii]==12) ## Student t (Center, Scale, DF)
{
checkParam(type[ii],parameters[[ii]],varNames[ii],errorFile)
varTemp = parameters[[ii]][1] +
parameters[[ii]][2]*qt(z[,ii], df=parameters[[ii]][3])
meanX = parameters[[ii]][1];
if (parameters[[ii]][3] > 2)
sdX = parameters[[ii]][2] *
sqrt(parameters[[ii]][3]/(parameters[[ii]][3]-2))
else
sdX = Inf
}
if(type[ii]==13) ## Triangular -- Symmetric (Mean, StdDev)
{
checkParam(type[ii],parameters[[ii]],varNames[ii],errorFile)
Mean=parameters[[ii]][1]
StdDev=parameters[[ii]][2]
c = Mean
a = Mean - StdDev*sqrt(6)
b = Mean + StdDev*sqrt(6)
varTemp = qtriangle(z[,ii], a, b, c)
meanX = parameters[[ii]][1];
sdX = parameters[[ii]][2];
}
if(type[ii]==14) ## Triangular -- Symmetric (Left, Right)
{
checkParam(type[ii],parameters[[ii]],varNames[ii],errorFile)
varTemp = qtriangle(z[,ii], a=parameters[[ii]][1],
b=parameters[[ii]][2], c=(parameters[[ii]][1]+parameters[[ii]][2])/2)
a = parameters[[ii]][1]
b = parameters[[ii]][2]
c = (a+b)/2
meanX = (a+b+c)/3;
sdX = sqrt((a^2 + b^2 + c^2 - a*b - a*c - b*c)/18)
}
if(type[ii]==15) ## Triangular -- Asymmetric (Left, Mode,
Right)
{
checkParam(type[ii],parameters[[ii]],varNames[ii],errorFile)
varTemp = qtriangle(z[,ii], a=parameters[[ii]][1],
b=parameters[[ii]][3], c=parameters[[ii]][2])
a = parameters[[ii]][1]
b = parameters[[ii]][3]
c = parameters[[ii]][2]
meanX = (a+b+c)/3;
sdX = sqrt((a^2 + b^2 + c^2 - a*b - a*c - b*c)/18)
}
if(type[ii]==16) ## Uniform -- Continuous (Mean, StdDev)
{
checkParam(type[ii],parameters[[ii]],varNames[ii],errorFile)
Mean=parameters[[ii]][1]
StdDev=parameters[[ii]][2]
a = Mean - StdDev*sqrt(3)
b = Mean + StdDev*sqrt(3)
varTemp=qunif(z[,ii], min=a, max=b)
meanX = parameters[[ii]][1];
sdX = parameters[[ii]][2];
}
if(type[ii]==17) ## Uniform -- Continuous (Left, Right)
{
checkParam(type[ii],parameters[[ii]],varNames[ii],errorFile)
varTemp=qunif(z[,ii], min=parameters[[ii]][1],
max=parameters[[ii]][2])
meanX = (parameters[[ii]][1]+parameters[[ii]][2])/2;
sdX = (parameters[[ii]][2]-
parameters[[ii]][1])/sqrt(12);
}
if(type[ii]==18) ## Weibull (Mean, StdDev)
{
checkParam(type[ii],parameters[[ii]],varNames[ii],errorFile)
f = function (betaeta, mu, sigma)
{
beta = betaeta[1]; eta = betaeta[2]
y = numeric(2)
y[1] = eta*gamma(1 + 1/beta) - mu
y[2] = eta^2 * (gamma(1 + 2/beta) - gamma(1 +
1/beta)^2) - sigma^2
return(y)
}
s = nleqslv(x=c(1,1), fn=f, mu=parameters[[ii]][1],
sigma=parameters[[ii]][2])
if (s$termcd %in% c(1,2))
{
beta = s$x[1]
eta = s$x[2]
}
else
errorStop("Cannot assign given Mean and StdDev
to Weibull distribution\n",errorFile)
}
if(type[ii]==20) ## Constant (value)
{
varTemp=rep(parameters[[ii]][1],nbReal)
meanX = parameters[[ii]][1];
sdX = 0;
}
if(type[ii]==21) ## Beta (Mean, StdDev, Left, Right)
{
checkParam(type[ii],parameters[[ii]],varNames[ii],errorFile)
Mean=parameters[[ii]][1]
StdDev=parameters[[ii]][2]
Left=parameters[[ii]][3]
Right=parameters[[ii]][4]
M = (Mean-Left)/(Right-Left)
S = StdDev/sqrt(Right-Left)
a = M*(M*(1-M)-S^2)/S^2
b = (1-M)*(M*(1-M)-S^2)/S^2
}
if(type[ii]==22) ## Beta (Shape1, Shape2, Left, Right)
{
checkParam(type[ii],parameters[[ii]],varNames[ii],errorFile)
varTemp=parameters[[ii]][3] + (parameters[[ii]][4]-
parameters[[ii]][3])*qbeta(z[,ii], shape1=parameters[[ii]][1],
shape2=parameters[[ii]][2])
meanX =
parameters[[ii]][1]/(parameters[[ii]][1]+parameters[[ii]][2])
sdX =
sqrt(parameters[[ii]][1]*parameters[[ii]][2]/(((parameters[[ii]][1]+pa
rameters[[ii]][2])^2)*(parameters[[ii]][1]+parameters[[ii]][2]+1)))
checkParam(type[ii],parameters[[ii]],varNames[ii],errorFile)
varTemp = quantile(parameters[[ii]], probs = z[,ii],
name=FALSE)
meanX = mean(parameters[[ii]]);
sdX = sd(parameters[[ii]]);
}
if(type[ii]==26) ## Asymmetric (Median, Left uncertainty, Right
uncertainty, Coverage probability)
{
checkParam(type[ii],parameters[[ii]],varNames[ii],errorFile)
A.model =
asymmetricalModelSelection(x=parameters[[ii]][1] ,
uL=parameters[[ii]][1]-parameters[[ii]][2] ,
}
varEnv$varTemp=varTemp
eval(parse(text=paste(varNames[ii], "=varTemp",sep="")),envir =
varEnv)
#Check Parameters
checkParam =
function(type,parameters,varNames,outputFile,tol=sqrt(.Machine$double.
eps))
{
if(type==0) ## Bernoulli (Prob. of success)
{
if(parameters[1]<=0 || parameters[1]>=1 )
errorStop(paste("In quantity ",varNames,":
Probability must be greater than 0 and smaller than 1"), outputFile)
}
if(type==1) ## Beta (Mean, StdDev)
{
mu = parameters[1]
sigma = parameters[2]
if(mu<=0||mu>=1) {
errorStop(
paste("In quantity ", varNames,": Mean
must be greater than 0 and smaller than 1"), outputFile) }
if(sigma<=0||sigma>=0.5) {
errorStop(
paste("In quantity ", varNames,": StdDev
must be greater than 0 and smaller than 1/2"),outputFile) }
alpha = mu*(mu*(1-mu)-sigma^2)/sigma^2
beta = (1-mu)*(mu*(1-mu)-sigma^2)/sigma^2
if(alpha<=0 || beta<=0) {
errorStop(
paste("In quantity ", varNames,"Illegal
combination of Mean and StdDev"),outputFile) }
if ((abs(alpha-beta)<tol) & (alpha < 1) &
((sigma < sqrt(1/12) || (sigma > sqrt(1/4)))))
{
errorStop(
paste("In quantity ", varNames,": StdDev
must be between ", signif(1/sqrt(12),3), "and 1/2"),outputFile) }
if ((abs(alpha-beta)<tol) & (min(c(alpha,beta)) > 1) &
(sigma > sqrt(1/12))) {
errorStop(
paste("In quantity ", varNames, ":
StdDev must be less than ", signif(sqrt(1/12), 3)),outputFile) }
if ((abs(alpha-beta)<tol) & (alpha > 2) & (sigma >
sqrt(1/20))) {
errorStop(
paste("In quantity ", varNames,": StdDev
must be less than ", signif(sqrt(1/20), 3)),outputFile) }
if ((alpha < 1) & (beta > 1) & (sigma >
sqrt((5*sqrt(5)-11)/2))) {
errorStop(paste("In quantity ", varNames,":
StdDev must be less than ",signif(sqrt((5*sqrt(5)-11)/2),
3)),outputFile) }
if ((abs(alpha-1)<tol) & (beta > 1) & (beta < 2) &
((sigma < sqrt(1/18) || (sigma > sqrt(1/12)))))
{
errorStop(
paste("In quantity ", varNames,": StdDev
must be between",signif(1/sqrt(18),3), "and", signif(1/sqrt(12),
3)),outputFile) }
if ((abs(alpha-1)<tol) & (beta > 2) & ((sigma >
sqrt(1/18)))) {
errorStop(
paste("In quantity ", varNames,": StdDev
must be less than", signif(1/sqrt(18),3)),outputFile) }
if ((alpha > 1) & (alpha < 2) & (abs(beta-1) < tol) &
((sigma < 1/sqrt(18)) || (sigma > 1/sqrt(12))))
{
errorStop(
paste("In quantity ", varNames,": StdDev
must be between",signif(1/sqrt(18),3), "and", signif(1/sqrt(12),
3)),outputFile) }
if ((alpha > 2) & (abs(beta-1)<tol) & ((sigma >
sqrt(1/18)))) {
errorStop(
paste("In quantity ", varNames, ":
StdDev must be less than", signif(1/sqrt(18),3)),outputFile) }
}
if(type==2) ## Beta (Shape1, Shape2)
{
if(parameters[1]<=0 || parameters[2]<=0)
errorStop(paste("In quantity ",varNames,": Both
shape parameters must be positive"), outputFile)
}
if(type==3) ## Chi-Squared (DF)
{
if(parameters[1]<=0)
errorStop(paste("In quantity ",varNames,": No.
of degrees of freedom must be positive"), outputFile)
}
if(type==4) ## Exponential (Mean)
{
if(parameters[1]<=0)
errorStop(paste("In quantity ",varNames,": The
mean must be positive"), outputFile)
}
if(type==5) ## Gamma (Mean, StdDev)
{
if(parameters[2]<=0)
errorStop(paste("In quantity ",varNames,":
StdDev must be positive"), outputFile)
if(parameters[1]<=0)
errorStop(paste("In quantity ",varNames,": The
mean must be positive"), outputFile)
}
if(type==6) ## Gamma (Shape, Scale)
{
if(parameters[1]<=0 || parameters[2]<=0)
errorStop(paste("In quantity ",varNames,": The
shape and the scale must be positive"), outputFile)
}
if(type==7) ## Gaussian (Mean, StdDev)
{
if(parameters[2]<=0)
errorStop(paste("In quantity ",varNames,":
StdDev must be positive"), outputFile)
}
if(type==8) ## Gaussian -- Truncated (Mean, StdDev, Left,
Right)
{
if(parameters[2]<=0)
errorStop(paste("In quantity ",varNames,":
StdDev must be positive"), outputFile)
if(parameters[3]>=parameters[4])
errorStop(paste("In quantity ",varNames,": Left
must be less than Right"), outputFile)
}
if(type==9) ## Rectangular -- Continuous (Mean, StdDev)
{
if(parameters[2]<=0)
errorStop(paste("In quantity ",varNames,":
StdDev must be positive"), outputFile)
}
if(type==10) ## Rectangular -- Continuous (Left, Right)
{
if(parameters[1]>=parameters[2])
errorStop(paste("In quantity ",varNames,": Left
must be less than Right"), outputFile)
}
if(type==11) ## Student t (Mean, StdDev, DF)
{
if(parameters[2]<=0)
errorStop(paste("In quantity ",varNames,":
StdDev must be positive"), outputFile)
if(parameters[3]<=2)
errorStop(paste("In quantity ",varNames,": No.
of degrees of freedom must be greater than 2"), outputFile)
}
if(type==12) ## Student t (Center, Scale, DF)
{
if(parameters[2]<=0)
errorStop(paste("In quantity ",varNames,":
Scale must be positive"), outputFile)
if(parameters[3]<=0)
errorStop(paste("In quantity ",varNames,": No.
of degrees of freedom must be positive"), outputFile)
}
mu = parameters[1]
sigma = parameters[2]
Left = parameters[3]
Right = parameters[4]
if(mu<=Left||mu>=Right) {
errorStop(
paste("In quantity ", varNames,
": Mean must be greater than Left and smaller than
Right"),
outputFile) }
if(sigma<=0||sigma>=0.5*sqrt(Right-Left)) {
errorStop(
paste("In quantity ", varNames,
": StdDev must be greater than 0 and smaller
than",
signif(0.5*sqrt(Right-Left), 3)),
outputFile) }
M = (mu-Left)/(Right-Left)
S = sigma/sqrt(Right-Left)
alpha = M*(M*(1-M)-S^2)/S^2
beta = (1-M)*(M*(1-M)-S^2)/S^2
if(alpha<=0 || beta<=0) {
errorStop(
paste("In quantity ", varNames,
": Illegal combination of Mean and
StdDev"),outputFile) }
if ((abs(alpha-beta)<tol) & (alpha < 1) &
((sigma < (Right-Left)*sqrt(1/12) ||
(sigma > (Right-Left)*sqrt(1/4))))) {
errorStop(
paste("In quantity ", varNames,
": StdDev must be between",
signif((Right-Left)*sqrt(1/12),3),
"and", signif((Right-
Left)*sqrt(1/4),3)),outputFile) }
if ((abs(alpha-beta)<tol) & (min(c(alpha,beta)) > 1) &
(sigma > (Right-Left)*sqrt(1/12))) {
errorStop(
paste("In quantity ", varNames,
": StdDev must be less than",
signif((Right-Left)*sqrt(1/12),
3)),outputFile) }
if ((abs(alpha-beta)<tol) & (alpha > 2) &
(sigma > (Right-Left)*sqrt(1/20))) {
errorStop(
paste("In quantity ", varNames,
": StdDev must be less than",
signif((Right-Left)*sqrt(1/20),
3)),outputFile) }
if ((alpha < 1) & (beta > 1) &
(sigma > (Right-Left)*sqrt((5*sqrt(5)-11)/2))) {
errorStop(
paste("In quantity ", varNames,
": StdDev must be less than",
signif((Right-Left)*sqrt((5*sqrt(5)-11)/2),
3)),outputFile) }
if ((abs(alpha-1)<tol) & (beta > 1) & (beta < 2) &
((sigma < (Right-Left)*sqrt(1/18) ||
(sigma > (Right-Left)*sqrt(1/12))))) {
errorStop(
paste("In quantity ", varNames,
": StdDev must be between",
signif((Right-Left)*sqrt(1/18), 3), "and",
signif((Right-Left)*sqrt(1/12),
3)),outputFile) }
if ((abs(alpha-1)<tol) & (beta > 2) &
((sigma > (Right-Left)*sqrt(1/18)))) {
errorStop(
paste("In quantity ", varNames,
": StdDev must be less than",
signif((Right-Left)*sqrt(1/18), 3)),
outputFile) }
if ((alpha > 1) & (alpha < 2) & (abs(beta-1) < tol) &
((sigma < (Right-Left)*sqrt(1/18)) ||
(sigma > (Right-Left)*sqrt(1/12)))) {
errorStop(
paste("In quantity ", varNames,
": StdDev must be between",
signif((Right-Left)*sqrt(1/18), 3), "and",
signif((Right-Left)*sqrt(1/12),
3)),outputFile) }
if ((alpha > 2) & (abs(beta-1)<tol) &
((sigma > (Right-Left)*sqrt(1/18)))) {
errorStop(
paste("In quantity ", varNames,
": StdDev must be less than",
signif((Right-
Left)*sqrt(1/18),3)),outputFile) }
}
if(alpha<=0 || beta<=0) {
errorStop(
paste("In quantity ", varNames,
": Both shape parameters must be positive"),
outputFile) }
if(parameters[4]<=0 || parameters[4]>=1 )
errorStop(paste("In quantity ",varNames,": Probability must be
greater than 0 and smaller than 1"), outputFile)
}
#Read config file and run computation
args<-commandArgs(TRUE)
filename = args[1]
if(strsplit(line, "=")[[1]][1]=="version")
{
version = strsplit(line, "=")[[1]][2]
}else
{
version = "1.0.1"
}
cat(paste("Conf file version: " , version,"\n"))
#outputFile = paste0(dirname(filename),"/results")
line = readLines(fh, n=1 )
symmetrical=FALSE
if(strsplit(line, "=")[[1]][1]=="symmetrical")
{
if(strsplit(line, "=")[[1]][2]=="true")
symmetrical=TRUE
line = readLines(fh, n=1 )
}
}
close(fh)
if (nbOut == 1)
try(distrib(nbVar,nbReal,varNames,expression,type,parameters,sy
mmetrical,correlation,outputFile,copulaType,copulaDf,pretreatment))
if(nbOut > 1)
{
for (ii in 1:nbOut)
{
set.seed(seed)
outputfileTemp =paste(outputFile,ii,sep = "")
expressionTemp = expressions[ii]
pretreatmentTemp = pretreatments[ii]
try(distrib(nbVar,nbReal,varNames,expressionTemp,type,parameter
s,symmetrical,correlation,outputfileTemp,copulaType,copulaDf,pretreatm
entTemp))
}
try(mergeOutput(outputFile,nbOut))
}