################################################################################
################################################################################
#' @name get.dataForWith
#' @aliases get.dataForWith
#' @title Non-executable auxiliary function
#' @usage get.dataForWith(item,rriskModel,catResults=FALSE,fullc=TRUE,run=FALSE,run2d=FALSE,catEval=TRUE)
#' @param item ...
#' @param rriskModel ...
#' @param catResults ...
#' @param fullc ...
#' @param run ...
#' @param run2d ...
#' @param catEval ...
#' @keywords items
#' @export
get.dataForWith<-function(item,rriskModel,catResults=FALSE,fullc=TRUE,run=FALSE,run2d=FALSE,catEval=TRUE){
#-----------------------------------------------------------------------------
# define some help variables
#-----------------------------------------------------------------------------
items<-rriskModel@items@items
availableItems<-c()
availableFdocs<-c()
valuesOfEvaluatedItems<-c()
dataForWith<-list()
strata.names<-list() # names of strata of all available stra-items
#-----------------------------------------------------------------------------
# define output
#-----------------------------------------------------------------------------
on.exit(return(dataForWith))
#-----------------------------------------------------------------------------
# Evaluiere jeden item
#-----------------------------------------------------------------------------
if(length(items)>0){
for(i in 1:length(items)){
if(!is.null(items[[i]])){
if(items[[i]]@name!=item@name){
#-----------------------------------------------------------------------
# set number of test evaluation to rriskModel@settings@Ntest
#-----------------------------------------------------------------------
if(run==FALSE){
items[[i]]@fullc<-gsub(x=items[[i]]@fullc,pattern="rriskModel@settings@N",replacement="rriskModel@settings@Ntest")
items[[i]]@relaxc<-gsub(x=items[[i]]@relaxc,pattern="rriskModel@settings@N",replacement="rriskModel@settings@Ntest")
} # end if(run==FALSE){
#-----------------------------------------------------------------------
availableItems<-c(availableItems,items[[i]]@name)
if(items[[i]]@typecode=="stra"){
strata.names[[length(strata.names)+1]]<-as.character(items[[i]]@data$stratum$stid)
names(strata.names)[length(strata.names)]<-items[[i]]@name
dataForWith[[length(dataForWith)+1]]<-items[[i]]@data
names(dataForWith)[length(dataForWith)]<-items[[i]]@name
if(catEval==TRUE)cat(paste("\nEvaluating ",items[[i]]@name," item...OK\n",sep=""))
} else if(items[[i]]@typecode=="data"){ # sammele alle Datensätze
dataForWith[[length(dataForWith)+1]]<-items[[i]]@data
names(dataForWith)[length(dataForWith)]<-items[[i]]@name
if(catEval==TRUE)cat(paste("\nEvaluating ",items[[i]]@name," item...OK\n",sep=""))
} else if(items[[i]]@typecode=="fdoc"){ # sammele alle benutzerdefinierte Funktionen
availableFdocs<-c(availableFdocs,items[[i]]@name)
assign(items[[i]]@name,items[[i]]@data,envir=.GlobalEnv)
if(catEval==TRUE)cat(paste("\nEvaluating ",items[[i]]@name," item...OK\n",sep=""))
} else if(items[[i]]@typecode!="bdjp" & items[[i]]@typecode!="stra"){
if(fullc==TRUE){
textForWith<-items[[i]]@fullc
} else {
textForWith<-items[[i]]@relaxc
}
# versuche, Item-Kommado zu evaluieren
tryResult<-try(with(data=dataForWith,eval(parse(text=textForWith))),silent=TRUE)
if (inherits(tryResult, "try-error") | is.null(tryResult)){
cat(paste("\nEvaluating ",items[[i]]@name," item...ERROR\n",sep=""))
#stop("Item ",items[[i]]@name," could not be evaluated or has been evaluated to NULL!\n",call.=FALSE)
cat("Item ",items[[i]]@name," could not be evaluated or has been evaluated to NULL!\n")
next()
} else { # falls keine Fehlermeldung -> Item erfolgreich evaluiert
if(items[[i]]@stratum!="" & items[[i]]@typecode!="mxrv"){
stratum<-items[[i]]@stratum
corresponding.strata.item<-which(names(strata.names)==stratum)
if(length(corresponding.strata.item)>0){ # also falls es einen strata-item gibt
if(items[[i]]@typecode=="numv"){
names(tryResult)<-strata.names[[corresponding.strata.item]]
} else {
colnames(tryResult)<-strata.names[[corresponding.strata.item]]
tryResult<-data.frame(tryResult)
}
if(catEval==TRUE)cat(paste("\nEvaluating ",items[[i]]@name," item...OK\n",sep=""))
} else {
cat(paste("\nEvaluating ",items[[i]]@name," item...ERROR\n",sep=""))
warning(paste("There is no strata item that corresponds to the stratified item '",items[[i]]@name,"'!",sep=""),call.=FALSE,immediate.=TRUE)
}
} else {
if(catEval==TRUE)cat(paste("\nEvaluating ",items[[i]]@name," item...OK\n",sep=""))
}
dataForWith[[length(dataForWith)+1]]<-tryResult
names(dataForWith)[length(dataForWith)]<-items[[i]]@name
#-------------------------------------------------------------------
#
#-------------------------------------------------------------------
if(run2d==TRUE){
if(items[[i]]@typecode=="mcrv" & (items[[i]]@rolecode=="u" | items[[i]]@rolecode=="uv")){
dataForWith[[length(dataForWith)]]<-as.vector(dataForWith[[length(dataForWith)]])
}
}
if(catResults==TRUE){
if(fullc==TRUE){
cat("Full command = ",items[[i]]@fullc,"\n")
} else {
cat("Relax command = ",items[[i]]@relaxc,"\n\n")
}
}
} # end if (inherits(tryResult, "try-error"))
}
} else break()
}
} # end for
} # end if(length(items)>0)
}# end of function get.dataForWith()
################################################################################
################################################################################
#' @name menu.define.mxrv
#' @aliases menu.define.mxrv
#' @title Non-executable auxiliary function
#' @usage menu.define.mxrv(item,rriskModel,menuLevel=1)
#' @param item ...
#' @param rriskModel ...
#' @param menuLevel ...
#' @keywords items
#' @export
menu.define.mxrv<-function(item,rriskModel,menuLevel=1){
#-----------------------------------------------------------------------------
# define help variables
#-----------------------------------------------------------------------------
on.exit(return(invisible(item)))
levelTabulator<-paste(rep("\t",menuLevel),sep="",collapse="")
levelTabulator<-paste("\n",levelTabulator,sep="")
#-----------------------------------------------------------------------------
# go into teh while-loop
#-----------------------------------------------------------------------------
choices<-c("by sampling from stratified mcrv item","by sampling from several non-stratified items","Exit dialog")
input<-99
while(!is.element(input,seq(1:length(choices)))){
input<-mymenu(title="Please choose the way how you wish to define the mxrv item",choices=choices,help="No further help available",levelTabulator=levelTabulator)
if(input==1){
#--------------------------------------------------------------------------
#by sampling from stratified mcrv item
#-------------------------------------------------------------------------
item<-menu.define.mxrv.stramcrv(item,rriskModel,menuLevel=menuLevel+1)
break()
} else if (input==2){
#-------------------------------------------------------------------------
# by sampling from several non-stratified items
#-------------------------------------------------------------------------
item<-menu.define.mxrv.nonstramcrv(item,rriskModel,menuLevel=menuLevel+1)
break()
} else if (input==length(choices)){
break()
}
input<-99
} # end while
} # end of fucntion menu.define.mxrv
################################################################################
################################################################################
#' @name menu.define.mxrv.stramcrv
#' @aliases menu.define.mxrv.stramcrv
#' @title Non-executable auxiliary function
#' @usage menu.define.mxrv.stramcrv(item,rriskModel,menuLevel=1)
#' @param item ...
#' @param rriskModel ...
#' @param menuLevel ...
#' @keywords items
#' @export
menu.define.mxrv.stramcrv<-function(item,rriskModel,menuLevel=1){
#-----------------------------------------------------------------------------
# define output
#-----------------------------------------------------------------------------
on.exit(return(invisible(item)))
levelTabulator<-paste(rep("\t",menuLevel),sep="",collapse="")
levelTabulator<-paste("\n",levelTabulator,sep="")
#-----------------------------------------------------------------------------
# define some help variables
#-----------------------------------------------------------------------------
items<-rriskModel@items@items
mcrv.items<-c()
mcrv.items.index<-c()
stratum.item.index<-c()
#-----------------------------------------------------------------------------
# get all mcrv items with the same statum as current mxrv item
#-----------------------------------------------------------------------------
if(length(items)>0){
items<-items[1:(length(items)-1)]
for(i in 1:length(items)){
if(items[[i]]@typecode=="mcrv" & items[[i]]@stratum==item@stratum){
mcrv.items<-c(mcrv.items,items[[i]]@name)
mcrv.items.index<-c(mcrv.items.index,i)
} else if(items[[i]]@typecode=="stra" & items[[i]]@name==item@stratum){
stratum.item.index<-i
}# end if(items[[i]]@typecode=="mcrv" & items[[i]]@stratum==item@stratum){
} # end for(i in 1:length(items)){
if(length(mcrv.items)==0){
stop("\nThe model does not contain any mcrv items with the same stratum as the current mxrv item!\n",call.=FALSE)
} # end if(length(mcrv.items)==0){
} else {
stop("\nThe model does not contain any items!\n",call.=FALSE)
}# end if(length(items)>0){
#-----------------------------------------------------------------------------
# show corresponding strata
#-----------------------------------------------------------------------------
cat("\nThe corresponding strata are:\n")
print(items[[stratum.item.index]]@data$stratum)
#-----------------------------------------------------------------------------
# falls einige mcrv items mit der gleichen schichtung wie mxrv vorhanden gehe weiter
#-----------------------------------------------------------------------------
choices<-c(mcrv.items,"Exit dialog")
input<-99
while(!is.element(input,seq(1:length(choices)))){
input<-mymenu(title="Please choose stratified mcrv item to define the mxrv item",choices=choices,help="No further help available",levelTabulator=levelTabulator)
input<-as.numeric(input)
if(input!=length(choices)){
item<-define.mxrv.stramcrv(item,rriskModel,mcrv.item.name=mcrv.items[input])
break()
} else if (input==length(choices)){
break()
}
input<-99
} # end while
} # end of function menu.define.mxrv.stramcrv
################################################################################
################################################################################
#' @name define.mxrv.stramcrv
#' @aliases define.mxrv.stramcrv
#' @title Non-executable auxiliary function
#' @usage define.mxrv.stramcrv(item,rriskModel,mcrv.item.name)
#' @param item ...
#' @param rriskModel ...
#' @param mcrv.item.name ...
#' @keywords items
#' @export
define.mxrv.stramcrv<-function(item,rriskModel,mcrv.item.name){
#-----------------------------------------------------------------------------
# define output
#-----------------------------------------------------------------------------
on.exit(return(invisible(item)))
#-----------------------------------------------------------------------------
# define help variables
#-----------------------------------------------------------------------------
weights.string<-paste(item@stratum,"$strv",sep="")
fullc<-paste("matrix(ncol=1,","data=","rrisksample(data=",mcrv.item.name,",weights=",weights.string,"),byrow=TRUE)",sep="")
item.temp<-item
item.temp@fullc<-fullc
definition<-paste("Mixed distribution based on: ",mcrv.item.name,sep="")
cat("\n----------------------------------------------------------------------\nEvaluating item values with predefined distribution parameters...\n----------------------------------------------------------------------\n")
fullcValues<-itemsEvaluation(item.temp,rriskModel,run=TRUE)# hier wird die Ausführbarkeit von fullc geprüft
cat("\n***************************************\nFull command for",item@name,"\n***************************************\n")
if (inherits(fullcValues, "try-error")){
cat("Full command expression",fullc,"could not be evaluated !\n")
} else { # Weise Item-Slots 'definition' und 'fullc' Inhalte zu
colnames(fullcValues)<-item@name
# Falls 'fullc' ausführbar ist, lasse die Zwischenergebnisse anzeigen
cat("\nDimension of test evaluation: ");cat(dim(fullcValues));cat("\n")
cat("\nitem@fullc=",fullc,"\n")
cat("\nGenerated item values (full command):\n");print(head(data.frame(fullcValues)));cat("...\n")
cat("\nSummary statistics of item values (full command):\n"); print(summary(fullcValues),digits=4);cat("\n")
item@fullc<-fullc
cat("\n***************************************\nSymbolical definition for",item@name,"\n***************************************\n")
cat("\nitem@definition=",definition,"\n")
item@definition<-definition
#--------------------------------------------------------------------------
# save simulated item value in data-slot
#--------------------------------------------------------------------------
item@data<-summary(fullcValues)
}
#-----------------------------------------------------------------------------
# hier wird die Ausführbarkeit von 'relaxc' geprüft
#----------------------------------------------------------------------------
plausimin<-item@plausimin
plausimax<-item@plausimax
relaxc<-paste("matrix(ncol=1,data=rudiscrete(n=rriskModel@settings@N,min=",plausimin,",max=",plausimax,"),byrow=TRUE)",sep="")
relaxc.test<-paste("matrix(ncol=1,data=rudiscrete(n=rriskModel@settings@Ntest,min=",plausimin,",max=",plausimax,"),byrow=TRUE)",sep="")
relaxcValues<-try(eval(parse(text=relaxc.test)),silent=TRUE)
if (inherits(relaxcValues, "try-error"))
{ cat("Relax command expression",relaxc,"could not be evaluated !\n")
}else
{ colnames(relaxcValues)<-item@name
cat("\n***************************************\nRelax command for",item@name,"\n***************************************\n")
cat("\nDimension of test evaluation: ");cat(dim(relaxcValues));cat("\n")
cat("\nitem@relaxc=",relaxc,"\n")
cat("\nGenerated item values (relax command):\n");print(head(data.frame(relaxcValues)));cat("...\n")
cat("\nSummary statistics of item values (relax command):\n"); print(summary(relaxcValues),digits=4);cat("\n")
item@relaxc<-relaxc
}
} # end of function define.mxrv.stramcrv()
################################################################################
################################################################################
#' @name menu.define.mxrv.nonstramcrv
#' @aliases menu.define.mxrv.nonstramcrv
#' @title Non-executable auxiliary function
#' @usage menu.define.mxrv.nonstramcrv(item,rriskModel,menuLevel=1)
#' @param item ...
#' @param rriskModel ...
#' @param menuLevel ...
#' @keywords items
#' @export
menu.define.mxrv.nonstramcrv<-function(item,rriskModel,menuLevel=1){
#-----------------------------------------------------------------------------
# define output
#-----------------------------------------------------------------------------
on.exit(return(invisible(item)))
levelTabulator<-paste(rep("\t",menuLevel),sep="",collapse="")
levelTabulator<-paste("\n",levelTabulator,sep="")
#-----------------------------------------------------------------------------
# define help variables
#-----------------------------------------------------------------------------
items.nonstra.names<-c()
items.nonstra.index<-c()
items<-rriskModel@items@items
stratum.item<-c()
#-----------------------------------------------------------------------------
# get all non-stratified items and corresponding stratum-Item
#-----------------------------------------------------------------------------
if(length(items)>0){
for(i in 1:length(items)){
if(items[[i]]@typecode=="mcrv" & items[[i]]@stratum==""){
items.nonstra.names<-c(items.nonstra.names,items[[i]]@name)
items.nonstra.index<-c(items.nonstra.index,i)
} else if (items[[i]]@typecode=="stra" & items[[i]]@name==item@stratum) {
stratum.item<-items[[i]]
}# end if(items[[i]]@typecode=="mcrv" & items[[i]]@stratum==""){
} # end for
#---------------------------------------------------------------------------
# falls kein stratum-Item gefunden
#---------------------------------------------------------------------------
if(length(stratum.item)==0){
stop("\nThe model does not contain corresponding stratum item!\n",call.=FALSE)
} else {
stratum.length<-nrow(stratum.item@data$stratum)
}# end if(length(stratum.item)==0){
#---------------------------------------------------------------------------
# falls keine nicht-geschichtete mcrv-Items vorhanden, breche ab!
#---------------------------------------------------------------------------
if(length(items.nonstra.names)==0){
stop("\nThe model does not contain any non-stratified mcrv items!\n",call.=FALSE)
} # end if(length(mcrv.items)==0){
} else {
stop("\nThe model does not contain any items!\n",call.=FALSE)
}# end if(length(items)>0){
#-----------------------------------------------------------------------------
# show corresponding strata
#-----------------------------------------------------------------------------
cat("\nThe corresponding strata are:\n")
print(stratum.item@data$stratum)
#-----------------------------------------------------------------------------
# falls einige mcrv items mit der gleichen schichtung wie mxrv vorhanden gehe weiter
#-----------------------------------------------------------------------------
choices<-c(items.nonstra.names,"Exit dialog")
input<-99
while(!is.element(input,seq(1:length(choices)))){
input<-mymenu1(title=paste("Please choose ",stratum.length," non-stratified mcrv items to define the mxrv item",sep=""),choices=choices,help="No further help available",levelTabulator=levelTabulator)
input<-as.numeric(unique(input))
if(!setequal(input,length(choices))){ # also falls nicht Exit gewählt
if(length(input)==stratum.length){
item<-define.mxrv.nonstramcrv(item,rriskModel,items.nonstra.index=items.nonstra.index[input],items.nonstra.names=items.nonstra.names[input],stratum.item=stratum.item)
break()
} else {
cat("\nThe number of chosen non-stratified mcrv items does not correspond to the number of strata!\n")
#next()
}
} else {
break()
} # end if(setequal(input,1:length(rriskModelObject))){
input<-99
} # end while
} # end of function menu.define.mxrv.nonstramcrv
################################################################################
################################################################################
#' @name define.mxrv.nonstramcrv
#' @aliases define.mxrv.nonstramcrv
#' @title Non-executable auxiliary function
#' @usage define.mxrv.nonstramcrv(item,rriskModel,items.nonstra.index,items.nonstra.names,stratum.item)
#' @param item ...
#' @param rriskModel ...
#' @param items.nonstra.index ...
#' @param items.nonstra.names ...
#' @param stratum.item ...
#' @keywords items
#' @export
define.mxrv.nonstramcrv<-function(item,rriskModel,items.nonstra.index,items.nonstra.names,stratum.item){
#-----------------------------------------------------------------------------
# define output
#-----------------------------------------------------------------------------
on.exit(return(item))
#-----------------------------------------------------------------------------
# define help variables
#-----------------------------------------------------------------------------
weights.string<-paste(item@stratum,"$strv",sep="")
namesfordataframe<-paste(paste(stratum.item@data$stratum$stid,items.nonstra.names,sep="="),collapse=",")
fullc<-paste("matrix(ncol=1,","data=","rrisksample(data=data.frame(",namesfordataframe,"),weights=",weights.string,"),byrow=TRUE)",sep="")
item.temp<-item
item.temp@fullc<-fullc
definition<-paste("Mixed distribution based on: ",namesfordataframe,sep="")
cat("\n----------------------------------------------------------------------\nEvaluating item values with predefined distribution parameters...\n----------------------------------------------------------------------\n")
fullcValues<-itemsEvaluation(item.temp,rriskModel,run=TRUE)# hier wird die Ausführbarkeit von fullc geprüft
cat("\n***************************************\nFull command for",item@name,"\n***************************************\n")
if (inherits(fullcValues, "try-error")){
cat("Full command expression",fullc,"could not be evaluated !\n")
} else { # Weise Item-Slots 'definition' und 'fullc' Inhalte zu
colnames(fullcValues)<-item@name
# Falls 'fullc' ausführbar ist, lasse die Zwischenergebnisse anzeigen
cat("\nDimension of test evaluation: ");cat(dim(fullcValues));cat("\n")
cat("\nitem@fullc=",fullc,"\n")
cat("\nGenerated item values (full command):\n");print(head(data.frame(fullcValues)));cat("...\n")
cat("\nSummary statistics of item values (full command):\n"); print(summary(fullcValues),digits=4);cat("\n")
item@fullc<-fullc
cat("\n***************************************\nSymbolical definition for",item@name,"\n***************************************\n")
cat("\nitem@definition=",definition,"\n")
item@definition<-definition
#--------------------------------------------------------------------------
# save simulated item value in data-slot
#--------------------------------------------------------------------------
item@data<-summary(fullcValues)
}
#-----------------------------------------------------------------------------
# hier wird die Ausführbarkeit von 'relaxc' geprüft
#----------------------------------------------------------------------------
plausimin<-item@plausimin
plausimax<-item@plausimax
relaxc<-paste("matrix(ncol=1,data=rudiscrete(n=rriskModel@settings@N,min=",plausimin,",max=",plausimax,"),byrow=TRUE)",sep="")
relaxc.test<-paste("matrix(ncol=1,data=rudiscrete(n=rriskModel@settings@Ntest,min=",plausimin,",max=",plausimax,"),byrow=TRUE)",sep="")
relaxcValues<-try(eval(parse(text=relaxc.test)),silent=TRUE)
if (inherits(relaxcValues, "try-error"))
{ cat("Relax command expression",relaxc,"could not be evaluated !\n")
}else
{ colnames(relaxcValues)<-item@name
cat("\n***************************************\nRelax command for",item@name,"\n***************************************\n")
cat("\nDimension of test evaluation: ");cat(dim(relaxcValues));cat("\n")
cat("\nitem@relaxc=",relaxc,"\n")
cat("\nGenerated item values (relax command):\n");print(head(data.frame(relaxcValues)));cat("...\n")
cat("\nSummary statistics of item values (relax command):\n"); print(summary(relaxcValues),digits=4);cat("\n")
item@relaxc<-relaxc
}
} # end of function define.mxrv.nonstramcrv
################################################################################
################################################################################
#' @name menu.define.stra
#' @aliases menu.define.stra
#' @title Non-executable auxiliary function
#' @usage menu.define.stra(item,rriskModel,menuLevel=1)
#' @param item ...
#' @param rriskModel ...
#' @param menuLevel ...
#' @keywords items
#' @export
menu.define.stra<-function(item,rriskModel,menuLevel=1)
{
#-----------------------------------------------------------------------------
# define output
#-----------------------------------------------------------------------------
on.exit(return(invisible(item)))
#-----------------------------------------------------------------------------
# define some help variables
#-----------------------------------------------------------------------------
levelTabulator<-paste(rep("\t",menuLevel),sep="",collapse="")
levelTabulator<-paste("\n",levelTabulator,sep="")
choices<-c("Weights derived from existing items","Weights entered manually")
#-----------------------------------------------------------------------------
# go into the while-loop
#-----------------------------------------------------------------------------
choices<-c(choices, "Exit dialog")
input<-99
while(!is.element(input,seq(1:length(choices))))
{ input<-mymenu(title="Please choose the way to define stratum item",choices=choices,help="No further help available",levelTabulator=levelTabulator)
if(input==1){
stratum<-menu.define.stra.rcode(item,rriskModel,menuLevel=menuLevel+1)
if(length(stratum)>0){
strv<-sample(1:nrow(stratum),replace=TRUE,prob=stratum$stdi,size=rriskModel@settings@N)
item@data<-list(stratum=stratum,strv=strv)
item@fullc<-"sample(1:nrow(stratum),replace=TRUE,prob=stratum$stdi,size=rriskModel@settings@N)"
item@relaxc<-"sample(1:nrow(stratum),replace=TRUE,prob=stratum$stdi,size=rriskModel@settings@N)"
item@stratumevaluated<-TRUE
}
break()
} else if (input==2){
stratum<-menu.define.stra.fix(item,rriskModel,menuLevel=menuLevel+1)
strv<-sample(1:nrow(stratum),replace=TRUE,prob=stratum$stdi,size=rriskModel@settings@N)
item@data<-list(stratum=stratum,strv=strv)
item@fullc<-"sample(1:nrow(stratum),replace=TRUE,prob=stratum$stdi,size=rriskModel@settings@N)"
item@relaxc<-"sample(1:nrow(stratum),replace=TRUE,prob=stratum$stdi,size=rriskModel@settings@N)"
item@stratumevaluated<-FALSE
break()
} else if (input==length(choices)){
break()
}
input<-99
} # end while
} # end of function menu.define.stra()
################################################################################
################################################################################
#' @name menu.define.stra.fix
#' @aliases menu.define.stra.fix
#' @title Non-executable auxiliary function
#' @usage menu.define.stra.fix(item,rriskModel,menuLevel=1)
#' @param item ...
#' @param rriskModel ...
#' @param menuLevel ...
#' @keywords items
#' @export
menu.define.stra.fix<-function(item,rriskModel,menuLevel=1)
{
#-----------------------------------------------------------------------------
# define output
#-----------------------------------------------------------------------------
stratum<-data.frame()
on.exit(return(invisible(stratum)))
#-----------------------------------------------------------------------------
# define some help variables
#-----------------------------------------------------------------------------
levelTabulator<-paste(rep("\t",menuLevel),sep="",collapse="")
levelTabulator<-paste("\n",levelTabulator,sep="")
cat("\nPlease enter in the label names and the relative weights of the strata in the first and second column, respectively\n")
#-----------------------------------------------------------------------------
# öffne input-fenster bis valid data eingetragen wird
#-----------------------------------------------------------------------------
validInput<-FALSE
while(!validInput){
stratum<-data.frame(stid=c("category1","category2","category3"),stdi=c("weight1","weight2","weight3"))
stratum<-suppressWarnings(edit(stratum,title="Please enter in the label names and the relative weights of the strata in the first and second column, respectively"))
stratum<-stratum[,c("stid","stdi")]
# entferne Zeilen, die nur aus fehlenden Werten bestehen
for(i in 1:nrow(stratum)){
if(i==1) rowToRemove<-c()
if(all(is.na(stratum[i,]))) rowToRemove<-c(rowToRemove,i)
if(i==nrow(stratum) & length(rowToRemove)>0) stratum<-stratum[-rowToRemove,]
}
# Überprüfe ob, stid nur aus fehlenden Werten besteht
if(all(is.na(stratum$stid)) | all(is.na(stratum$stdi))){
cat("Stratum data frame contains in columns 'stid' or 'stdi' anly missing values. Please, repeat input prozess!\n")
next()
}
# Überprüfe ob, einzelne fehlende Werte vorhanden sind
if(any(is.na(stratum))){
cat("Stratum data frame contains missing values. Please, repeat input prozess!\n")
next()
}
stratum$stid<-as.character(stratum$stid)
stratum$stdi<-as.character(stratum$stdi)
if(nrow(stratum)<=1){
cat("Stratum data frame contains only one row. Please, repeat input prozess!\n")
next()
}
#-----------------------------------------------------------------------------
# check input data
#-----------------------------------------------------------------------------
stratum$stdi<-suppressWarnings(as.numeric(stratum$stdi))
try.result<-try(na.fail(stratum),silent=TRUE)
if (inherits(try.result, "try-error")){
cat("Some entries in the column 'stdi' cannot be converted to numerical values\n")
} else validInput<-TRUE
} # end while-loop
#-----------------------------------------------------------------------------
# prepare output
#-----------------------------------------------------------------------------
cat("\nStratum data frame has been evaluated to\n")
print(stratum)
output<-list(validInput<-validInput,stratum.evaluated=stratum)
return(invisible(stratum))
} # end of function menu.define.stra.rcode()
################################################################################
################################################################################
#' @name menu.define.stra.rcode
#' @aliases menu.define.stra.rcode
#' @title Non-executable auxiliary function
#' @usage menu.define.stra.rcode(item,rriskModel,menuLevel=1)
#' @param item ...
#' @param rriskModel ...
#' @param menuLevel ...
#' @keywords items
#' @export
menu.define.stra.rcode<-function(item,rriskModel,menuLevel=1)
{
#-----------------------------------------------------------------------------
# define output
#-----------------------------------------------------------------------------
stratum<-data.frame()
on.exit(return(invisible(stratum)))
#-----------------------------------------------------------------------------
# define some help variables
#-----------------------------------------------------------------------------
levelTabulator<-paste(rep("\t",menuLevel),sep="",collapse="")
levelTabulator<-paste("\n",levelTabulator,sep="")
#-----------------------------------------------------------------------------
# öffne input-fenster bis valid data eingetragen wird
#-----------------------------------------------------------------------------
stratumnames<-myvalue.stratumNames(item,rriskModel,menuLevel=menuLevel)
if(length(stratumnames)>0){
cat("Stratum names:\n")
print(stratumnames)
stratumweights<-myvalue.stratumNames(item,rriskModel,stratumNames=stratumnames,menuLevel=menuLevel)
cat("Stratum weights:\n")
print(stratumweights)
stratum<-data.frame(stratumnames,stratumweights)
names(stratum)<-c("stid","stdi")
cat("\nStratum data frame has been evaluated to\n")
print(stratum)
} # end if(length(stratumnames)>0)
return(invisible(stratum))
} # end of function menu.define.stra.rcode()
################################################################################
################################################################################
#' @name myvalue.stratumNames
#' @aliases myvalue.stratumNames
#' @title Non-executable auxiliary function
#' @usage myvalue.stratumNames(item,rriskModel,menuLevel=1,stratumNames)
#' @param item ...
#' @param rriskModel ...
#' @param menuLevel ...
#' @param stratumNames ...
#' @keywords items
#' @export
myvalue.stratumNames<-function(item,rriskModel,menuLevel=1,stratumNames){
#-----------------------------------------------------------------------------
# define some help variables
#-----------------------------------------------------------------------------
levelTabulator<-paste(rep("\t",menuLevel),sep="",collapse="")
levelTabulator<-paste("\n",levelTabulator,sep="")
stratumInputs<-c()
dataForWith<-get.dataForWith(item,rriskModel,catEval=FALSE)
if(missing(stratumNames)){
ttitle<-"Please enter names of stratum levels (should evaluate to required number of character values)"
} else {
ttitle<-"Enter weights of stratum levels (should evaluate to required number of numeric values)"
}
#-----------------------------------------------------------------------------
# define output
#-----------------------------------------------------------------------------
on.exit(return(stratumInputs))
#-----------------------------------------------------------------------------
# read string = names of stratum
#-----------------------------------------------------------------------------
if(length(dataForWith)>0){
try.again <- TRUE
while(try.again){
cat(levelTabulator,ttitle,levelTabulator,rep("-",35),levelTabulator)
txt<-readline()
try.result<-try(value<-with(data=dataForWith,suppressWarnings(eval(parse(text=txt)))),silent=TRUE)
if(inherits(try.result, "try-error")){
cat(levelTabulator,"The expression cannot be evaluated because of unknown variable, data oder function!","\n")
next()
} else {
stratumInputs<-value
if(!is.vector(stratumInputs)){
cat("Your input were evaluated to the following expression that is not a vector. Please, repeate your input.\n")
print(stratumInputs)
next()
} else {
if(!missing(stratumNames)){ # wenn es also um stratum weight geht
if(length(stratumInputs)!=length(stratumNames)){
cat("Length of evaluated stratum weights vector does not correspond to the length of defined stratum names!\n")
cat("Stratum names:");print(stratumNames)
cat("Stratum weights:");print(stratumInputs)
next()
} else if (!all(is.numeric(stratumInputs))){
cat("Entered values could not be converted to numerical values\n")
print(stratumInputs)
next()
}
}
try.again<-FALSE
}
}
} # end while
} else {
cat("\nThe current model does not contain any data set or evaluated item(s). It is not possible to define weights derived from existing items!\n")
}# end if(length(dataForWith)>0)
}# end of function myvalue.stratumNames()
################################################################################
################################################################################
#' @name menu.define.bdjp
#' @aliases menu.define.bdjp
#' @title Non-executable auxiliary function
#' @usage menu.define.bdjp(item,rriskModel,menuLevel=1)
#' @param item ...
#' @param rriskModel ...
#' @param menuLevel ...
#' @keywords items
#' @export
menu.define.bdjp<-function(item,rriskModel,menuLevel=1)
{ bdjpItem<-item
bdjpDataitem<-NULL
on.exit(return(invisible(list(bdjpItem=bdjpItem,bdjpDataitem=bdjpDataitem))))
levelTabulator<-paste(rep("\t",menuLevel),sep="",collapse="")
levelTabulator<-paste("\n",levelTabulator,sep="")
choices<-c("Bayesian prevalence estimation under misclassification",
"Bayes estimation of a zero inflated Poisson (ZIP) model",
"Exit dialog")
input<-99
while(!is.element(input,seq(1:length(choices))))
{ input<-mymenu(title="Please choose MCMC estimation method",choices=choices,help="No further help available",levelTabulator=levelTabulator)
if(input==1)
{ try.result<-try(bayesResults<-PEMGUI(),silent=TRUE)
#try.result<-try(bayesResults<-lm(),silent=TRUE)# das war nur zum testen
#-------------------------------------------------------------------------
# falls mit fehlermeldung abgebrochen rufe stop, falls nicht gehe weiter
#-------------------------------------------------------------------------
#if (inherits(try.result, "try-error")) {
if(!isClass(bayesResults," bayesmodelClass ")){
cat("\n\n ---> Execution terminated with an error message!!!\n\n")
stop("Could not fit bayesian prevalence model",call.=FALSE)
} else {
if(bayesResults@convergence==TRUE) # falls konvergiert, dann gehe weiter
{ # bei konvergenz erzeugt bdjp item ein data item, wo posteriors abgespeichert werden
itemdef<-"Bayesian prevalence estimation"
items<-bdjp.saveResults(bayesResults,item,itemdef,
rriskModel,menuLevel=menuLevel+1)
print(items)
bdjpItem<-items[["bdjpItem"]]
bdjpDataitem<-items[["bdjpDataitem"]]
}
break()
}
} else if(input==2)
{ itemdef<-"Bayesian estimation of ZIP model"
try.result<-try(items<-menu.bdjp.ZIPGUI(item,itemdef,rriskModel,menuLevel=menuLevel+1),silent=TRUE)
#-------------------------------------------------------------------------
# falls mit fehlermeldung abgebrochen rufe stop, falls nicht gehe weiter
#-------------------------------------------------------------------------
if (inherits(try.result, "try-error")) {
stop("Could not fit bayesian ZIP model",call.=FALSE)
} else {
print(items)
bdjpItem<-items[["bdjpItem"]]
bdjpDataitem<-items[["bdjpDataitem"]]
break()
}
} else if (input==length(choices))
{ break()
}
input<-99
} # end while
} # end of function menu.define.bdjp()
################################################################################
################################################################################
#' @name menu.bdjp.ZIPGUI
#' @aliases menu.bdjp.ZIPGUI
#' @title Non-executable auxiliary function
#' @usage menu.bdjp.ZIPGUI(item,itemdef,rriskModel,menuLevel=1)
#' @param item ...
#' @param itemdef ...
#' @param rriskModel ...
#' @param menuLevel ...
#' @keywords items
#' @export
menu.bdjp.ZIPGUI<-function(item,itemdef,rriskModel,menuLevel=1)
{ bdjpItem<-item
bdjpDataitem<-NULL
on.exit(return(invisible(list(bdjpItem=bdjpItem,bdjpDataitem=bdjpDataitem))))
levelTabulator<-paste(rep("\t",menuLevel),sep="",collapse="")
levelTabulator<-paste("\n",levelTabulator,sep="")
# get all data sets assosiated with the current model
availableData.names<-c()
availableData.data<-list()
items<-rriskModel@items@items
if(length(items)>0)
{ for(i in 1:length(items))
{ # Betrachte data-Items, bei denen data-Slot nicht leer ist
if(items[[i]]@typecode=="data" & !is.null(items[[i]]@data))
{ item.name<-items[[i]]@name
var.names<-names(items[[i]]@data)
availableData.temp<-paste(item.name,var.names,sep="$")
availableData.names<-c(availableData.names,availableData.temp)
availableData.data<-c(availableData.data,as.list(items[[i]]@data))
}
}
}
choices<-c(availableData.names, "Exit dialog")
input<-99
while(!is.element(input,seq(1:length(choices))))
{ input<-mymenu(title="Please choose data set for bayesian estimation",choices=choices,help="No further help available",levelTabulator=levelTabulator)
if(input<=(length(choices)-1))
{
ZIPGUI.data<-availableData.data[[as.numeric(input)]]
View(ZIPGUI.data)
ZIPGUI.data<-as.vector(unlist(ZIPGUI.data)) # wandele in ein vektor um
try.result<-try(bayesResults<-ZIPGUI(data=ZIPGUI.data),silent=TRUE)
#if (inherits(try.result, "try-error")) {
if(!isClass(bayesResults," bayesmodelClass ")){
cat("\n\n ---> Execution terminated with an error message!!!\n\n")
stop("Could not fit bayesian ZIP models to the selected data set",call.=FALSE)
} else {
if(bayesResults@convergence==TRUE) # falls konvergiert, dann gehe weiter
{ itemdef<-paste(itemdef,"; fitted to ",availableData.names[as.numeric(input)],sep="")
items<-bdjp.saveResults(bayesResults,item,itemdef,rriskModel,menuLevel=menuLevel+1)
bdjpItem<-items[["bdjpItem"]]
bdjpDataitem<-items[["bdjpDataitem"]]
break()
}
}
} else if (input==length(choices))
{ break()
}
input<-99
} # end while
} # end of function menu.bdjp.ZIPGUI()
################################################################################
################################################################################
#' @name bdjp.saveResults
#' @aliases bdjp.saveResults
#' @title Non-executable auxiliary function
#' @usage bdjp.saveResults(bayesResults,item,itemdef="",rriskModel,menuLevel=1)
#' @param bayesResults ...
#' @param item ...
#' @param itemdef ...
#' @param rriskModel ...
#' @param menuLevel ...
#' @keywords items
#' @export
bdjp.saveResults<-function(bayesResults,item,itemdef="",rriskModel,menuLevel=1)
{
levelTabulator<-paste(rep("\t",menuLevel),sep="",collapse="")
levelTabulator<-paste("\n",levelTabulator,sep="")
#-----------------------------------------------------------------------------
# fill slot of created bdjp item
#-----------------------------------------------------------------------------
item@definition<-itemdef
item@data<-bayesResults@results
#-----------------------------------------------------------------------------
# create new data item and save bdjp posteriors
#-----------------------------------------------------------------------------
bdjp.dataitem<-new("itemClass")
bdjp.dataitem@name<-paste(item@name,".data",sep="")
bdjp.dataitem@title<-paste("Posteriors of the bdjp-item '",item@name,"'",sep="")
bdjp.dataitem@type<-"Data item (data)"
bdjp.dataitem@typecode<-"data"
bdjp.dataitem@part<-item@part
bdjp.dataitem@data<-bayesResults@jointpost
bdjp.dataitem@role<-"Not defined (nd)"
bdjp.dataitem@rolecode<-"nd"
bdjp.dataitem@scores<-item@scores
bdjp.dataitem@depitem<-""
item@depitem<-bdjp.dataitem@name
cat(paste("Simulation results has been successfully saved to the bdjp data item '",bdjp.dataitem@name,"'",sep=""),"\n")
#-----------------------------------------------------------------------------
# create output
#-----------------------------------------------------------------------------
output<-list(bdjpItem=item,bdjpDataitem=bdjp.dataitem)
return(output)
} # end of function bdjp.saveResults()
################################################################################
################################################################################
#' @name menu.define.rsrv
#' @aliases menu.define.rsrv
#' @title Non-executable auxiliary function
#' @usage menu.define.rsrv(item,rriskModel,menuLevel=1)
#' @param item ...
#' @param rriskModel ...
#' @param menuLevel ...
#' @keywords items
#' @export
menu.define.rsrv<-function(item,rriskModel,menuLevel=1)
{
#-----------------------------------------------------------------------------
# define output
#-----------------------------------------------------------------------------
on.exit(return(invisible(item)))
#-----------------------------------------------------------------------------
# define some help variables
#-----------------------------------------------------------------------------
levelTabulator<-paste(rep("\t",menuLevel),sep="",collapse="")
levelTabulator<-paste("\n",levelTabulator,sep="")
# get all data sets assosiated with the current model
availableData<-c()
availableDataRCODE<-c()
availableMcrvFnrv.names<-c()
availableMcrvFnrv.data<-c()
items<-rriskModel@items@items
if(length(items)>0){
for(i in 1:length(items)){
if(items[[i]]@typecode=="data"){
#-----------------------------------------------------------------------
# get all data items
#-----------------------------------------------------------------------
item.name<-items[[i]]@name
var.names<-names(items[[i]]@data)
availableData.temp<-paste(item.name,var.names,sep="$")
availableDataRCODE.temp<-paste("rriskModel@items@items[[",i,"]]@data$",var.names,sep="")
availableData<-c(availableData,availableData.temp)
availableDataRCODE<-c(availableDataRCODE,availableDataRCODE.temp)
names(availableDataRCODE)<-availableData.temp
} else if (is.element(items[[i]]@typecode,c("mcrv","fnrv"))){
#-----------------------------------------------------------------------
# evaluate/get all mcrv and fnrv items
#-----------------------------------------------------------------------
if(!is.null(items[[i]]@data) | items[[i]]@fullc!=""){
availableMcrvFnrv.names<-c(availableMcrvFnrv.names,items[[i]]@name)
}
}
} # end for
#---------------------------------------------------------------------------
# get evaluated values of all mcrv and fnrv items
#---------------------------------------------------------------------------
# item<-new(itemClass)
dataForWith<-get.dataForWith(item,rriskModel,run=FALSE,catEval=FALSE)
if (inherits(dataForWith, "try-error")){
cat("Full command expression",item@fullc,"could not be evaluated !\n")
} else { # Weise Item-Slots 'definition' und 'fullc' Inhalte zu
availableMcrvFnrv.data<-dataForWith[availableMcrvFnrv.names]
} # end if (inherits(dataForWith, "try-error")){
} # end if(length(items)>0){
if(length(c(availableData, names(availableMcrvFnrv.data)))==0){
stop("The model does not contain any data, mcrv or fnrv item!",call.=FALSE)
} # end if(length(availableData, names(availableMcrvFnrv.data))==0){
choices<-c(availableData, names(availableMcrvFnrv.data),"Exit dialog")
input<-99
while(!is.element(input,seq(1:length(choices)))){
input<-mymenu(title="Please choose data set for resampling",choices=choices,help="No further help available",levelTabulator=levelTabulator)
input.old<-as.numeric(input)
input<-choices[as.numeric(input)]
if(input %in% availableData){
data2fitname<-input
data2fit<-eval(parse(text=availableDataRCODE[input.old]))
#View(data2fit)
#print(head(data2fit))
cat(data2fitname,": ",head(data2fit),"...\n")
#item<-rsrv.resample(data2fit,data2fitname,item,rriskModel)
item<-rsrv.resample(data2fitname,item,rriskModel)
break()
} else if( input %in% availableMcrvFnrv.names) {
data2fit<-availableMcrvFnrv.data[[input]]
data2fitname<-input
cat(data2fitname,": ",head(data2fit),"...\n")
item<-rsrv.resample(data2fitname,item,rriskModel)
break()
} else if (input.old==length(choices)){
break()
}
# input<-99
} # end while
} # end of function menu.define.rsrv()
################################################################################
################################################################################
#' @name rsrv.resample
#' @aliases rsrv.resample
#' @title Non-executable auxiliary function
#' @usage rsrv.resample(data2fitname,item,rriskModel)
#' @param data2fitname ...
#' @param item ...
#' @param rriskModel ...
#' @keywords items
#' @export
rsrv.resample<-function(data2fitname,item,rriskModel)
{ on.exit(return(item))
fullc<-paste("sample(x=",data2fitname,",size=rriskModel@settings@N,replace=TRUE)",sep="")
definition<-paste("resample(",data2fitname,")",sep="")
#-----------------------------------------------------------------------------
# hier wird die Ausführbarkeit von 'fullc' geprüft
#-----------------------------------------------------------------------------
item.temp<-item
item.temp@fullc<-fullc
fullcValues<-itemsEvaluation(item.temp,rriskModel)# hier wird die Ausführbarkeit von fullc geprüft
cat("\n***************************************\nFull command for",item@name,"\n***************************************\n")
if (inherits(fullcValues, "try-error"))
{ cat("Full command expression",fullc,"could not be evaluated !\n")
}else
{ # Weise Item-Slots 'definition' und 'fullc' Inhalte zu
item@fullc<-fullc
fullcValues<-as.data.frame(fullcValues)
names(fullcValues)<-item@name
# Falls 'fullc' ausführbar ist, lasse die Zwischenergebnisse anzeigen
cat("\nDimension of test evaluation: ",dim(fullcValues),"\n")
cat("\nitem@fullc=",fullc,"\n")
cat("\nGenerated item values (full command):\n");print(head(fullcValues));cat("...\n")
cat("\nSummary statistics of item values (full command):\n"); print(summary(fullcValues),digits=4);cat("\n")
item@fullc<-fullc
item@data<-summary(fullcValues)
cat("\n***************************************\nSymbolical definition for",item@name,"\n***************************************\n")
cat("\nitem@definition=",definition,"\n")
item@definition<-definition
cat("\n***************************************\nRelax command for",item@name,"\n***************************************\n")
cat("\nitem@relaxc=",fullc,"\n")
item@relaxc<-fullc
}
#----------------------------------------------------------------------------
# definiere Output
#----------------------------------------------------------------------------
return(item)
} # end of function rsrv.resample()
################################################################################
################################################################################
#' @name menu.define.bsrv
#' @aliases menu.define.bsrv
#' @title Non-executable auxiliary function
#' @usage menu.define.bsrv(item,rriskModel,menuLevel=1)
#' @param item ...
#' @param rriskModel ...
#' @param menuLevel ...
#' @keywords items
#' @export
menu.define.bsrv<-function(item,rriskModel,menuLevel=1)
{ on.exit(return(invisible(item)))
levelTabulator<-paste(rep("\t",menuLevel),sep="",collapse="")
levelTabulator<-paste("\n",levelTabulator,sep="")
choices<-c("Parametric (sampling from fitted Normal distribution)",
"Nonparametric (sampling from data)",
"Exit dialog")
input<-99
while(!is.element(input,seq(1:length(choices))))
{ input<-mymenu(title="Choose bootstrap method",choices=choices,help="No further help available",levelTabulator=levelTabulator)
if(input==1) # for parametric method
{ item<-menu.bsrv(item,rriskModel,method="param",menuLevel=menuLevel+1) # method=c("param","nonparam")
break()
} else if(input==2) # for nonparametric method
{ item<-menu.bsrv(item,rriskModel,method="nonparam",menuLevel=menuLevel+1)
break()
} else if (input==3)
{ break()
}
input<-99
} # end while
} # end of function menu.define.bsrv()
################################################################################
################################################################################
#' @name menu.bsrv
#' @aliases menu.bsrv
#' @title Non-executable auxiliary function
#' @usage menu.bsrv(item,rriskModel,method="param",menuLevel=1)
#' @param item ...
#' @param rriskModel ...
#' @param method character string defining bootstrapping method, \code{method=c("param","nonparam")}
#' @param menuLevel ...
#' @keywords items
#' @export
menu.bsrv<-function(item,rriskModel,method="param",menuLevel=1)
{ on.exit(return(invisible(item)))
levelTabulator<-paste(rep("\t",menuLevel),sep="",collapse="")
levelTabulator<-paste("\n",levelTabulator,sep="")
# get all data sets assosiated with the current model
availableData<-c()
items<-rriskModel@items@items
if(length(items)>0)
{ for(i in 1:length(items))
{ if(items[[i]]@typecode=="data" & !is.null(items[[i]]@data))
{ item.name<-items[[i]]@name
var.names<-names(items[[i]]@data)
availableData.temp<-paste(item.name,var.names,sep="$")
availableData<-c(availableData,availableData.temp)
}
}
}
choices<-c(availableData, "Exit dialog")
input<-99
while(!is.element(input,seq(1:length(choices))))
{ input<-mymenu(title="Please choose data for bootstraping",choices=choices,help="No further help available",levelTabulator=levelTabulator)
if(input<=(length(choices)-1))
{ data2fitname<-availableData[as.numeric(input)]
item<-bsrv.fittodata(data2fitname,item,rriskModel,method)
break()
} else if (input==length(choices))
{ break()
}
input<-99
} # end while
} # end of function menu.bsrv.nonparam()
################################################################################
################################################################################
#' @name bsrv.fittodata
#' @aliases bsrv.fittodata
#' @title Non-executable auxiliary function
#' @usage bsrv.fittodata(data2fitname,item,rriskModel,method)
#' @param data2fitname ...
#' @param item ...
#' @param rriskModel ...
#' @param method character string giving the method for bootstrapping, \code{method=c("param","nonparam")}
#' @keywords items
#' @export
bsrv.fittodata<-function(data2fitname,item,rriskModel,method)
{ #-----------------------------------------------------------------------------
# define output
#-----------------------------------------------------------------------------
on.exit(return(item))
#-----------------------------------------------------------------------------
# define some help varibles
#-----------------------------------------------------------------------------
if(method=="param"){
definition<-paste("mean, sd (param. bootstrap); fitted to ",data2fitname,sep="")
fullc<-paste("bootdist(fitdist(",data2fitname,",'norm',method='mle'),bootmethod='param',niter=rriskModel@settings@N)$estim",sep="")
} else if(method=="nonparam"){
definition<-paste("mean, sd (nonparam. bootstrap); fitted to ",data2fitname,sep="")
fullc<-paste("bootdist(fitdist(",data2fitname,",'norm',method='mle'),bootmethod='nonparam',niter=rriskModel@settings@N)$estim",sep="")
}
#-----------------------------------------------------------------------------
# hier wird die Ausführbarkeit von 'fullc' geprüft
#-----------------------------------------------------------------------------
item.temp<-item
item.temp@fullc<-fullc
fullcValues<-itemsEvaluation(item.temp,rriskModel)# hier wird die Ausführbarkeit von fullc geprüft
cat("\n***************************************\nFull command for",item@name,"\n***************************************\n")
if (inherits(fullcValues, "try-error"))
{ cat("Full command expression",fullc,"could not be evaluated !\n")
}else
{ # Weise Item-Slots 'definition' und 'fullc' Inhalte zu
item@fullc<-fullc
# Falls 'fullc' ausführbar ist, lasse die Zwischenergebnisse anzeigen
cat("\nDimension of test evaluation: ",dim(fullcValues),"\n")
cat("\nitem@fullc=",fullc,"\n")
cat("\nGenerated item values (full command):\n");print(head(data.frame(fullcValues)));cat("...\n")
cat("\nSummary statistics of item values (full command):\n"); print(summary(fullcValues),digits=4);cat("\n")
item@fullc<-fullc
item@data<-summary(fullcValues)
cat("\n***************************************\nSymbolical definition for",item@name,"\n***************************************\n")
cat("\nitem@definition=",definition,"\n")
item@definition<-definition
cat("\n***************************************\nRelax command for",item@name,"\n***************************************\n")
cat("\nitem@relaxc=",fullc,"\n")
item@relaxc<-fullc
}
#----------------------------------------------------------------------------
# definiere Output
#----------------------------------------------------------------------------
return(item)
} # end of function bsrv.fittodata()
################################################################################
################################################################################
#' @description This function generates the user menu for maintaining scoring systems
#'
#' @details This function is not intended to be called directly but is internally called
#' during \code{rrisk} session.
#'
#' @name menu.define.mcrv
#' @aliases menu.define.mcrv
#' @title Non-executable auxiliary function
#' @usage menu.define.mcrv(item,rriskModel,menuLevel=1)
#' @param item ...
#' @param rriskModel an instance of the \code{modelClass}
#' @param menuLevel numeric value indicating menu level
#' @keywords items
#' @export
menu.define.mcrv<-function(item,rriskModel,menuLevel=1)
{ on.exit(return(invisible(item)))
levelTabulator<-paste(rep("\t",menuLevel),sep="",collapse="")
levelTabulator<-paste("\n",levelTabulator,sep="")
choices<-c("discrete",
"continuous",
"Exit dialog")
input<-99
while(!is.element(input,seq(1:length(choices))))
{ input<-mymenu(title="Choose type of probability density",choices=choices,help="No further help available",levelTabulator=levelTabulator)
if(input==1)
{ item<-menu.mcrv.disc(item,rriskModel,menuLevel=menuLevel+1)
break()
} else if(input==2)
{ item<-menu.mcrv.cont(item,rriskModel,menuLevel=menuLevel+1)
break()
} else if (input==3)
{ break()
}
input<-99
} # end while
} # end of function menu.define.mcrv()
################################################################################
################################################################################
#' @name menu.mcrv.disc
#' @aliases menu.mcrv.disc
#' @title Non-executable auxiliary function
#' @usage menu.mcrv.disc(item,rriskModel,menuLevel=1)
#' @param item ...
#' @param rriskModel ...
#' @param menuLevel ...
#' @keywords items
#' @export
menu.mcrv.disc<-function(item,rriskModel,menuLevel=1)
{ on.exit(return(invisible(item)))
levelTabulator<-paste(rep("\t",menuLevel),sep="",collapse="")
levelTabulator<-paste("\n",levelTabulator,sep="")
choices<-c("Fit discrete distribution to data",
"Fit discrete distribution to given percentiles",
"Bernoulli (bern)",
"binomial (binom)",
"discrete (discrete)",
"geometric (geom)",
"hypergeometric (hyper)",
"multinomial (multinom)",
"negative binomial (nbinom)",
"Poisson (pois)",
"uniform discrete (udiscrete)",
"Exit dialog")
input<-99
while(!is.element(input,seq(1:length(choices))))
{ input<-mymenu(title="Choose family of discrete probability density function",choices=choices,help="No further help available",levelTabulator=levelTabulator)
if(input==1)# Fit discrete distribution to data
{ if(item@stratum!=""){
cat("This option is not allowed for stratified item\n")
} else {
cat("Sorry, this option is still under evaluation\n")
#break()
}
} else if(input==2)# Fit discrete distribution to percentiles
{ if(item@stratum!=""){
cat("This option is not allowed for stratified item\n")
} else {
cat("Sorry, this option is still under evaluation\n")
#break()
}
} else if(input==3) # Bernoulli (bern)
{ item<-menu.mcrv.dfamily(item,rriskModel,dfamily="bern",menuLevel=menuLevel)
break()
} else if(input==4) # binomial (binom)
{ item<-menu.mcrv.dfamily(item,rriskModel,dfamily="binom",menuLevel=menuLevel)
break()
} else if(input==5) # discrete (discrete)
{ if(item@stratum!=""){
cat("This option is not allowed for stratified item\n")
} else {
item<-menu.mcrv.dfamily(item,rriskModel,dfamily="discrete",menuLevel=menuLevel)
break()
}
} else if(input==6) # geometric (geom)
{ item<-menu.mcrv.dfamily(item,rriskModel,dfamily="geom",menuLevel=menuLevel)
break()
} else if(input==7) # hypergeometric (hyper)
{ item<-menu.mcrv.dfamily(item,rriskModel,dfamily="hyper",menuLevel=menuLevel)
break()
} else if(input==8) # multinomial (multinom)
{ cat("\nSorry, this option is still under evaluation...\n")
#if(item@stratum!=""){
# cat("This option is not allowed for stratified item\n")
#} else {
# item<-menu.mcrv.dfamily(item,rriskModel,dfamily="multinom",menuLevel=menuLevel)
#break()
#}
} else if(input==9) # negative binomial (nbinom)
{ item<-menu.mcrv.dfamily(item,rriskModel,dfamily="nbinom",menuLevel=menuLevel)
break()
} else if(input==10) # Poisson (pois)
{ item<-menu.mcrv.dfamily(item,rriskModel,dfamily="pois",menuLevel=menuLevel)
break()
} else if(input==11) # uniform discrete (udiscrete)
{ item<-menu.mcrv.dfamily(item,rriskModel,dfamily="udiscrete",menuLevel=menuLevel)
break()
} else if (input==12) # Exit
{ break()
}
input<-99
} # end while
} # end of fucntion menu.mcrv.disc()
################################################################################
################################################################################
#' @name menu.mcrv.dfamily
#' @aliases menu.mcrv.dfamily
#' @title Non-executable auxiliary function
#' @usage menu.mcrv.dfamily(item,rriskModel,dfamily="pois",menuLevel=1)
#' @param item ...
#' @param rriskModel ...
#' @param dfamily ...
#' @param menuLevel ...
#' @keywords items
#' @export
menu.mcrv.dfamily<-function(item,rriskModel,dfamily="pois",menuLevel=1)
{ on.exit(return(invisible(item)))
levelTabulator<-paste(rep("\t",menuLevel),sep="",collapse="")
levelTabulator<-paste("\n",levelTabulator,sep="")
batch<-1
#-----------------------------------------------------------------------------
# ist ein geschichteter Item?
#-----------------------------------------------------------------------------
if(item@stratum!=""){
if(length(rriskModel@items@items)>0){
for(i in 1:length(rriskModel@items@items)){
if(rriskModel@items@items[[i]]@typecode=="stra"){
stratum.item<-rriskModel@items@items[[i]]
batch<-nrow(stratum.item@data$stratum)
stid<-as.character(stratum.item@data$stratum$stid)
} # end if
} # end for
} # end if
} # end if
#-----------------------------------------------------------------------------
# now enter distribution parameters
#-----------------------------------------------------------------------------
if(dfamily=="bern")
{ prob.mess<-paste("Enter ",batch," value(s) for Bernoulli distribution parameter prob (0 < prob < 1)",sep="")
prob<-myvalue.distrparams(item,rriskModel,title=prob.mess,menuLevel=menuLevel+1,minmax=c(0,1),batch=batch)$output
definition<-paste("binom(size=1",",prob=",prob,")",sep="")
fullc<-paste("matrix(ncol=",batch,",data=","rbinom(n=",batch,"*rriskModel@settings@N,size=1,","prob=",prob,"),byrow=TRUE)",sep="")
} else if(dfamily=="binom")
{ size.mess<-paste("Enter ",batch," value(s) for binomial distribution parameter size (integer value)",sep="")
size<-myvalue.distrparams(item,rriskModel,title=size.mess,menuLevel=menuLevel+1,minmax=c(0,Inf),asInteger=TRUE,batch=batch)$output
prob.mess<-paste("Enter ",batch," value(s) for binomial distribution parameter prob (0 < prob < 1)",sep="")
prob<-myvalue.distrparams(item,rriskModel,title=prob.mess,menuLevel=menuLevel+1,minmax=c(0,1),batch=batch)$output
definition<-paste("binom(size=",size,",prob=",prob,")",sep="")
fullc<-paste("matrix(ncol=",batch,",data=","rbinom(n=",batch,"*rriskModel@settings@N,size=",size,",prob=",prob,"),byrow=TRUE)",sep="")
} else if(dfamily=="discrete")
{ #-----------------------------------------------------------------------------
# öffne input-fenster bis valid data eingetragen wird
#-----------------------------------------------------------------------------
validInput<-FALSE
while(!validInput){
valuesprobs<-data.frame(values=c("value1","value2","value3"),probs=c("prob1","prob2","prob3"))
valuesprobs<-suppressWarnings(edit(valuesprobs))
valuesprobs$values<-as.numeric(as.character(valuesprobs$values))
valuesprobs$probs<-as.numeric(as.character(valuesprobs$probs))
#-----------------------------------------------------------------------------
# check input data
#-----------------------------------------------------------------------------
try.result<-try(na.fail(valuesprobs),silent=TRUE)
if (inherits(try.result, "try-error")){
cat("Invalid input data")
} else validInput<-TRUE
} # end while-loop
values.def<-paste(valuesprobs$values,collapse=",")
probs.def<-paste(valuesprobs$probs,collapse=",")
definition<-paste("discrete(values=c(",values.def,"),probs=c(",probs.def,"))",sep="")
fullc<-paste("matrix(ncol=",batch,",data=","rdiscrete(n=",batch,"*rriskModel@settings@N,values=c(",values.def,"),probs=c(",probs.def,")),byrow=TRUE)",sep="")
} else if(dfamily=="geom")
{ prob.mess<-paste("Enter ",batch," value(s) for geometrical distribution parameter prob (0 < prob < 1)",sep="")
prob<-myvalue.distrparams(item,rriskModel,title=prob.mess,menuLevel=menuLevel+1,minmax=c(0,1),batch=batch)$output
definition<-paste("geom(prob=",prob,")",sep="")
fullc<-paste("matrix(ncol=",batch,",data=","rgeom(n=",batch,"*rriskModel@settings@N,prob=",prob,"),byrow=TRUE)",sep="")
} else if(dfamily=="hyper")
{ m.mess<-paste("Enter ",batch," value(s) for hypergeometric distribution parameter m (integer value)",sep="")
m<-myvalue.distrparams(item,rriskModel,title=m.mess,menuLevel=menuLevel+1,minmax=c(0,Inf),asInteger=TRUE,batch=batch)$output
n.mess<-paste("Enter ",batch," value(s) for hypergeometric distribution parameter n (integer value)",sep="")
n<-myvalue.distrparams(item,rriskModel,title=n.mess,menuLevel=menuLevel+1,minmax=c(0,Inf),asInteger=TRUE,batch=batch)$output
k.mess<-paste("Enter ",batch," value(s) for hypergeometric distribution parameter k (integer value)",sep="")
k<-myvalue.distrparams(item,rriskModel,title=k.mess,menuLevel=menuLevel+1,minmax=c(0,Inf),asInteger=TRUE,batch=batch)$output
definition<-paste("hyper(m=",m,",n=",n,",k=",k,")",sep="")
fullc<-paste("matrix(ncol=",batch,",data=","rhyper(nn=",batch,"*rriskModel@settings@N,m=",m,",n=",n,",k=",k,"),byrow=TRUE)",sep="")
} else if(dfamily=="multinom")
{ #m<-myvalue.distrparams(item,rriskModel,title="Enter value for hypergeometric distribution parameter m (integer value)",menuLevel=menuLevel+1,minmax=c(0,Inf),asInteger=TRUE)$output
#prob<-myvalue.distrparams(item,rriskModel,title="Enter value for binomial distribution parameter prob (0 < prob < 1)",menuLevel=menuLevel+1,minmax=c(0,1))$output
#definition<-paste("multinom(m=",m,",n=",n,",k=",k,")",sep="")
#fullc<-paste("matrix(ncol=",batch,",data=","rhyper(nn=",batch,"*rriskModel@settings@N,m=",m,",n=",n,",k=",k,"),byrow=TRUE)",sep="")
} else if(dfamily=="nbinom")
{ size.mess<-paste("Enter ",batch," value(s) for negative binomial distribution parameter size (integer value)",sep="")
size<-myvalue.distrparams(item,rriskModel,title=size.mess,menuLevel=menuLevel+1,minmax=c(0,Inf),asInteger=TRUE,batch=batch)$output
prob.mess<-paste("Enter ",batch," value(s) for negative binomial distribution parameter prob (0 < prob < 1)",sep="")
prob<-myvalue.distrparams(item,rriskModel,title=prob.mess,menuLevel=menuLevel+1,minmax=c(0,1),batch=batch)$output
definition<-paste("nbinom(size=",size,",prob=",prob,")",sep="")
fullc<-paste("matrix(ncol=",batch,",data=","rnbinom(n=",batch,"*rriskModel@settings@N,size=",size,",prob=",prob,"),byrow=TRUE)",sep="")
} else if(dfamily=="pois")
{ lambda.mess<-paste("Enter ",batch," value(s) for Poisson distribution parameter lambda (positive)",sep="")
lambda<-myvalue.distrparams(item,rriskModel,title=lambda.mess,menuLevel=menuLevel+1,minmax=c(0,Inf),batch=batch)$output
definition<-paste("pois(lambda=",lambda,")",sep="")
fullc<-paste("matrix(ncol=",batch,",data=","rpois(n=",batch,"*rriskModel@settings@N,lambda=",lambda,"),byrow=TRUE)",sep="")
} else if(dfamily=="udiscrete")
{ min.mess<-paste("Enter ",batch," value(s) for uniform discrete distribution parameter min (integer)",sep="")
minu<-myvalue.distrparams(item,rriskModel,title=min.mess,menuLevel=menuLevel+1,minmax=c(-Inf,Inf),asInteger=TRUE,batch=batch)$output
max.mess<-paste("Enter ",batch," value(s) for uniform discrete distribution parameter max (integer)",sep="")
maxu<-myvalue.distrparams(item,rriskModel,title=max.mess,menuLevel=menuLevel+1,minmax=c(minu,Inf),asInteger=TRUE,batch=batch)$output
definition<-paste("udiscrete(min=",minu,",max=",maxu,")",sep="")
fullc<-paste("matrix(ncol=",batch,",data=","rudiscrete(n=",batch,"*rriskModel@settings@N,min=",minu,",max=",maxu,"),byrow=TRUE)",sep="")
}
#-----------------------------------------------------------------------------
# hier wird die Ausführbarkeit von 'fullc' geprüft
#-----------------------------------------------------------------------------
item.temp<-item
item.temp@fullc<-fullc
cat("\n----------------------------------------------------------------------\nEvaluating item values with predefined distribution parameters...\n----------------------------------------------------------------------\n")
fullcValues<-itemsEvaluation(item.temp,rriskModel)# hier wird die Ausführbarkeit von fullc geprüft
cat("\n***************************************\nFull command for",item@name,"\n***************************************\n")
if (inherits(fullcValues, "try-error"))
{ cat("Full command expression",fullc,"could not be evaluated !\n")
}else
{ # Weise Item-Slots 'definition' und 'fullc' Inhalte zu
if(batch>1){
colnames(fullcValues)<-stid
} else { colnames(fullcValues)<-item@name}
item@fullc<-fullc
# Falls 'fullc' ausführbar ist, lasse die Zwischenergebnisse anzeigen
cat("\nDimension of test evaluation: ");cat(dim(fullcValues));cat("\n")
cat("\nitem@fullc=",fullc,"\n")
cat("\nGenerated item values (full command):\n");print(head(data.frame(fullcValues)));cat("...\n")
cat("\nSummary statistics of item values (full command):\n"); print(summary(fullcValues),digits=4);cat("\n")
item@fullc<-fullc
cat("\n***************************************\nSymbolical definition for",item@name,"\n***************************************\n")
cat("\nitem@definition=",definition,"\n")
item@definition<-definition
#--------------------------------------------------------------------------
# save simulated item value in data-slot
#--------------------------------------------------------------------------
item@data<-summary(fullcValues)
}
#-----------------------------------------------------------------------------
# hier wird die Ausführbarkeit von 'relaxc' geprüft
#----------------------------------------------------------------------------
plausimin<-item@plausimin
plausimax<-item@plausimax
relaxc<-paste("matrix(ncol=",batch,",data=rudiscrete(n=",batch,"*rriskModel@settings@N,min=",plausimin,",max=",plausimax,"),byrow=TRUE)",sep="")
relaxc.test<-paste("matrix(ncol=",batch,",data=rudiscrete(n=",batch,"*rriskModel@settings@Ntest,min=",plausimin,",max=",plausimax,"),byrow=TRUE)",sep="")
relaxcValues<-try(eval(parse(text=relaxc.test)),silent=TRUE)
if (inherits(relaxcValues, "try-error"))
{ cat("Relax command expression",relaxc,"could not be evaluated !\n")
}else
{ if(batch>1){
colnames(relaxcValues)<-stid
} else { colnames(relaxcValues)<-item@name}
cat("\n***************************************\nRelax command for",item@name,"\n***************************************\n")
cat("\nDimension of test evaluation: ");cat(dim(relaxcValues));cat("\n")
cat("\nitem@relaxc=",relaxc,"\n")
cat("\nGenerated item values (relax command):\n");print(head(data.frame(relaxcValues)));cat("...\n")
cat("\nSummary statistics of item values (relax command):\n"); print(summary(relaxcValues),digits=4);cat("\n")
item@relaxc<-relaxc
}
#----------------------------------------------------------------------------
# definiere Output
#----------------------------------------------------------------------------
return(item)
} # end of function menu.mcrv.dfamily()
################################################################################
################################################################################
#' @name itemsEvaluation
#' @aliases itemsEvaluation
#' @title Non-executable auxiliary function
#' @usage itemsEvaluation(item,rriskModel,run=FALSE,catEval=FALSE)
#' @param item ...
#' @param rriskModel ...
#' @param run a single logical value
#' @param catEval a single logical value
#' @keywords items
#' @export
itemsEvaluation<-function(item,rriskModel,run=FALSE,catEval=FALSE){
#-----------------------------------------------------------------------------
# calculate data for item evaluation
#-----------------------------------------------------------------------------
dataForWith<-get.dataForWith(item,rriskModel,run=run,catEval=catEval)
#-----------------------------------------------------------------------------
# set number of test evaluation to rriskModel@settings@Ntest
#-----------------------------------------------------------------------------
if(run==FALSE){
item@fullc<-gsub(x=item@fullc,pattern="rriskModel@settings@N",replacement="rriskModel@settings@Ntest")
}
#---------------------------------------------------------------------------
# versuche fullc-expression zu evaluieren
#---------------------------------------------------------------------------
if(length(dataForWith)>0){
try.result<-try(with(data=dataForWith,suppressWarnings(eval(parse(text=item@fullc)))),silent=TRUE)
} else{
try.result<-try(suppressWarnings(eval(parse(text=item@fullc))),silent=TRUE)
}
return(try.result)
} # end of function itemsEvaluation()
################################################################################
################################################################################
#' @name myvalue.distrparams
#' @aliases myvalue.distrparams
#' @title Non-executable auxiliary function
#' @usage myvalue.distrparams(item,rriskModel,
#' title="Tryme",menuLevel=1,
#' minmax,asInteger=FALSE,batch=1)
#' @param item ...
#' @param rriskModel ...
#' @param title ...
#' @param menuLevel ...
#' @param minmax ...
#' @param asInteger boolean value giving whether entered value should be an integer, \code{asInteger=c(TRUE,FALSE)}
#' @param batch ...
#' @keywords items
#' @export
myvalue.distrparams<-function(item,rriskModel,title="Tryme",menuLevel=1,minmax,asInteger=FALSE,batch=1)
{ #-------------------------------------------------------------------------------
# define help variables
#-------------------------------------------------------------------------------
levelTabulator<-paste(rep("\t",menuLevel),sep="",collapse="")
levelTabulator<-paste("\n",levelTabulator,sep="")
length.error <- paste(levelTabulator,"Entry does not evaluate to required length",batch,levelTabulator)
output<-NA
values<-NA
#-----------------------------------------------------------------------------
# define output
#-----------------------------------------------------------------------------
on.exit(return(list(output=output,values=values)))
#-------------------------------------------------------------------------------
try.again<-TRUE
while (try.again){
cat(levelTabulator,title,levelTabulator,rep("-",35),levelTabulator)
txt <- readline()
#-----------------------------------------------------------------------------
# get data to evaluate current item
#-----------------------------------------------------------------------------
dataForWith<-get.dataForWith(item,rriskModel,run=FALSE,catEval=FALSE)
#---------------------------------------------------------------------------
# versuche txt-expression zu evaluieren
#---------------------------------------------------------------------------
if(length(dataForWith)>0){
try.result<-try(values<-with(data=dataForWith,suppressWarnings(eval(parse(text=txt)))),silent=TRUE)
#print(values)
} else{
try.result<-try(values<-suppressWarnings(eval(parse(text=txt))),silent=TRUE)
#print(values)
}
if(inherits(try.result, "try-error")){
cat(levelTabulator,"The expression cannot be evaluated because of unknown variable, data oder function!","\n")
next()
} else{
#-----------------------------------------------------------------------
# values muss im vordefinierten range liegen
#-----------------------------------------------------------------------
if(!missing(minmax)){
if(all(!is.na(minmax)) & length(values)==1){
if(values < minmax[1] | values > minmax[2]){
cat(levelTabulator,"Your input is out of range: ",paste( "c(",minmax[1],",",minmax[2],")",sep=""),"\n")
next()
} # end if(values < minmax[1] | values > minmax[2])
} # end if(all(!is.na(minmax)) & length(values)==1)
} # end if(!missing(minmax))
#-------------------------------------------------------------------------
# muss values eine ganze zahl sein?
#-------------------------------------------------------------------------
if(asInteger==TRUE){
if(abs(values-round(values))!=0){
cat(levelTabulator,"Your input is not integer","\n")
next()
}
}
#-----------------------------------------------------------------------
# und die Länge von values muss auch stimmen
#-----------------------------------------------------------------------
if(length(values)!=batch){
cat(levelTabulator,"Entry does not evaluate to required length of ",batch,"\n")
next()
}
#-------------------------------------------------------------------------
# Lasse die (gerundete) Ergebnisse anzeigen
#-------------------------------------------------------------------------
if(item@stratum==""){
cat("\nEntry evaluates to:",paste(try(round(values,digits=2)),collapse=", "),"\n")
} else {
cat("\nEntry evaluates to:",paste(try(round(values,digits=2)),collapse=", "),"\n")
}
output<-txt
try.again<-FALSE
} # end if(inherits(try.result, "try-error"))
} # end while
return(list(output=output,values=values))
} # end function myvalue.distrparams()
################################################################################
################################################################################
#' @name menu.mcrv.cont
#' @aliases menu.mcrv.cont
#' @title Non-executable auxiliary function
#' @usage menu.mcrv.cont(item,rriskModel,menuLevel=1)
#' @param item ...
#' @param rriskModel ...
#' @param menuLevel ...
#' @keywords items
#' @export
menu.mcrv.cont<-function(item,rriskModel,menuLevel=1)
{ on.exit(return(invisible(item)))
levelTabulator<-paste(rep("\t",menuLevel),sep="",collapse="")
levelTabulator<-paste("\n",levelTabulator,sep="")
choices<-c("Fit continuous distribution to data",
"Fit continuous distribution to given percentiles",
"beta (beta)",
"beta Pert (pert)",
"Cauchy (cauchy)",
"chi-square (chisq)",
"chi-square, non-central (chisqnc)",
"exponential (exp)",
"F (f)",
"gamma (gamma)",
"logistic (logis)",
"lognormal (lnorm)",
"Normal (norm)",
"Truncated Normal (tnorm)",
"t (t)",
"triangular (triang)",
"uniform (unif)",
"Weibull (weibull)",
"Gompertz (gompertz)",
"Exit dialog")
input<-99
while(!is.element(input,seq(1:length(choices))))
{ input<-mymenu(title="Choose family of continuous probability density function",choices=choices,help="No further help available",levelTabulator=levelTabulator)
if(input==1)# Fit continuous distribution to data or percentiles
{ if(item@stratum!=""){
cat("This option is not allowed for stratified item\n")
} else {
item<-menu.mcrv.fittodata(item,rriskModel,menuLevel=menuLevel+1)
break()
}
} else if(input==2)
{ if(item@stratum!=""){
cat("This option is not allowed for stratified item\n")
} else {
item<-menu.mcrv.fittoperc(item,rriskModel,menuLevel=menuLevel+1)
break()
}
} else if(input==3) # beta (beta)
{ item<-menu.mcrv.cfamily(item,rriskModel,dfamily="beta",menuLevel=menuLevel)
break()
} else if(input==4) # beta Pert (pert)
{ item<-menu.mcrv.cfamily(item,rriskModel,dfamily="pert",menuLevel=menuLevel)
break()
} else if(input==5) # Cauchy (cauchy)
{ item<-menu.mcrv.cfamily(item,rriskModel,dfamily="cauchy",menuLevel=menuLevel)
break()
} else if(input==6) # chi-square (chisq)
{ item<-menu.mcrv.cfamily(item,rriskModel,dfamily="chisq",menuLevel=menuLevel)
break()
} else if(input==7) # chi-square, non-central (chisqnc)
{ item<-menu.mcrv.cfamily(item,rriskModel,dfamily="chisqnc",menuLevel=menuLevel)
break()
} else if(input==8) # exponential (exp)
{ item<-menu.mcrv.cfamily(item,rriskModel,dfamily="exp",menuLevel=menuLevel)
break()
} else if(input==9) # F (f)
{ item<-menu.mcrv.cfamily(item,rriskModel,dfamily="f",menuLevel=menuLevel)
break()
} else if(input==10) # gamma (gamma)
{ item<-menu.mcrv.cfamily(item,rriskModel,dfamily="gamma",menuLevel=menuLevel)
break()
} else if(input==11) # logistic (logistic)
{ item<-menu.mcrv.cfamily(item,rriskModel,dfamily="logis",menuLevel=menuLevel)
break()
} else if(input==12) # lognormal (lorm)
{ item<-menu.mcrv.cfamily(item,rriskModel,dfamily="lnorm",menuLevel=menuLevel)
break()
} else if(input==13) # Normal (norm)
{ item<-menu.mcrv.cfamily(item,rriskModel,dfamily="norm",menuLevel=menuLevel)
break()
} else if(input==14) # Truncated Normal (tnorm)
{ item<-menu.mcrv.cfamily(item,rriskModel,dfamily="tnorm",menuLevel=menuLevel)
break()
} else if(input==15) # t (t)
{ item<-menu.mcrv.cfamily(item,rriskModel,dfamily="t",menuLevel=menuLevel)
break()
} else if(input==16) # triangular (triang)
{ item<-menu.mcrv.cfamily(item,rriskModel,dfamily="triang",menuLevel=menuLevel)
break()
} else if(input==17) # uniform (unif)
{ item<-menu.mcrv.cfamily(item,rriskModel,dfamily="unif",menuLevel=menuLevel)
break()
} else if(input==18) # Weibull (weibull)
{ item<-menu.mcrv.cfamily(item,rriskModel,dfamily="weibull",menuLevel=menuLevel)
break()
} else if(input==19) # Gompertz (gompertz)
{ item<-menu.mcrv.cfamily(item,rriskModel,dfamily="gompertz",menuLevel=menuLevel)
break()
} else if (input==20) # Exit
{ break()
}
input<-99
} # end while
} # end of function menu.mcrv.cont()
################################################################################
################################################################################
#' @name menu.mcrv.fittodata
#' @aliases menu.mcrv.fittodata
#' @title Non-executable auxiliary function
#' @usage menu.mcrv.fittodata(item,rriskModel,menuLevel=1)
#' @param item ...
#' @param rriskModel ...
#' @param menuLevel ...
#' @keywords items
#' @export
menu.mcrv.fittodata<-function(item,rriskModel,menuLevel=1)
{ on.exit(return(invisible(item)))
levelTabulator<-paste(rep("\t",menuLevel),sep="",collapse="")
levelTabulator<-paste("\n",levelTabulator,sep="")
# get all data sets assosiated with the current model
availableData.names<-c()
availableData.data<-list()
items<-rriskModel@items@items
if(length(items)>0)
{ for(i in 1:length(items))
{ # Betrachte data-Items, bei denen data-Slot nicht leer ist
if(items[[i]]@typecode=="data" & !is.null(items[[i]]@data))
{ item.name<-items[[i]]@name
var.names<-names(items[[i]]@data)
availableData.temp<-paste(item.name,var.names,sep="$")
availableData.names<-c(availableData.names,availableData.temp)
availableData.data<-c(availableData.data,as.list(items[[i]]@data))
}
}
}
choices<-c(availableData.names, "Exit dialog")
input<-99
while(!is.element(input,seq(1:length(choices))))
{ input<-mymenu(title="Please choose data set for fitting",choices=choices,help="No further help available",levelTabulator=levelTabulator)
if(input<=(length(choices)-1))
{ data2fitname<-availableData.names[as.numeric(input)]
data2fit<-availableData.data[[as.numeric(input)]]
View(data2fit)
data2fit<-as.vector(unlist(data2fit)) # wandele in ein vektor um
cat(data2fitname,": ",head(data2fit),"...\n")
item<-mcrv.fittodata(data2fit,data2fitname,item,rriskModel)
break()
} else if (input==length(choices))
{ break()
}
input<-99
} # end while
} # end of function menu.mcrv.fittodata()
################################################################################
################################################################################
#' @name mcrv.fittodata
#' @aliases mcrv.fittodata
#' @title Non-executable auxiliary function
#' @usage mcrv.fittodata(data2fit,data2fitname,item,rriskModel)
#' @param data2fit ...
#' @param data2fitname ...
#' @param item ...
#' @param rriskModel ...
#' @keywords items
#' @export
mcrv.fittodata<-function(data2fit,data2fitname,item,rriskModel)
{ #-----------------------------------------------------------------------------
# define output
#-----------------------------------------------------------------------------
on.exit(return(item))
#-----------------------------------------------------------------------------
# ist ein geschichteter Item?
#-----------------------------------------------------------------------------
batch<-1
if(item@stratum!=""){
if(length(rriskModel@items@items)>0){
for(i in 1:length(rriskModel@items@items)){
if(rriskModel@items@items[[i]]@typecode=="stra"){
stratum.item<-rriskModel@items@items[[i]]
batch<-nrow(stratum.item@data$stratum)
stid<-as.character(stratum.item@data$stratum$stid)
} # end if
} # end for
} # end if
} # end if
#-----------------------------------------------------------------------------
# fit several distributions to data
#-----------------------------------------------------------------------------
fitResults<-fit.cont(data2fit)
if(!is.na(fitResults$chosenDistr))
{ paramNames<-names(fitResults$fittedParams) # gefittete Parameter
textParams<-c() # Parameter-Infos für 'definition' and 'fullc' Slots
for(i in 1:length(paramNames)){
textParams.temp<-paste(paramNames[i],"=",round(fitResults$fittedParams[i],digits=3),sep="")
textParams<-c(textParams,textParams.temp)
} # end for
textParams<-paste(textParams,collapse=",")
chosenDistr<-fitResults$chosenDistr # geschätze Verteilungsfamilie
#---------------------------------------------------------------------------
# aktualisiere Item Slots
#---------------------------------------------------------------------------
definition<-paste(chosenDistr,"(",textParams,"); fitted to ",data2fitname,sep="")
fullc<-paste("matrix(ncol=",batch,",data=","r",chosenDistr,"(n=",batch,"*rriskModel@settings@N,",textParams,"),byrow=TRUE)",sep="")
#-----------------------------------------------------------------------------
# hier wird die Ausführbarkeit von 'fullc' geprüft
#-----------------------------------------------------------------------------
item.temp<-item
item.temp@fullc<-fullc
fullcValues<-itemsEvaluation(item.temp,rriskModel)# hier wird die Ausführbarkeit von fullc geprüft
cat("\n***************************************\nFull command for ",item@name,"\n***************************************\n")
if (inherits(fullcValues, "try-error")){
cat("Full command expression",fullc,"could not be evaluated !\n")
} else {
# Weise Item-Slots 'definition' und 'fullc' Inhalte zu
item@fullc<-fullc
fullcValues<-data.frame(fullcValues)
names(fullcValues)<-item@name
# Falls 'fullc' ausführbar ist, lasse die Zwischenergebnisse anzeigen
cat("\nDimension of test evaluation: ",dim(fullcValues),"\n")
cat("\nitem@fullc=",fullc,"\n")
cat("\nGenerated item values (full command):\n");print(head(fullcValues));cat("...\n")
cat("\nSummary statistics of item values (full command):\n"); print(summary(fullcValues),digits=4);cat("\n")
item@fullc<-fullc
cat("\n***************************************\nSymbolical definition for",item@name,"\n***************************************\n")
cat("\nitem@definition=",definition,"\n")
item@definition<-definition
item@data<-summary(fullcValues)
} # end if
#-----------------------------------------------------------------------------
# hier wird die Ausführbarkeit von 'relaxc' geprüft
#----------------------------------------------------------------------------
relaxc<-paste("matrix(ncol=",batch,",data=runif(rriskModel@settings@N,min=",item@plausimin,",max=",item@plausimax,"),byrow=TRUE)",sep="")
relaxc.test<-paste("matrix(ncol=",batch,",data=runif(rriskModel@settings@Ntest,min=",item@plausimin,",max=",item@plausimax,"),byrow=TRUE)",sep="")
relaxcValues<-try(eval(parse(text=relaxc.test)),silent=TRUE)
if (inherits(relaxcValues, "try-error")){
cat("Relax command expression",relaxc,"could not be evaluated !\n")
} else {
cat("\n***************************************\nRelax command for",item@name,"\n***************************************\n")
cat("\nDimension of test evaluation: ",dim(relaxcValues),"\n")
cat("\nitem@relaxc=",relaxc,"\n")
relaxcValues<-data.frame(relaxcValues)
names(relaxcValues)<-item@name
cat("\nGenerated item values (relax command):\n");print(head(relaxcValues));cat("...\n")
cat("\nSummary statistics of item values (relax command):\n"); print(summary(relaxcValues),digits=4);cat("\n")
item@relaxc<-relaxc
}
#----------------------------------------------------------------------------
# definiere Output
#----------------------------------------------------------------------------
return(item)
} # end if
} # end of function mcrv.fittodata()
################################################################################
################################################################################
#' @name menu.mcrv.fittoperc
#' @aliases menu.mcrv.fittoperc
#' @title Non-executable auxiliary function
#' @usage menu.mcrv.fittoperc(item,rriskModel,menuLevel=1)
#' @param item ...
#' @param rriskModel ...
#' @param menuLevel ...
#' @keywords items
#' @export
menu.mcrv.fittoperc<-function(item,rriskModel,menuLevel=1)
{ #-----------------------------------------------------------------------------
# define output
#-----------------------------------------------------------------------------
on.exit(return(item))
#-----------------------------------------------------------------------------
# define some help variables
#-----------------------------------------------------------------------------
batch<-1
if(item@stratum!=""){
if(length(rriskModel@items@items)>0){
for(i in 1:length(rriskModel@items@items)){
if(rriskModel@items@items[[i]]@typecode=="stra"){
stratum.item<-rriskModel@items@items[[i]]
batch<-nrow(stratum.item@data$stratum)
stid<-as.character(stratum.item@data$stratum$stid)
} # end if
} # end for
} # end if
} # end if
#p<-c(0.2,0.5,0.8)
#q<-qf(p,1,2,7,2)
#-----------------------------------------------------------------------------
# fit several distributions to percentiles
#-----------------------------------------------------------------------------
fitResults<-fit.perc()
if(!is.na(fitResults$chosenDistr)){
paramNames<-names(fitResults$fittedParams) # gefittete Parameter
textParams<-c() # Parameter-Infos für 'definition' and 'fullc' Slots
for(i in 1:length(paramNames)){
textParams.temp<-paste(paramNames[i],"=",round(fitResults$fittedParams[i],digits=3),sep="")
textParams<-c(textParams,textParams.temp)
} # end for
textParams<-paste(textParams,collapse=",")
chosenDistr<-fitResults$chosenDistr # geschätze Verteilungsfamilie
#definition<-paste(chosenDistr,"(",textParams,"); fitted to percentiles (fit.perc)",sep="")
definition<-fitResults$fitSummary
fullc<-paste("matrix(ncol=",batch,",data=","r",chosenDistr,"(n=",batch,"*rriskModel@settings@N,",textParams,"),byrow=TRUE)",sep="")
#-----------------------------------------------------------------------------
# hier wird die Ausführbarkeit von 'fullc' geprüft
#-----------------------------------------------------------------------------
item.temp<-item
item.temp@fullc<-fullc
fullcValues<-itemsEvaluation(item.temp,rriskModel)# hier wird die Ausführbarkeit von fullc geprüft
cat("\n***************************************\nFull command for",item@name,"\n***************************************\n")
if (inherits(fullcValues, "try-error")){
cat("Full command expression",fullc,"could not be evaluated !\n")
} else {
# Weise Item-Slots 'definition' und 'fullc' Inhalte zu
item@fullc<-fullc
fullcValues<-data.frame(fullcValues)
names(fullcValues)<-item@name
# Falls 'fullc' ausführbar ist, lasse die Zwischenergebnisse anzeigen
cat("\nDimension of test evaluation: ",dim(fullcValues),"\n")
cat("\nitem@fullc=",fullc,"\n")
cat("\nGenerated item values (full command):\n");print(head(fullcValues));cat("...\n")
cat("\nSummary statistics of item values (full command):\n"); print(summary(fullcValues),digits=4);cat("\n")
item@fullc<-fullc
cat("\n***************************************\nSymbolical definition for",item@name,"\n***************************************\n")
cat("\nitem@definition=",definition,"\n")
item@definition<-definition
item@data<-summary(fullcValues)
}
#-----------------------------------------------------------------------------
# hier wird die Ausführbarkeit von 'relaxc' geprüft
#----------------------------------------------------------------------------
relaxc<-paste("matrix(ncol=",batch,",data=runif(rriskModel@settings@N,min=",item@plausimin,",max=",item@plausimax,"),byrow=TRUE)",sep="")
relaxc.test<-paste("matrix(ncol=",batch,",data=runif(rriskModel@settings@Ntest,min=",item@plausimin,",max=",item@plausimax,"),byrow=TRUE)",sep="")
relaxcValues<-try(eval(parse(text=relaxc.test)),silent=TRUE)
if (inherits(relaxcValues, "try-error")){
cat("Relax command expression",relaxc,"could not be evaluated !\n")
} else {
cat("\n***************************************\nRelax command for",item@name,"\n***************************************\n")
cat("\nDimension of test evaluation: ",dim(relaxcValues),"\n")
cat("\nitem@relaxc=",relaxc,"\n")
relaxcValues<-data.frame(relaxcValues)
names(relaxcValues)<-item@name
cat("\nGenerated item values (relax command):\n");print(head(relaxcValues));cat("...\n")
cat("\nSummary statistics of item values (relax command):\n"); print(summary(relaxcValues),digits=4);cat("\n")
item@relaxc<-relaxc
} # end if
#----------------------------------------------------------------------------
# definiere Output
#----------------------------------------------------------------------------
return(item)
} # end if(!is.na(fitResults$chosenDistr))
} # end of function mcrv.fit.perc()
################################################################################
################################################################################
#' @name menu.mcrv.cfamily
#' @aliases menu.mcrv.cfamily
#' @title Non-executable auxiliary function
#' @usage menu.mcrv.cfamily(item,rriskModel,dfamily="beta",menuLevel=1)
#' @param item ...
#' @param rriskModel ...
#' @param dfamily ...
#' @param menuLevel ...
#' @keywords items
#' @export
menu.mcrv.cfamily<-function(item,rriskModel,dfamily="beta",menuLevel=1)
{ #-----------------------------------------------------------------------------
# define output
#-----------------------------------------------------------------------------
on.exit(return(invisible(item)))
#-----------------------------------------------------------------------------
# define some help variables
#-----------------------------------------------------------------------------
levelTabulator<-paste(rep("\t",menuLevel),sep="",collapse="")
levelTabulator<-paste("\n",levelTabulator,sep="")
#-----------------------------------------------------------------------------
# ist ein geschichteter Item?
#-----------------------------------------------------------------------------
batch<-1
if(item@stratum!=""){
if(length(rriskModel@items@items)>0){
for(i in 1:length(rriskModel@items@items)){
if(rriskModel@items@items[[i]]@typecode=="stra"){
stratum.item<-rriskModel@items@items[[i]]
batch<-nrow(stratum.item@data$stratum)
stid<-as.character(stratum.item@data$stratum$stid)
}
}
}
}
#-----------------------------------------------------------------------------
# enter distribution parameter values
#-----------------------------------------------------------------------------
if(dfamily=="beta"){
shape1.mess<-paste("Enter ",batch," value(s) for beta distribution parameter shape1 (positive)",sep="")
shape1<-myvalue.distrparams(item,rriskModel,title=shape1.mess,menuLevel=menuLevel+1,minmax=c(0,Inf),batch=batch)$output
shape2.mess<-paste("Enter ",batch," value(s) for beta distribution parameter shape2 (positive)",sep="")
shape2<-myvalue.distrparams(item,rriskModel,title=shape2.mess,menuLevel=menuLevel+1,minmax=c(0,Inf),batch=batch)$output
definition<-paste("beta(shape1=",shape1,",shape2=",shape2,")",sep="")
fullc<-paste("matrix(ncol=",batch,",data=","rbeta(n=",batch,"*rriskModel@settings@N,shape1=",shape1,",shape2=",shape2,"),byrow=TRUE)",sep="")
} else if(dfamily=="cauchy"){
location.mess<-paste("Enter ",batch," value(s) for Cauchy distribution parameter location",sep="")
location<-myvalue.distrparams(item,rriskModel,title=location.mess,menuLevel=menuLevel+1,minmax=c(-Inf,Inf),batch=batch)$output
scale.mess<-paste("Enter ",batch," value(s) for Cauchy distribution parameter scale (positive)",sep="")
scale<-myvalue.distrparams(item,rriskModel,title=scale.mess,menuLevel=menuLevel+1,minmax=c(0,Inf),batch=batch)$output
definition<-paste("cauchy(scale=",scale,",location=",location,")",sep="")
fullc<-paste("matrix(ncol=",batch,",data=","rcauchy(n=",batch,"*rriskModel@settings@N,location=",location,",scale=",scale,"),byrow=TRUE)",sep="")
} else if(dfamily=="chisq"){
df.mess<-paste("Enter ",batch," value(s) for chi-squared distribution parameter location (positive integer)",sep="")
df<-myvalue.distrparams(item,rriskModel,title=df.mess,menuLevel=menuLevel+1,minmax=c(0,Inf),asInteger=TRUE,batch=batch)$output
definition<-paste("chisq(df=",df,")",sep="")
fullc<-paste("matrix(ncol=",batch,",data=","rchisq(n=",batch,"*rriskModel@settings@N,df=",df,"),byrow=TRUE)",sep="")
} else if(dfamily=="chisqnc"){
df.mess<-paste("Enter ",batch," value(s) for non-central chi-squared distribution parameter df (positive)",sep="")
df<-myvalue.distrparams(item,rriskModel,title=df.mess,menuLevel=menuLevel+1,minmax=c(0,Inf),batch=batch)$output
#df<-round(df,digits=0)
ncp.mess<-paste("Enter ",batch," value(s) for non-central chi-squared distribution parameter ncp (positive)",sep="")
ncp<-myvalue.distrparams(item,rriskModel,title=ncp.mess,menuLevel=menuLevel+1,minmax=c(0,Inf),batch=batch)$output
definition<-paste("chisqnc(df=",df,",ncp=",ncp,")",sep="")
fullc<-paste("matrix(ncol=",batch,",data=","rchisq(n=",batch,"*rriskModel@settings@N,df=",df,",ncp=",ncp,"),byrow=TRUE)",sep="")
} else if(dfamily=="exp"){
rate.mess<-paste("Enter ",batch," value(s) for exponential distribution parameter rate (positive)",sep="")
rate<-myvalue.distrparams(item,rriskModel,title=rate.mess,menuLevel=menuLevel+1,minmax=c(0,Inf),batch=batch)$output
definition<-paste("exp(rate=",rate,")",sep="")
fullc<-paste("matrix(ncol=",batch,",data=","rexp(n=",batch,"*rriskModel@settings@N,rate=",rate,"),byrow=TRUE)",sep="")
} else if(dfamily=="f"){
df1.mess<-paste("Enter ",batch," value(s) for F distribution parameter df1 (positive)",sep="")
df1<-myvalue.distrparams(item,rriskModel,title=df1.mess,menuLevel=menuLevel+1,minmax=c(0,Inf),batch=batch)$output
df2.mess<-paste("Enter ",batch," value(s) for F distribution parameter df2 (positive)",sep="")
df2<-myvalue.distrparams(item,rriskModel,title=df2.mess,menuLevel=menuLevel+1,minmax=c(0,Inf),batch=batch)$output
definition<-paste("f(df1=",df1,",df2=",df2,")",sep="")
fullc<-paste("matrix(ncol=",batch,",data=","rf(n=",batch,"*rriskModel@settings@N,df=",df1,",df2=",df2,"),byrow=TRUE)",sep="")
} else if(dfamily=="gamma"){
shape.mess<-paste("Enter ",batch," value(s) for gamma distribution parameter shape (positive)",sep="")
shape<-myvalue.distrparams(item,rriskModel,title=shape.mess,menuLevel=menuLevel+1,minmax=c(0,Inf),batch=batch)$output
rate.mess<-paste("Enter ",batch," value(s) for gamma distribution parameter rate (positive)",sep="")
rate<-myvalue.distrparams(item,rriskModel,title=rate.mess,menuLevel=menuLevel+1,minmax=c(0,Inf),batch=batch)$output
definition<-paste("gamma(shape=",shape,",rate=",rate,")",sep="")
fullc<-paste("matrix(ncol=",batch,",data=","rgamma(n=",batch,"*rriskModel@settings@N,shape=",shape,",rate=",rate,"),byrow=TRUE)",sep="")
} else if(dfamily=="logis"){
location.mess<-paste("Enter ",batch," value(s) for logistic distribution parameter location",sep="")
location<-myvalue.distrparams(item,rriskModel,title=location.mess,menuLevel=menuLevel+1,minmax=c(0,Inf),batch=batch)$output
scale.mess<-paste("Enter ",batch," value(s) for logistic distribution parameter scale (positive)",sep="")
scale<-myvalue.distrparams(item,rriskModel,title=scale.mess,menuLevel=menuLevel+1,minmax=c(0,Inf),batch=batch)$output
definition<-paste("logis(location=",location,",scale=",scale,")",sep="")
fullc<-paste("matrix(ncol=",batch,",data=","rlogis(n=",batch,"*rriskModel@settings@N,location=",location,",scale=",scale,"),byrow=TRUE)",sep="")
} else if(dfamily=="lnorm"){
meanlog.mess<-paste("Enter ",batch," value(s) for log-normal distribution parameter meanlog",sep="")
meanlog<-myvalue.distrparams(item,rriskModel,title=meanlog.mess,menuLevel=menuLevel+1,minmax=c(-Inf,Inf),batch=batch)$output
sdlog.mess<-paste("Enter ",batch," value(s) for log-normal distribution parameter sdlog (positive)",sep="")
sdlog<-myvalue.distrparams(item,rriskModel,title=sdlog.mess,menuLevel=menuLevel+1,minmax=c(0,Inf),batch=batch)$output
definition<-paste("lnorm(meanlog=",meanlog,",sdlog=",sdlog,")",sep="")
fullc<-paste("matrix(ncol=",batch,",data=","rlnorm(n=",batch,"*rriskModel@settings@N,meanlog=",meanlog,",sdlog=",sdlog,"),byrow=TRUE)",sep="")
} else if(dfamily=="norm"){
mean.mess<-paste("Enter ",batch," value(s) for normal distribution parameter mean",sep="")
mean<-myvalue.distrparams(item,rriskModel,title=mean.mess,menuLevel=menuLevel+1,minmax=c(-Inf,Inf),batch=batch)$output
sd.mess<-paste("Enter ",batch," value(s) for normal distribution parameter sd (positive)",sep="")
sd<-myvalue.distrparams(item,rriskModel,title=sd.mess,menuLevel=menuLevel+1,minmax=c(0,Inf),batch=batch)$output
definition<-paste("norm(mean=",mean,",sd=",sd,")",sep="")
fullc<-paste("matrix(ncol=",batch,",data=","rnorm(n=",batch,"*rriskModel@settings@N,mean=",mean,",sd=",sd,"),byrow=TRUE)",sep="")
} else if(dfamily=="tnorm"){
mean.mess<-paste("Enter ",batch," value(s) for truncated normal distribution parameter mean",sep="")
mean<-myvalue.distrparams(item,rriskModel,title=mean.mess,menuLevel=menuLevel+1,minmax=c(-Inf,Inf),batch=batch)$output
sd.mess<-paste("Enter ",batch," value(s) for truncated normal distribution parameter sd (positive)",sep="")
sd<-myvalue.distrparams(item,rriskModel,title=sd.mess,menuLevel=menuLevel+1,minmax=c(0,Inf),batch=batch)$output
lower.mess<-paste("Enter ",batch," value(s) for truncated normal distribution parameter lower (< mean)",sep="")
lower<-myvalue.distrparams(item,rriskModel,title=lower.mess,menuLevel=menuLevel+1,minmax=c(-Inf,Inf),batch=batch)$output
upper.mess<-paste("Enter ",batch," value(s) for truncated normal distribution parameter upper (> mean)",sep="")
upper<-myvalue.distrparams(item,rriskModel,title=upper.mess,menuLevel=menuLevel+1,minmax=c(-Inf,Inf),batch=batch)$output
definition<-paste("tnorm(mean=",mean,",sd=",sd,",lower=",lower,",upper=",upper,")",sep="")
fullc<-paste("matrix(ncol=",batch,",data=","rtnorm(n=",batch,"*rriskModel@settings@N,mean=",mean,",sd=",sd,",lower=",lower,",upper=",upper,"),byrow=TRUE)",sep="")
} else if(dfamily=="t"){
df.mess<-paste("Enter ",batch," value(s) for t distribution parameter t (positive)",sep="")
df<-myvalue.distrparams(item,rriskModel,title=df.mess,menuLevel=menuLevel+1,minmax=c(-Inf,Inf),batch=batch)$output
definition<-paste("t(df=",df,")",sep="")
fullc<-paste("matrix(ncol=",batch,",data=","rt(n=",batch,"*rriskModel@settings@N,df=",df,"),byrow=TRUE)",sep="")
} else if(dfamily=="triang"){
min.mess<-paste("Enter ",batch," value(s) for triangular distribution parameter min",sep="")
min<-myvalue.distrparams(item,rriskModel,title=min.mess,menuLevel=menuLevel+1,minmax=c(-Inf,Inf),batch=batch)$output
mode.mess<-paste("Enter ",batch," value(s) for triangular distribution parameter mode (> min)",sep="")
mode<-myvalue.distrparams(item,rriskModel,title=mode.mess,menuLevel=menuLevel+1,minmax=c(-Inf,Inf),batch=batch)$output
max.mess<-paste("Enter ",batch," value(s) for triangular distribution parameter max (> mode)",sep="")
max<-myvalue.distrparams(item,rriskModel,title=max.mess,menuLevel=menuLevel+1,minmax=c(-Inf,Inf),batch=batch)$output
definition<-paste("triang(min=",min,",mode=",mode,",max=",max,")",sep="")
fullc<-paste("matrix(ncol=",batch,",data=","rtriang(n=",batch,"*rriskModel@settings@N,min=",min,",mode=",mode,",max=",max,"),byrow=TRUE)",sep="")
} else if(dfamily=="unif"){
min.mess<-paste("Enter ",batch," value(s) for uniform distribution parameter min",sep="")
min<-myvalue.distrparams(item,rriskModel,title=min.mess,menuLevel=menuLevel+1,minmax=c(-Inf,Inf),batch=batch)$output
max.mess<-paste("Enter ",batch," value(s) for uniform distribution parameter max",sep="")
max<-myvalue.distrparams(item,rriskModel,title=max.mess,menuLevel=menuLevel+1,minmax=c(-Inf,Inf),batch=batch)$output
definition<-paste("unif(min=",min,",max=",max,")",sep="")
fullc<-paste("matrix(ncol=",batch,",data=","runif(n=",batch,"*rriskModel@settings@N,min=",min,",max=",max,"),byrow=TRUE)",sep="")
} else if(dfamily=="weibull"){
shape.mess<-paste("Enter ",batch," value(s) for Weibull distribution parameter shape (positive)",sep="")
shape<-myvalue.distrparams(item,rriskModel,title=shape.mess,menuLevel=menuLevel+1,minmax=c(-Inf,Inf),batch=batch)$output
scale.mess<-paste("Enter ",batch," value(s) for Weibull distribution parameter scale (positive)",sep="")
scale<-myvalue.distrparams(item,rriskModel,title=scale.mess,menuLevel=menuLevel+1,minmax=c(-Inf,Inf),batch=batch)$output
definition<-paste("weibull(shape=",shape,",scale=",scale,")",sep="")
fullc<-paste("matrix(ncol=",batch,",data=","rweibull(n=",batch,"*rriskModel@settings@N,shape=",shape,",scale=",scale,"),byrow=TRUE)",sep="")
} else if(dfamily=="pert"){
min.mess<-paste("Enter ",batch," value(s) for beta pert distribution parameter min",sep="")
min<-myvalue.distrparams(item,rriskModel,title=min.mess,menuLevel=menuLevel+1,minmax=c(-Inf,Inf),batch=batch)$output
mode.mess<-paste("Enter ",batch," value(s) for beta pert distribution parameter mode (> min)",sep="")
mode<-myvalue.distrparams(item,rriskModel,title=mode.mess,menuLevel=menuLevel+1,minmax=c(-Inf,Inf),batch=batch)$output
max.mess<-paste("Enter ",batch," value(s) for beta pert distribution parameter max (> mode)",sep="")
max<-myvalue.distrparams(item,rriskModel,title=max.mess,menuLevel=menuLevel+1,minmax=c(-Inf,Inf),batch=batch)$output
shape.mess<-paste("Enter ",batch," value(s) for beta pert distribution parameter shape",sep="")
shape<-myvalue.distrparams(item,rriskModel,title=shape.mess,menuLevel=menuLevel+1,minmax=c(-Inf,Inf),batch=batch)$output
definition<-paste("pert(min=",min,",mode=",mode,",max=",max,",shape=",shape,")",sep="")
fullc<-paste("matrix(ncol=",batch,",data=","rpert(n=",batch,"*rriskModel@settings@N,min=",min,",mode=",mode,",max=",max,",shape=",shape,"),byrow=TRUE)",sep="")
} else if(dfamily=="gompertz"){
shape.mess<-paste("Enter ",batch," value(s) for Gompertz distribution parameter shape (positive)",sep="")
shape<-myvalue.distrparams(item,rriskModel,title=shape.mess,menuLevel=menuLevel+1,minmax=c(0,Inf),batch=batch)$output
scale.mess<-paste("Enter ",batch," value(s) for Gompertz distribution parameter scale (positive)",sep="")
scale<-myvalue.distrparams(item,rriskModel,title=scale.mess,menuLevel=menuLevel+1,minmax=c(0,Inf),batch=batch)$output
definition<-paste("gompertz(shape=",shape,",scale=",scale,")",sep="")
fullc<-paste("matrix(ncol=",batch,",data=","rgompertz(n=",batch,"*rriskModel@settings@N,shape=",shape,",scale=",scale,"),byrow=TRUE)",sep="")
}
#-----------------------------------------------------------------------------
# hier wird die Ausführbarkeit von 'fullc' geprüft
#-----------------------------------------------------------------------------
item.temp<-item
item.temp@fullc<-fullc
cat("\n----------------------------------------------------------------------\nEvaluating item values with predefined distribution parameters...\n----------------------------------------------------------------------\n")
fullcValues<-itemsEvaluation(item.temp,rriskModel)# hier wird die Ausführbarkeit von fullc geprüft
cat("\n***************************************\nFull command for",item@name,"\n***************************************\n")
if (inherits(fullcValues, "try-error")){
cat("Full command expression",fullc,"could not be evaluated !\n")
} else {
# Weise Item-Slots 'definition' und 'fullc' Inhalte zu
item@fullc<-fullc
if(batch>1){
colnames(fullcValues)<-stid
} else {
colnames(fullcValues)<-item@name
}
# Falls 'fullc' ausführbar ist, lasse die Zwischenergebnisse anzeigen
cat("\nDimension of test evaluation: ");cat(dim(fullcValues));cat("\n")
cat("\nitem@fullc=",fullc,"\n")
cat("\nGenerated item values (full command):\n");print(head(data.frame(fullcValues)));cat("...\n")
cat("\nSummary statistics of item values (full command):\n"); print(summary(fullcValues),digits=4);cat("\n")
item@fullc<-fullc
cat("\n***************************************\nSymbolical definition for",item@name,"\n***************************************\n")
cat("\nitem@definition=",definition,"\n")
item@definition<-definition
#--------------------------------------------------------------------------
# save simulated item value in data-slot
#--------------------------------------------------------------------------
item@data<-summary(fullcValues)
}
#-----------------------------------------------------------------------------
# hier wird die Ausführbarkeit von 'relaxc' geprüft
#----------------------------------------------------------------------------
relaxc<-paste("matrix(ncol=",batch,",data=runif(",batch,"*rriskModel@settings@N,min=",item@plausimin,",max=",item@plausimax,"),byrow=TRUE)",sep="")
relaxc.test<-paste("matrix(ncol=",batch,",data=runif(",batch,"*rriskModel@settings@Ntest,min=",item@plausimin,",max=",item@plausimax,"),byrow=TRUE)",sep="")
relaxcValues<-try(eval(parse(text=relaxc.test)),silent=TRUE)
if (inherits(relaxcValues, "try-error")){
cat("Relax command expression",relaxc,"could not be evaluated !\n")
} else {
if(batch>1){
colnames(relaxcValues)<-stid
} else { colnames(relaxcValues)<-item@name}
cat("\n***************************************\nRelax command for",item@name,"\n***************************************\n")
cat("\nDimension of test evaluation: ");cat(dim(relaxcValues));cat("\n")
cat("\nitem@relaxc=",relaxc,"\n")
cat("\nGenerated item values (relax command):\n");print(head(data.frame(relaxcValues)));cat("...\n")
cat("\nSummary statistics of item values (relax command):\n"); print(summary(relaxcValues),digits=4);cat("\n")
item@relaxc<-relaxc
}
#----------------------------------------------------------------------------
# definiere Output
#----------------------------------------------------------------------------
return(item)
} # end of function menu.mcrv.dfamily()
################################################################################
################################################################################
#' @description This function generates the user menu for maintaining scoring systems
#'
#' @details This function is not intended to be called directly but is internally called
#' during \code{rrisk} session.
#'
#' @name menu.define.data
#' @aliases menu.define.data
#' @title Non-executable auxiliary function
#' @usage menu.define.data(item,menuLevel=1)
#' @param item ...
#' @param menuLevel numeric value indicating menu level
#' @keywords items
#' @export
menu.define.data<-function(item,menuLevel=1)
{ on.exit(return(invisible(item)))
levelTabulator<-paste(rep("\t",menuLevel),sep="",collapse="")
levelTabulator<-paste("\n",levelTabulator,sep="")
availableData<-list.files(system.file("data", package="rrisk"))
availableData<-apply(matrix(availableData,ncol=1),1,function(x)gsub(x=x,".rda",replacement=""))
rriskData<-paste(availableData,"(rrisk data set)")
if(length(availableData)>0){
choices<-c(rriskData,
"load user-defined data set",
"Exit dialog")
input<-99
while(!is.element(input,seq(1:length(choices)))){
input<-mymenu(title="Choose the data set you wish add to the current model item",choices=choices,help="No further help available",levelTabulator=levelTabulator)
if(input<=(length(choices)-2)){
datasetName<-availableData[as.numeric(input)]
data(list=datasetName,package="rrisk",envir = .GlobalEnv)
item@data<-get(datasetName,envir = .GlobalEnv)
assign(item@name,value=item@data,envir = .GlobalEnv)
print(head(get(item@name,envir = .GlobalEnv))) # show head of the data set
cat("...\n\n")
cat("Summary statistics:\n")
print(summary(get(item@name,envir = .GlobalEnv)),digits=4)
cat("\nData set has been successfully added to the current model item.\n")
View(get(item@name,envir = .GlobalEnv),title="Loaded data set")
break()
} else if(input==(length(choices)-1)){
item<-dataLoad(item)
break()
} else if (input==length(choices)){
break()
}
input<-99
} # end while
} else {
choices<-c("load user-defined data set","Exit dialog")
input<-99
while(!is.element(input,seq(1:length(choices)))){
input<-mymenu(title="Choose the data set you wish add to the current model item",choices=choices,help="No further help available",levelTabulator=levelTabulator)
if(input==(length(choices)-1)){
item<-dataLoad(item)
break()
} else if (input==length(choices)){
break()
}
input<-99
} # end while
}
} # end of function menu.chooseDataset()
################################################################################
################################################################################
#' @description Function that loads data sets
#'
#' @details This function is not intended to be called directly but is internally called
#' during \code{rrisk} session.
#'
#' @name dataLoad
#' @aliases dataLoad
#' @title Non-executable auxiliary function
#' @usage dataLoad(item)
#' @param item ...
#' @keywords items
#' @export
dataLoad<-function(item)
{ on.exit(return(item))
dataFile<-tclvalue(tkgetOpenFile(filetypes=" {{Data file} {.txt}} "))
if(nchar(dataFile)>0)
{ try.result<-try(dataset<-read.table(dataFile,header=TRUE))
if (inherits(try.result, "try-error"))
{ tkmessageBox(message=paste("The data set could NOT be loadet. Please, check the data format!"),icon="error",type="ok")
} else
{ item.name<-item@name
item@data<-dataset
item@definition<- paste("Variables: ",paste(names(dataset),collapse=" "))
assign(item.name,value=dataset,envir = .GlobalEnv) # activate the data set
tkmessageBox(message="The data set has been successfully loaded!")
print(head(get(item.name,envir = .GlobalEnv))) # show head of the data set
cat("...\n\n")
cat("Summary statistics:\n")
print(summary(get(item.name,envir = .GlobalEnv)),digits=4)
View(get(item.name,envir = .GlobalEnv),title="Loaded data set")
}
} # end if(nchar(modelFile)>0)
} # end function dataLoad()
################################################################################
################################################################################
#' @description Function that evaluates and saves the input value for item objects from the
#' rriskModel class
#'
#' @details This function is not intended to be called directly but is internally called
#' during \code{rrisk} session.
#'
#' @name myvalue
#' @aliases myvalue
#' @title Non-executable auxiliary function
#' @usage myvalue(item,rriskModel,title="Tryme",menuLevel=1,batch=1,run=FALSE)
#' @param item ...
#' @param rriskModel ...
#' @param title ...
#' @param menuLevel ...
#' @param batch ...
#' @param run boolean value defining whether this function nwill be calls during 1d or 2d simulation, \code{run=c(TRUE,FALSE)}
#' @keywords items
#' @export
myvalue<-function(item,rriskModel,title="Tryme",menuLevel=1,batch=1,run=FALSE)
{ #-------------------------------------------------------------------------------
# define help variables
#-------------------------------------------------------------------------------
levelTabulator<-paste(rep("\t",menuLevel),sep="",collapse="")
levelTabulator<-paste("\n",levelTabulator,sep="")
length.error <- paste(levelTabulator,"Entry does not evaluate to required length",batch,levelTabulator)
output<-NA
values<-NA
#-----------------------------------------------------------------------------
# define output
#-----------------------------------------------------------------------------
on.exit(return(list(output=output,values=values)))
#-----------------------------------------------------------------------------
# get r-code for current item
#-----------------------------------------------------------------------------
try.again <- TRUE
while (try.again){
cat(levelTabulator,title,levelTabulator,rep("-",35),levelTabulator)
txt <- readline()
#-----------------------------------------------------------------------------
# get data to evaluate current item
#-----------------------------------------------------------------------------
dataForWith<-get.dataForWith(item,rriskModel,run=run,catEval=FALSE)
#---------------------------------------------------------------------------
# versuche txt-expression zu evaluieren
#---------------------------------------------------------------------------
if(length(dataForWith)>0){
try.result<-try(values<-with(data=dataForWith,suppressWarnings(eval(parse(text=txt)))),silent=TRUE)
} else{
try.result<-try(values<-suppressWarnings(eval(parse(text=txt))),silent=TRUE)
}
#---------------------------------------------------------------------------
# falls mit einer Fehlermeldung abgebrochen, zeige entsprechende Meldung
#---------------------------------------------------------------------------
if(inherits(try.result, "try-error")){
cat(levelTabulator,"The expression cannot be evaluated because of unknown variable, data oder function!","\n")
next()
} else {
#-----------------------------------------------------------------------
# und die Länge von values muss auch stimmen
#-----------------------------------------------------------------------
if(item@typecode=="numv")
{ if(length(values)!=batch){
cat(levelTabulator,"Entry does not evaluate to required length of ",batch,"\n")
next()
}
} else if(item@typecode=="fnrv"){
requiredRows<-rriskModel@settings@N
if(nrow(values)!=requiredRows | ncol(values)!=batch){
cat(levelTabulator,"Entry does not evaluate to required number of rows ",requiredRows,"and",batch,"columns\n")
next()
}
}
#-------------------------------------------------------------------------
# Lasse die (gerundete) Ergebnisse als Zwischenausgabe anzeigen
#-------------------------------------------------------------------------
if(item@stratum==""){
cat("\nEntry evaluates to:",paste(try(round(values,digits=2)),collapse=", "),"\n")
} else {
cat("\nEntry evaluates to:\n");print(head(values));cat("...\n")
}
output<-txt
try.again<-FALSE
} # end if(inherits(try.result, "try-error"))
} # end while
return(list(output=output,values=values))
} # end function myvalue()
################################################################################
################################################################################
#' @description Function that evaluates and saves the input numeric value
#'
#' @details This function is not intended to be called directly but is internally called
#' during \code{rrisk} session.
#'
#' @name define.numv.fnrv
#' @aliases define.numv.fnrv
#' @title Non-executable auxiliary function
#' @usage define.numv.fnrv(item,rriskModel,menuLevel=1,type="numv")
#' @param item ...
#' @param rriskModel an instance of the class \code{modelClass}
#' @param menuLevel ...
#' @param type character string defining item type, \code{type=c("numv","fnrv")}
#' @keywords items
#' @export
define.numv.fnrv <- function(item,rriskModel,menuLevel=1,type="numv")
{ #-----------------------------------------------------------------------------
# define output
#-----------------------------------------------------------------------------
on.exit(return(item))
#-----------------------------------------------------------------------------
# define some help varisbles
#-----------------------------------------------------------------------------
item.name<-item@name
batch<-1
#-----------------------------------------------------------------------------
# ist es ein geschichteter item?
#-------------------------------------------- ---------------------------------
if(item@stratum!=""){
if(length(rriskModel@items@items)>0){
for(i in 1:length(rriskModel@items@items)){
stratum.item<-rriskModel@items@items[[i]]
if(stratum.item@name==item@stratum){
batch<-nrow(stratum.item@data$stratum)
stid<-as.character(stratum.item@data$stratum$stid) # only for fnrv items
}
}
}
} # end
#-----------------------------------------------------------------------------
# define console message
#-----------------------------------------------------------------------------
if(type=="fnrv"){
title <- paste("Enter expression that could be evaluated to data frame consisting of",batch,"columns and",rriskModel@settings@N,"rows")
} else if (type=="numv"){
title <- paste("Enter expression that could be evaluated to",batch,"numerical values(s)")
}
#----------------------------------------------------------------------------
# Hier wird 'fullc' definiert und als Zeichenkette zurückgegeben
#----------------------------------------------------------------------------
myvalue.results<-myvalue(item,rriskModel=rriskModel,title,menuLevel=menuLevel,batch=batch,run=TRUE)
#-----------------------------------------------------------------------------
# save evaluated results
#-----------------------------------------------------------------------------
fullc<-myvalue.results$output
values<-myvalue.results$values
#-----------------------------------------------------------------------------
# hier werden die Ergebnise angezeit
#-----------------------------------------------------------------------------
cat("\n***************************************\nFull command for",item@name,"\n***************************************\n")
item@fullc<-fullc # Weise Item-Slots 'definition' und 'fullc' Inhalte zu
cat("\nDimension of test evaluation: ",dim(values),"\n")
cat("\nitem@fullc=",fullc,"\n") # Falls 'fullc' ausführbar ist, lasse die Zwischenergebnisse anzeigen
if(type=="numv" & batch==1){
cat("\nGenerated item value:",values,"\n")
} else if(type=="numv" & batch>1){
names(values)<-stid
cat("\nGenerated item values (full command):\n");print(values);cat("\n")
} else if(type=="fnrv"){
if(batch==1){
colnames(values)<-item@name
} else {
colnames(values)<-stid
}
cat("\nGenerated item values (full command):\n\n");print(head(values));cat("...\n")
cat("\nSummary statistics of item values (full command):\n"); print(summary(values),digits=4);cat("\n")
}
item@fullc<-fullc
cat("\n***************************************\nSymbolical definition for",item@name,"\n***************************************\n")
cat("\nitem@definition=",fullc,"\n")
item@definition<-fullc
cat("\n***************************************\nRelax command for",item@name,"\n***************************************\n")
item@relaxc<-fullc
cat("\nitem@relaxc=",fullc,"\n") # Falls 'fullc' ausführbar ist, lasse die Zwischenergebnisse anzeigen
cat("\n")
#--------------------------------------------------------------------------
# save simulated item value in data-slot
#--------------------------------------------------------------------------
if(type=="numv"){
item@data<-values
} else if (type=="fnrv"){
item@data<-summary(values)
}
#----------------------------------------------------------------------------
# definiere Output
#----------------------------------------------------------------------------
return(item)
} # end of function define.numv.fnrv()
################################################################################
################################################################################
#' @description Function that loads external models
#'
#' @details This function is not intended to be called directly but is internally called
#' during \code{rrisk} session.
#'
#' @name define.fdoc
#' @aliases define.fdoc
#' @title Non-executable auxiliary function
#' @usage define.fdoc(item)
#' @param item ...
#' @keywords items
#' @export
define.fdoc<-function(item)
{ on.exit(return(item))
if(is.null(item@data))
{ tempfun<-fix(tempfun)
assign(item@name,tempfun)
item@data<-get(item@name)
} else
{ assign("fdocedited",item@data)
fdocedited<-fix(fdocedited)
item@data<-get("fdocedited")
}
assign(item@name,item@data,envir=.GlobalEnv)
temp1<-paste(item@name,"<-",deparse(item@data)[1],collapse="")
temp2<-paste(deparse(item@data)[-1],collapse="\n")
temp3<-paste(temp1,temp2,collapse="\n")
item@definition<-temp3
return(item)
} # end of function define.fdoc()
################################################################################
################################################################################
#' @description This function activates all functions documented in 'fdoc' items,
#' i.e. this function add all fdoc function to the workspace.
#'
#' @name activateFDOCs
#' @aliases activateFDOCs
#' @title Non-executable auxiliary function
#' @usage activateFDOCs(items)
#' @param items ...
#' @keywords items
#' @export
activateFDOCs<-function(items)
{
items<-items@items
if(length(items)>0)
{ for(i in 1:length(items))
{ if(items[[i]]@typecode=="fdoc") assign(items[[i]]@name,items[[i]]@data,envir=.GlobalEnv)
}
}
} # end of function activateFDOC()
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.