Object-oriented programming in Opasnet

From Testiwiki
Revision as of 08:06, 3 April 2012 by Jouni (talk | contribs) (See also)
Jump to: navigation, search

Object-oriented programming is an approach where programs (or, in Opasnet, typically assessment models) have a modular structure in such a way that each part is considered as a separate object that has specific properties and interacts with other objects in standard ways.

Question

How should object-oriented programming be utilised in Opasnet in such a way that

  • it has seamless connections to R-tools,
  • it is easy to understand by non-expert users and contributors,
  • it uses the variable structure and other information structures (e.g. universal object) used in open assessment, and
  • it enables standards for typical processes in environmental health assessments (such as distribution modelling, life tables, decision optimising, etc.).

Answer

Structure of objects

Objects have two different implementations: wiki page in Opasnet, and S4 class object called oavar in R-tools. The wiki page is the user-friendly interface for users, and oavar is the versatile format for efficient, standardised modelling.

Attribute What it contains How implemented in the wiki How implemented in the R-tools as a S4 class object oavar
question A research question that defines the topic of the object First main heading Slot question = "character". Contains the question as text.
answer The current best answer to the question, shown as text, data table, or distribution. Second main heading; contains a single data table. NOTE! The data table is actually under ratonale/data but often it is the same as answer. The actual answer is precisely described by distribution and sample (see below). Only sub-attributes are implemented.
index List of indices that are used to specify the answer. Index columns in the data table Slot index = "data.frame". A data frame where the first column is a factor with all indices used, and the second column is a factor with the index type (text, real, date) where text is a discrete index type.
observation An identifier of an individual when the answer consists of a group of individuals. Obs column (usually implicit because the default is that each row is an observation) in the data table Slot observation = "vector". A vector from 1..o where o is the number of observations.
iteration An identifier of a probabilistic run or iteration. Sometimes it is also called a possible world or realisation. Iter column in the data table (data usually not shown probabilistically) Slot iteration = "vector". A vector from 1..n where n is the number of iterations. Default n = 10000.
distribution A joint probability distribution (with indices as dimensions) describing the answer mathematically. Not shown Slot distribution = "distribution?". A distribution created with e.g. dnorm(0,1). We don't know yet how to actually implement this and how the indices are included.
sample A random sample from the distribution (default is 10000 iterations). Not shown Slot sample = "data.frame". The data frame must contain columns Iter, one column for each index, and at least one result column. There may also be a column Obs.
rationale Any information that is needed to convince a critical reader that the answer is good. Third main heading Only sub-attributes are implemented.
data Observations, expert judgement, discussions, and other pieces of information. Subheading under Rationale Slot data = "data.frame". The data frame must contain at least one index column, and at least one result column. If column Obs is omitted, it is assumed that each row is a separate observation.
unit The measurement unit(s) that are used in the answer to measure the topic. Subheading under Rationale with plain text. Also mentioned in the data table with parameter unit. Slot unit = "character". The format used is kg m^2 /s^2 where a space implies a multiplication.
dependencies List of upstream objects that are causally related to this object. Subheading under Rationale with a list of links to upstream (and sometimes downstream) wiki pages. Slot dependencies = "factor". The format is Op_fi:Vaativuusluokkien keskipalkat. If the wiki identifier is omitted, the default is op_en.
formula A computer code or algorithm to derive the answer from rationale and objects listed in dependencies. The formula may assume a deterministic dependency (e.g. y = k*x + b), a conditional probability structure (y ~ dnorm(x, sd), or a rank correlation matrix. Subheading under Rationale, often using <rcode> tags. Slot formula = "list". There may be several competing algorithms. Each of them is described (as a function?) as one entry in the list. When implementing the formula, the algorithm that is implemented is randomly selected for each iteration with equal probability unless otherwise specified in formula.prob.
formula.prob A list of probabilities assigned to the competing algorithms in formula. The default is that each has an equal probability. A detail in <rcode> code. Slot formula.prob = "vector". Should have the same size as formula.

Coding

R code should be developed in such a way that there are object-specific implementations of critical functions. The user should see straightforward content, and all messy indexing etc should happen behind scenes.

Rationale

See also

References


Related files

<mfanonymousfilelist></mfanonymousfilelist>