Das BayesXShinyApp R-Paket ist eine Webapp (Shiny-App) für das BayesX. Mit der Benutzeroberfläche können Statistiken von BayesX geschätzgen Modellen analysiert werden. Die App ist in der Lage die Dichte, den Mittelwert, die Varianz und andere Momente zu visualisieren. Jede erfolgreiche Interaktion mit der App wird aufgezeichnet und der Benutzer kann darauf zurückgreifen, indem er sich ein R-Skript von der App generieren lässt. Dieses Skript kann dann in der R-Konsole verwendet werden.
Die App kann mittels
library(BayesXShinyApp)
run_app()
gestartet werden. Die Bedienung ist selbsterklärend.
Das R-Paket kann mit neuen Verteilungen modular erweitert werden,
hierzu rufen wir das R/distribution.R
auf. In der ersten Zeile wird ein
.distribution <- list(...)
erstellt, welches alle
unterstützten Verteilung beinhaltet (dagum
, bivnormal
). Hinzufügen eines
neuen Elements in .distribution(..., newdistribution = structure(list(...), class = c('distribution', 'list'))
macht das Paket
mit der neuen Verteilung kompatibel. Wir nennen newdistribution
ein
Verteilungsobjekt.
Jedes Verteilungsobjekt besitzt mindestens folgende Felder
-
density
enthält die Dichtefunktionfunction(
param1
, ...) {...}
.param1, ...
entspricht den Parametern der Verteilung. Dem Namen des Parameters wird die Dimension in Form einer Zahl hinzugefügt, z.B.mu_1
entspricht dem$\mu$ Parameter irgendeiner Verteilung. Handelt es sich um eine multivariate Verteilung und die besitzt Parameter in Form von Vektoren, so sieht die Namenskonvention wie folgt ausmu_1, mu_2
. Dies entspricht dem 2 dimensionalen $\mu$ Vektor -
class
ist eincharacter vector
und beschreibt den Typ der Verteilung -
link
ist entweder eine Funktionfunction(eta) {...}
oder eine Liste von Funktionenlist(
param1
= function(eta) {...},
param2
= function(eta) {...})
. Im Ersteren wir dieselbe Funktion auf jedem Parameter der Verteilung angewandt. Letzere Variante erlaubt dem Entwickler für jeden Parameter seine Linkfunktion zu definieren. -
moment
ist eine Liste von Funktionen die Momente definieren. Jede Funktion in der Liste ist mit dem Momentnamen beschriftet und hat als Rückgabewert eine Listereturn(list(
param1
= ...))
. Das R-Paket unterstützt folgende Namenmean
,median
,mode
,var
,cor
. Möchte man die unterstützen Namen erweitern, so muss imR/distribution.R
Dokument eine Funktion definiert werden mit folgender Struktur
# ersetze MOMENTNAME mit dem neuen Momentnamen
MOMENTNAME.distribution <- function(distr, ...){
fun <- distr$moment$MOMENTNAME
if( is.null(fun) )
stop("no MOMENTNAME function defined for distribution")
else
return(fun)
}
Wir möchten nun ein Verteilungsobjekt cauchy
definieren,
da wir mit BayesX ein Modell mit cauchy
Parametern (equationtypes t
und s
)
geschätzt haben. Der
Verteilungsname cauchy
muss BayesX Verteilungsnamen entsprechen. Die Linkfunktion
ist ìdentity
und besagt dass die aus dem BayesX geschätzten (sampled) Parameter
genau so in die Dichtefunktion und Momentfunktionen verwendet werden sollen. Da
die cauchy
Verteilung keine Momente besitzt, werden wir den Teil leer lassen.
Das Verteilungsobjekt würde nun so aussehen
.distribution <-
list(...,
cauchy = structure(
list(
# wobei 't' und 's' den equationtypes in BayesX entspricht
density = function(t_1, s_1, ...) {
return( dcauchy(location = t_1, scale = s_1, ...) )
},
class = "univariate",
# identity
link = function(eta) eta,
# https://de.wikipedia.org/wiki/Cauchy-Verteilung
moment = list()
), class = c("distribution", "list"))
)