mirror of
https://github.com/msberends/AMR.git
synced 2024-12-25 20:06:12 +01:00
kurtosis, skewness, start with ML
This commit is contained in:
parent
c768ba0d9c
commit
14b990d769
@ -1,6 +1,6 @@
|
|||||||
Package: AMR
|
Package: AMR
|
||||||
Version: 0.2.0.9008
|
Version: 0.2.0.9009
|
||||||
Date: 2018-07-04
|
Date: 2018-07-06
|
||||||
Title: Antimicrobial Resistance Analysis
|
Title: Antimicrobial Resistance Analysis
|
||||||
Authors@R: c(
|
Authors@R: c(
|
||||||
person(
|
person(
|
||||||
@ -28,6 +28,7 @@ Depends:
|
|||||||
R (>= 3.0.0)
|
R (>= 3.0.0)
|
||||||
Imports:
|
Imports:
|
||||||
backports,
|
backports,
|
||||||
|
broom,
|
||||||
clipr,
|
clipr,
|
||||||
curl,
|
curl,
|
||||||
dplyr (>= 0.7.0),
|
dplyr (>= 0.7.0),
|
||||||
|
23
NAMESPACE
23
NAMESPACE
@ -6,6 +6,11 @@ S3method(as.integer,mic)
|
|||||||
S3method(as.numeric,mic)
|
S3method(as.numeric,mic)
|
||||||
S3method(barplot,mic)
|
S3method(barplot,mic)
|
||||||
S3method(barplot,rsi)
|
S3method(barplot,rsi)
|
||||||
|
S3method(hist,frequency_tbl)
|
||||||
|
S3method(kurtosis,data.frame)
|
||||||
|
S3method(kurtosis,default)
|
||||||
|
S3method(kurtosis,matrix)
|
||||||
|
S3method(plot,frequency_tbl)
|
||||||
S3method(plot,mic)
|
S3method(plot,mic)
|
||||||
S3method(plot,rsi)
|
S3method(plot,rsi)
|
||||||
S3method(print,data.table)
|
S3method(print,data.table)
|
||||||
@ -14,6 +19,9 @@ S3method(print,mic)
|
|||||||
S3method(print,rsi)
|
S3method(print,rsi)
|
||||||
S3method(print,tbl)
|
S3method(print,tbl)
|
||||||
S3method(print,tbl_df)
|
S3method(print,tbl_df)
|
||||||
|
S3method(skewness,data.frame)
|
||||||
|
S3method(skewness,default)
|
||||||
|
S3method(skewness,matrix)
|
||||||
S3method(summary,mic)
|
S3method(summary,mic)
|
||||||
S3method(summary,rsi)
|
S3method(summary,rsi)
|
||||||
export("%like%")
|
export("%like%")
|
||||||
@ -43,6 +51,7 @@ export(interpretive_reading)
|
|||||||
export(is.mic)
|
export(is.mic)
|
||||||
export(is.rsi)
|
export(is.rsi)
|
||||||
export(key_antibiotics)
|
export(key_antibiotics)
|
||||||
|
export(kurtosis)
|
||||||
export(left_join_microorganisms)
|
export(left_join_microorganisms)
|
||||||
export(like)
|
export(like)
|
||||||
export(mo_property)
|
export(mo_property)
|
||||||
@ -54,6 +63,7 @@ export(rsi)
|
|||||||
export(rsi_df)
|
export(rsi_df)
|
||||||
export(rsi_predict)
|
export(rsi_predict)
|
||||||
export(semi_join_microorganisms)
|
export(semi_join_microorganisms)
|
||||||
|
export(skewness)
|
||||||
export(top_freq)
|
export(top_freq)
|
||||||
exportMethods(as.data.frame.frequency_tbl)
|
exportMethods(as.data.frame.frequency_tbl)
|
||||||
exportMethods(as.double.mic)
|
exportMethods(as.double.mic)
|
||||||
@ -61,6 +71,12 @@ exportMethods(as.integer.mic)
|
|||||||
exportMethods(as.numeric.mic)
|
exportMethods(as.numeric.mic)
|
||||||
exportMethods(barplot.mic)
|
exportMethods(barplot.mic)
|
||||||
exportMethods(barplot.rsi)
|
exportMethods(barplot.rsi)
|
||||||
|
exportMethods(hist.frequency_tbl)
|
||||||
|
exportMethods(kurtosis)
|
||||||
|
exportMethods(kurtosis.data.frame)
|
||||||
|
exportMethods(kurtosis.default)
|
||||||
|
exportMethods(kurtosis.matrix)
|
||||||
|
exportMethods(plot.frequency_tbl)
|
||||||
exportMethods(plot.mic)
|
exportMethods(plot.mic)
|
||||||
exportMethods(plot.rsi)
|
exportMethods(plot.rsi)
|
||||||
exportMethods(print.data.table)
|
exportMethods(print.data.table)
|
||||||
@ -69,8 +85,13 @@ exportMethods(print.mic)
|
|||||||
exportMethods(print.rsi)
|
exportMethods(print.rsi)
|
||||||
exportMethods(print.tbl)
|
exportMethods(print.tbl)
|
||||||
exportMethods(print.tbl_df)
|
exportMethods(print.tbl_df)
|
||||||
|
exportMethods(skewness)
|
||||||
|
exportMethods(skewness.data.frame)
|
||||||
|
exportMethods(skewness.default)
|
||||||
|
exportMethods(skewness.matrix)
|
||||||
exportMethods(summary.mic)
|
exportMethods(summary.mic)
|
||||||
exportMethods(summary.rsi)
|
exportMethods(summary.rsi)
|
||||||
|
importFrom(broom,tidy)
|
||||||
importFrom(clipr,read_clip_tbl)
|
importFrom(clipr,read_clip_tbl)
|
||||||
importFrom(clipr,write_clip)
|
importFrom(clipr,write_clip)
|
||||||
importFrom(curl,nslookup)
|
importFrom(curl,nslookup)
|
||||||
@ -107,6 +128,7 @@ importFrom(dplyr,vars)
|
|||||||
importFrom(grDevices,boxplot.stats)
|
importFrom(grDevices,boxplot.stats)
|
||||||
importFrom(graphics,axis)
|
importFrom(graphics,axis)
|
||||||
importFrom(graphics,barplot)
|
importFrom(graphics,barplot)
|
||||||
|
importFrom(graphics,hist)
|
||||||
importFrom(graphics,plot)
|
importFrom(graphics,plot)
|
||||||
importFrom(graphics,text)
|
importFrom(graphics,text)
|
||||||
importFrom(knitr,kable)
|
importFrom(knitr,kable)
|
||||||
@ -119,6 +141,7 @@ importFrom(rvest,html_nodes)
|
|||||||
importFrom(rvest,html_table)
|
importFrom(rvest,html_table)
|
||||||
importFrom(stats,fivenum)
|
importFrom(stats,fivenum)
|
||||||
importFrom(stats,mad)
|
importFrom(stats,mad)
|
||||||
|
importFrom(stats,na.omit)
|
||||||
importFrom(stats,pchisq)
|
importFrom(stats,pchisq)
|
||||||
importFrom(stats,sd)
|
importFrom(stats,sd)
|
||||||
importFrom(tibble,tibble)
|
importFrom(tibble,tibble)
|
||||||
|
13
NEWS.md
13
NEWS.md
@ -1,10 +1,14 @@
|
|||||||
# 0.2.0.90xx (development version)
|
# 0.2.0.90xx (development version)
|
||||||
#### New
|
#### New
|
||||||
* Support for Addins menu in RStudio to quickly insert `%in%` or `%like%` (and give them keyboard shortcuts), or to view the datasets that come with this package
|
* Support for Addins menu in RStudio to quickly insert `%in%` or `%like%` (and give them keyboard shortcuts), or to view the datasets that come with this package
|
||||||
* Function `top_freq` function to get the top/below *n* items of frequency tables
|
* For convience, descriptive statistical functions `kurtosis` and `skewness` that are lacking in base R - they are generic functions and have support for vectors, data.frames and matrices
|
||||||
* Vignette about frequency tables
|
* New for frequency tables (function `freq`):
|
||||||
* Header of frequency tables now also show MAD and IQR
|
* A vignette to explain its usage
|
||||||
* Possibility to globally set the default for the amount of items to print in frequency tables (`freq` function), with `options(max.print.freq = n)`
|
* Support for existing functions `hist` and `plot` to use a frequency table as input: `hist(freq(df$age))`
|
||||||
|
* Support for quasiquotation: `freq(mydata, mycolumn)` is the same as `mydata %>% freq(mycolumn)`
|
||||||
|
* Function `top_freq` function to return the top/below *n* items as vector
|
||||||
|
* Header of frequency tables now also show Mean Absolute Deviaton (MAD) and Interquartile Range (IQR)
|
||||||
|
* Possibility to globally set the default for the amount of items to print, with `options(max.print.freq = n)` where *n* is your preset value
|
||||||
* Functions `clipboard_import` and `clipboard_export` as helper functions to quickly copy and paste from/to software like Excel and SPSS
|
* Functions `clipboard_import` and `clipboard_export` as helper functions to quickly copy and paste from/to software like Excel and SPSS
|
||||||
* Function `g.test` to perform the Χ<sup>2</sup> distributed [*G*-test](https://en.wikipedia.org/wiki/G-test)
|
* Function `g.test` to perform the Χ<sup>2</sup> distributed [*G*-test](https://en.wikipedia.org/wiki/G-test)
|
||||||
* Function `ratio` to transform a vector of values to a preset ratio (convenient to use with `g.test`). For example:
|
* Function `ratio` to transform a vector of values to a preset ratio (convenient to use with `g.test`). For example:
|
||||||
@ -16,7 +20,6 @@ ratio(c(772, 1611, 737), ratio = "1:2:1")
|
|||||||
|
|
||||||
#### Changed
|
#### Changed
|
||||||
* `%like%` now supports multiple patterns
|
* `%like%` now supports multiple patterns
|
||||||
* Frequency tables (function `freq`) now supports quasiquotation: `freq(mydata, mycolumn)`, or `mydata %>% freq(mycolumn)`
|
|
||||||
* Frequency tables are now actual `data.frame`s with altered console printing to make it look like a frequency table. Because of this, the parameter `toConsole` is not longer needed.
|
* Frequency tables are now actual `data.frame`s with altered console printing to make it look like a frequency table. Because of this, the parameter `toConsole` is not longer needed.
|
||||||
* Small translational improvements to the `septic_patients` dataset
|
* Small translational improvements to the `septic_patients` dataset
|
||||||
* Small improvements to the `microorganisms` dataset, especially for *Salmonella*
|
* Small improvements to the `microorganisms` dataset, especially for *Salmonella*
|
||||||
|
43
R/freq.R
43
R/freq.R
@ -46,8 +46,8 @@
|
|||||||
#'
|
#'
|
||||||
#' For dates and times of any class, these additional values will be calculated with \code{na.rm = TRUE} and shown into the header:
|
#' For dates and times of any class, these additional values will be calculated with \code{na.rm = TRUE} and shown into the header:
|
||||||
#' \itemize{
|
#' \itemize{
|
||||||
#' \item{Oldest, using \code{\link[base]{min}}}
|
#' \item{Oldest, using \code{\link{min}}}
|
||||||
#' \item{Newest, using \code{\link[base]{max}}, with difference between newest and oldest}
|
#' \item{Newest, using \code{\link{max}}, with difference between newest and oldest}
|
||||||
#' \item{Median, using \code{\link[stats]{median}}, with percentage since oldest}
|
#' \item{Median, using \code{\link[stats]{median}}, with percentage since oldest}
|
||||||
#' }
|
#' }
|
||||||
#'
|
#'
|
||||||
@ -522,3 +522,42 @@ as.data.frame.frequency_tbl <- function(x, ...) {
|
|||||||
attr(x, 'opt') <- NULL
|
attr(x, 'opt') <- NULL
|
||||||
as.data.frame.data.frame(x, ...)
|
as.data.frame.data.frame(x, ...)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#' @noRd
|
||||||
|
#' @exportMethod hist.frequency_tbl
|
||||||
|
#' @export
|
||||||
|
#' @importFrom dplyr %>% pull
|
||||||
|
#' @importFrom graphics hist
|
||||||
|
hist.frequency_tbl <- function(x, ...) {
|
||||||
|
|
||||||
|
opt <- attr(x, 'opt')
|
||||||
|
|
||||||
|
if (!is.null(opt$vars)) {
|
||||||
|
title <- opt$vars
|
||||||
|
} else {
|
||||||
|
title <- ""
|
||||||
|
}
|
||||||
|
|
||||||
|
items <- x %>% pull(item)
|
||||||
|
counts <- x %>% pull(count)
|
||||||
|
vect <- rep(items, counts)
|
||||||
|
hist(vect, main = paste("Histogram of", title), xlab = title, ...)
|
||||||
|
}
|
||||||
|
|
||||||
|
#' @noRd
|
||||||
|
#' @exportMethod plot.frequency_tbl
|
||||||
|
#' @export
|
||||||
|
#' @importFrom dplyr %>% pull
|
||||||
|
plot.frequency_tbl <- function(x, y, ...) {
|
||||||
|
opt <- attr(x, 'opt')
|
||||||
|
|
||||||
|
if (!is.null(opt$vars)) {
|
||||||
|
title <- opt$vars
|
||||||
|
} else {
|
||||||
|
title <- ""
|
||||||
|
}
|
||||||
|
|
||||||
|
items <- x %>% pull(item)
|
||||||
|
counts <- x %>% pull(count)
|
||||||
|
plot(x = items, y = counts, ylab = "Count", xlab = title, ...)
|
||||||
|
}
|
||||||
|
@ -35,12 +35,14 @@ globalVariables(c('abname',
|
|||||||
'key_ab',
|
'key_ab',
|
||||||
'key_ab_lag',
|
'key_ab_lag',
|
||||||
'key_ab_other',
|
'key_ab_other',
|
||||||
|
'labs',
|
||||||
'median',
|
'median',
|
||||||
'mic',
|
'mic',
|
||||||
'microorganisms',
|
'microorganisms',
|
||||||
'mocode',
|
'mocode',
|
||||||
'molis',
|
'molis',
|
||||||
'n',
|
'n',
|
||||||
|
'na.omit',
|
||||||
'other_pat_or_mo',
|
'other_pat_or_mo',
|
||||||
'patient_id',
|
'patient_id',
|
||||||
'quantile',
|
'quantile',
|
||||||
|
40
R/kurtosis.R
Normal file
40
R/kurtosis.R
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
#' Kurtosis of the sample
|
||||||
|
#'
|
||||||
|
#' @description Kurtosis is a measure of the "tailedness" of the probability distribution of a real-valued random variable.
|
||||||
|
#'
|
||||||
|
#' @param x a vector of values, a \code{matrix} or a \code{data frame}
|
||||||
|
#' @param na.rm a logical value indicating whether \code{NA} values should be stripped before the computation proceeds.
|
||||||
|
#' @exportMethod kurtosis
|
||||||
|
#' @seealso \code{\link{skewness}}
|
||||||
|
#' @rdname kurtosis
|
||||||
|
#' @export
|
||||||
|
kurtosis <- function(x, na.rm = FALSE) {
|
||||||
|
UseMethod("kurtosis")
|
||||||
|
}
|
||||||
|
|
||||||
|
#' @exportMethod kurtosis.default
|
||||||
|
#' @rdname kurtosis
|
||||||
|
#' @export
|
||||||
|
kurtosis.default <- function (x, na.rm = FALSE) {
|
||||||
|
x <- as.vector(x)
|
||||||
|
if (na.rm == TRUE) {
|
||||||
|
x <- x[!is.na(x)]
|
||||||
|
}
|
||||||
|
n <- length(x)
|
||||||
|
n * base::sum((x - base::mean(x, na.rm = na.rm))^4, na.rm = na.rm) /
|
||||||
|
(base::sum((x - base::mean(x, na.rm = na.rm))^2, na.rm = na.rm)^2)
|
||||||
|
}
|
||||||
|
|
||||||
|
#' @exportMethod kurtosis.matrix
|
||||||
|
#' @rdname kurtosis
|
||||||
|
#' @export
|
||||||
|
kurtosis.matrix <- function (x, na.rm = FALSE) {
|
||||||
|
base::apply(x, 2, kurtosis.default, na.rm = na.rm)
|
||||||
|
}
|
||||||
|
|
||||||
|
#' @exportMethod kurtosis.data.frame
|
||||||
|
#' @rdname kurtosis
|
||||||
|
#' @export
|
||||||
|
kurtosis.data.frame <- function (x, na.rm = FALSE) {
|
||||||
|
base::sapply(x, kurtosis.default, na.rm = na.rm)
|
||||||
|
}
|
2
R/like.R
2
R/like.R
@ -18,7 +18,7 @@
|
|||||||
|
|
||||||
#' Pattern Matching
|
#' Pattern Matching
|
||||||
#'
|
#'
|
||||||
#' Convenient wrapper around \code{\link[base]{grepl}} to match a pattern: \code{a \%like\% b}. It always returns a \code{logical} vector and is always case-insensitive. Also, \code{pattern} (\code{b}) can be as long as \code{x} (\code{a}) to compare items of each index in both vectors.
|
#' Convenient wrapper around \code{\link[base]{grep}} to match a pattern: \code{a \%like\% b}. It always returns a \code{logical} vector and is always case-insensitive. Also, \code{pattern} (\code{b}) can be as long as \code{x} (\code{a}) to compare items of each index in both vectors.
|
||||||
#' @inheritParams base::grepl
|
#' @inheritParams base::grepl
|
||||||
#' @return A \code{logical} vector
|
#' @return A \code{logical} vector
|
||||||
#' @name like
|
#' @name like
|
||||||
|
40
R/skewness.R
Normal file
40
R/skewness.R
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
#' Skewness of the sample
|
||||||
|
#'
|
||||||
|
#' @description Skewness is a measure of the asymmetry of the probability distribution of a real-valued random variable about its mean.
|
||||||
|
#'
|
||||||
|
#' When negative: the left tail is longer; the mass of the distribution is concentrated on the right of the figure. When positive: the right tail is longer; the mass of the distribution is concentrated on the left of the figure.
|
||||||
|
#' @param x a vector of values, a \code{matrix} or a \code{data frame}
|
||||||
|
#' @param na.rm a logical value indicating whether \code{NA} values should be stripped before the computation proceeds.
|
||||||
|
#' @exportMethod skewness
|
||||||
|
#' @seealso \code{\link{kurtosis}}
|
||||||
|
#' @rdname skewness
|
||||||
|
#' @export
|
||||||
|
skewness <- function(x, na.rm = FALSE) {
|
||||||
|
UseMethod("skewness")
|
||||||
|
}
|
||||||
|
|
||||||
|
#' @exportMethod skewness.default
|
||||||
|
#' @rdname skewness
|
||||||
|
#' @export
|
||||||
|
skewness.default <- function (x, na.rm = FALSE) {
|
||||||
|
x <- as.vector(x)
|
||||||
|
if (na.rm == TRUE) {
|
||||||
|
x <- x[!is.na(x)]
|
||||||
|
}
|
||||||
|
n <- length(x)
|
||||||
|
(base::sum((x - base::mean(x))^3) / n) / (base::sum((x - base::mean(x))^2) / n)^(3/2)
|
||||||
|
}
|
||||||
|
|
||||||
|
#' @exportMethod skewness.matrix
|
||||||
|
#' @rdname skewness
|
||||||
|
#' @export
|
||||||
|
skewness.matrix <- function (x, na.rm = FALSE) {
|
||||||
|
base::apply(x, 2, skewness.default, na.rm = na.rm)
|
||||||
|
}
|
||||||
|
|
||||||
|
#' @exportMethod skewness.data.frame
|
||||||
|
#' @rdname skewness
|
||||||
|
#' @export
|
||||||
|
skewness.data.frame <- function (x, na.rm = FALSE) {
|
||||||
|
base::sapply(x, skewness.default, na.rm = na.rm)
|
||||||
|
}
|
123
R/trends.R
Normal file
123
R/trends.R
Normal file
@ -0,0 +1,123 @@
|
|||||||
|
#' Detect trends using Machine Learning
|
||||||
|
#'
|
||||||
|
#' Test text
|
||||||
|
#' @param data a \code{data.frame}
|
||||||
|
#' @param threshold_unique do not analyse more unique \code{threshold_unique} items per variable
|
||||||
|
#' @param na.rm a logical value indicating whether \code{NA} values should be stripped before the computation proceeds.
|
||||||
|
#' @param info print relevant combinations to console
|
||||||
|
#' @return A \code{list} with class \code{"trends"}
|
||||||
|
#' @importFrom stats na.omit
|
||||||
|
#' @importFrom broom tidy
|
||||||
|
# @export
|
||||||
|
trends <- function(data, threshold_unique = 30, na.rm = TRUE, info = TRUE) {
|
||||||
|
|
||||||
|
cols <- colnames(data)
|
||||||
|
relevant <- list()
|
||||||
|
count <- 0
|
||||||
|
for (x in 1:length(cols)) {
|
||||||
|
for (y in 1:length(cols)) {
|
||||||
|
if (x == y) {
|
||||||
|
next
|
||||||
|
}
|
||||||
|
if (n_distinct(data[, x]) > threshold_unique | n_distinct(data[, y]) > threshold_unique) {
|
||||||
|
next
|
||||||
|
}
|
||||||
|
count <- count + 1
|
||||||
|
df <- data %>%
|
||||||
|
group_by_at(c(cols[x], cols[y])) %>%
|
||||||
|
summarise(n = n())
|
||||||
|
n <- df %>% pull(n)
|
||||||
|
# linear regression model
|
||||||
|
lin <- stats::lm(1:length(n) ~ n, na.action = ifelse(na.rm == TRUE, na.omit, NULL))
|
||||||
|
|
||||||
|
res <- list(
|
||||||
|
df = df,
|
||||||
|
x = cols[x],
|
||||||
|
y = cols[y],
|
||||||
|
m = base::mean(n, na.rm = na.rm),
|
||||||
|
sd = stats::sd(n, na.rm = na.rm),
|
||||||
|
cv = cv(n, na.rm = na.rm),
|
||||||
|
cqv = cqv(n, na.rm = na.rm),
|
||||||
|
kurtosis = kurtosis(n, na.rm = na.rm),
|
||||||
|
skewness = skewness(n, na.rm = na.rm),
|
||||||
|
lin.p = broom::tidy(lin)[2, 'p.value']
|
||||||
|
#binom.p <- broom::tidy(binom)[2, 'p.value']
|
||||||
|
)
|
||||||
|
|
||||||
|
include <- TRUE
|
||||||
|
# ML part
|
||||||
|
if (res$cv > 0.25) {
|
||||||
|
res$reason <- "cv > 0.25"
|
||||||
|
} else if (res$cqv > 0.75) {
|
||||||
|
res$reason <- "cqv > 0.75"
|
||||||
|
} else {
|
||||||
|
include <- FALSE
|
||||||
|
}
|
||||||
|
|
||||||
|
if (include == TRUE) {
|
||||||
|
relevant <- c(relevant, list(res))
|
||||||
|
if (info == TRUE) {
|
||||||
|
# minus one because the whole data will be added later
|
||||||
|
cat(paste0("[", length(relevant), "]"), "Relevant:", cols[x], "vs.", cols[y], "\n")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
cat("Total of", count, "combinations analysed;", length(relevant), "seem relevant.\n")
|
||||||
|
class(relevant) <- 'trends'
|
||||||
|
relevant <- c(relevant, list(data = data))
|
||||||
|
relevant
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
# @exportMethod print.trends
|
||||||
|
# @export
|
||||||
|
#' @noRd
|
||||||
|
print.trends <- function(x, ...) {
|
||||||
|
cat(length(x) - 1, "relevant trends, out of", length(x$data)^2, "\n")
|
||||||
|
}
|
||||||
|
|
||||||
|
# @exportMethod plot.trends
|
||||||
|
# @export
|
||||||
|
#' @noRd
|
||||||
|
# plot.trends <- function(x, n = NULL, ...) {
|
||||||
|
# if (is.null(n)) {
|
||||||
|
# oask <- devAskNewPage(TRUE)
|
||||||
|
# on.exit(devAskNewPage(oask))
|
||||||
|
# n <- c(1:(length(x) - 1))
|
||||||
|
# } else {
|
||||||
|
# if (n > length(x) - 1) {
|
||||||
|
# stop('trend unavailable, max is ', length(x) - 1, call. = FALSE)
|
||||||
|
# }
|
||||||
|
# oask <- NULL
|
||||||
|
# }
|
||||||
|
# for (i in n) {
|
||||||
|
# data <- x[[i]]$df
|
||||||
|
# if (as.character(i) %like% '1$') {
|
||||||
|
# suffix <- "st"
|
||||||
|
# } else if (as.character(i) %like% '2$') {
|
||||||
|
# suffix <- "nd"
|
||||||
|
# } else if (as.character(i) %like% '3$') {
|
||||||
|
# suffix <- "rd"
|
||||||
|
# } else {
|
||||||
|
# suffix <- "th"
|
||||||
|
# }
|
||||||
|
# if (!is.null(oask)) {
|
||||||
|
# cat(paste("Coming up:", colnames(data)[1], "vs.", colnames(data)[2]), "\n")
|
||||||
|
# }
|
||||||
|
# print(
|
||||||
|
# ggplot(
|
||||||
|
# data,
|
||||||
|
# aes_string(x = colnames(data)[1],
|
||||||
|
# y = colnames(data)[3],
|
||||||
|
# group = colnames(data)[2],
|
||||||
|
# fill = colnames(data)[2])) +
|
||||||
|
# geom_col(position = "dodge") +
|
||||||
|
# theme_minimal() +
|
||||||
|
# labs(title = paste(colnames(data)[1], "vs.", colnames(data)[2]),
|
||||||
|
# subtitle = paste0(i, suffix, " trend"))
|
||||||
|
# )
|
||||||
|
# }
|
||||||
|
# }
|
@ -32,7 +32,7 @@ With `AMR` you can also:
|
|||||||
* Get antimicrobial ATC properties from the WHO Collaborating Centre for Drug Statistics Methodology ([WHOCC](https://www.whocc.no/atc_ddd_methodology/who_collaborating_centre/)), to be able to:
|
* Get antimicrobial ATC properties from the WHO Collaborating Centre for Drug Statistics Methodology ([WHOCC](https://www.whocc.no/atc_ddd_methodology/who_collaborating_centre/)), to be able to:
|
||||||
* Translate antibiotic codes (like *AMOX*), official names (like *amoxicillin*) and even trade names (like *Amoxil* or *Trimox*) to an [ATC code](https://www.whocc.no/atc_ddd_index/?code=J01CA04&showdescription=no) (like *J01CA04*) and vice versa with the `abname` function
|
* Translate antibiotic codes (like *AMOX*), official names (like *amoxicillin*) and even trade names (like *Amoxil* or *Trimox*) to an [ATC code](https://www.whocc.no/atc_ddd_index/?code=J01CA04&showdescription=no) (like *J01CA04*) and vice versa with the `abname` function
|
||||||
* Get the latest antibiotic properties like hierarchic groups and [defined daily dose](https://en.wikipedia.org/wiki/Defined_daily_dose) (DDD) with units and administration form from the WHOCC website with the `atc_property` function
|
* Get the latest antibiotic properties like hierarchic groups and [defined daily dose](https://en.wikipedia.org/wiki/Defined_daily_dose) (DDD) with units and administration form from the WHOCC website with the `atc_property` function
|
||||||
* Create frequency tables with the `freq` function
|
* Conduct descriptive statistics: calculate kurtosis, skewness and create frequency tables
|
||||||
|
|
||||||
And it contains:
|
And it contains:
|
||||||
* A recent data set with ~2500 human pathogenic microorganisms, including family, genus, species, gram stain and aerobic/anaerobic
|
* A recent data set with ~2500 human pathogenic microorganisms, including family, genus, species, gram stain and aerobic/anaerobic
|
||||||
@ -41,13 +41,17 @@ And it contains:
|
|||||||
|
|
||||||
With the `MDRO` function (abbreviation of Multi Drug Resistant Organisms), you can check your isolates for exceptional resistance with country-specific guidelines or EUCAST rules. Currently guidelines for Germany and the Netherlands are supported. Please suggest addition of your own country here: [https://github.com/msberends/AMR/issues/new](https://github.com/msberends/AMR/issues/new?title=New%20guideline%20for%20MDRO&body=%3C--%20Please%20add%20your%20country%20code,%20guideline%20name,%20version%20and%20source%20below%20and%20remove%20this%20line--%3E).
|
With the `MDRO` function (abbreviation of Multi Drug Resistant Organisms), you can check your isolates for exceptional resistance with country-specific guidelines or EUCAST rules. Currently guidelines for Germany and the Netherlands are supported. Please suggest addition of your own country here: [https://github.com/msberends/AMR/issues/new](https://github.com/msberends/AMR/issues/new?title=New%20guideline%20for%20MDRO&body=%3C--%20Please%20add%20your%20country%20code,%20guideline%20name,%20version%20and%20source%20below%20and%20remove%20this%20line--%3E).
|
||||||
|
|
||||||
|
#### Read all changes and new functions in [NEWS.md](NEWS.md).
|
||||||
|
|
||||||
## How to get it?
|
## How to get it?
|
||||||
This package is available on CRAN and also here on GitHub.
|
This package is available on CRAN and also here on GitHub.
|
||||||
|
|
||||||
### From CRAN (recommended)
|
### From CRAN (recommended)
|
||||||
[![CRAN_Badge](https://img.shields.io/cran/v/AMR.svg?label=CRAN&colorB=3679BC)](http://cran.r-project.org/package=AMR)
|
[![CRAN_Badge](https://img.shields.io/cran/v/AMR.svg?label=CRAN&colorB=3679BC)](http://cran.r-project.org/package=AMR)
|
||||||
|
|
||||||
|
Downloads via RStudio CRAN server (downloads by all other CRAN mirrors not measured):
|
||||||
[![CRAN_Downloads](https://cranlogs.r-pkg.org/badges/grand-total/AMR)](http://cran.r-project.org/package=AMR)
|
[![CRAN_Downloads](https://cranlogs.r-pkg.org/badges/grand-total/AMR)](http://cran.r-project.org/package=AMR)
|
||||||
[![CRAN_Downloads](https://cranlogs.r-pkg.org/badges/AMR)](http://cran.r-project.org/package=AMR)
|
[![CRAN_Downloads](https://cranlogs.r-pkg.org/badges/AMR)](https://cranlogs.r-pkg.org/downloads/daily/last-month/AMR)
|
||||||
|
|
||||||
- <img src="http://www.rstudio.com/favicon.ico" alt="RStudio favicon" height="20px"> In [RStudio](http://www.rstudio.com) (recommended):
|
- <img src="http://www.rstudio.com/favicon.ico" alt="RStudio favicon" height="20px"> In [RStudio](http://www.rstudio.com) (recommended):
|
||||||
- Click on `Tools` and then `Install Packages...`
|
- Click on `Tools` and then `Install Packages...`
|
||||||
|
@ -66,8 +66,8 @@ For numeric values of any class, these additional values will all be calculated
|
|||||||
|
|
||||||
For dates and times of any class, these additional values will be calculated with \code{na.rm = TRUE} and shown into the header:
|
For dates and times of any class, these additional values will be calculated with \code{na.rm = TRUE} and shown into the header:
|
||||||
\itemize{
|
\itemize{
|
||||||
\item{Oldest, using \code{\link[base]{min}}}
|
\item{Oldest, using \code{\link{min}}}
|
||||||
\item{Newest, using \code{\link[base]{max}}, with difference between newest and oldest}
|
\item{Newest, using \code{\link{max}}, with difference between newest and oldest}
|
||||||
\item{Median, using \code{\link[stats]{median}}, with percentage since oldest}
|
\item{Median, using \code{\link[stats]{median}}, with percentage since oldest}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
28
man/kurtosis.Rd
Normal file
28
man/kurtosis.Rd
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
% Generated by roxygen2: do not edit by hand
|
||||||
|
% Please edit documentation in R/kurtosis.R
|
||||||
|
\name{kurtosis}
|
||||||
|
\alias{kurtosis}
|
||||||
|
\alias{kurtosis.default}
|
||||||
|
\alias{kurtosis.matrix}
|
||||||
|
\alias{kurtosis.data.frame}
|
||||||
|
\title{Kurtosis of the sample}
|
||||||
|
\usage{
|
||||||
|
kurtosis(x, na.rm = FALSE)
|
||||||
|
|
||||||
|
\method{kurtosis}{default}(x, na.rm = FALSE)
|
||||||
|
|
||||||
|
\method{kurtosis}{matrix}(x, na.rm = FALSE)
|
||||||
|
|
||||||
|
\method{kurtosis}{data.frame}(x, na.rm = FALSE)
|
||||||
|
}
|
||||||
|
\arguments{
|
||||||
|
\item{x}{a vector of values, a \code{matrix} or a \code{data frame}}
|
||||||
|
|
||||||
|
\item{na.rm}{a logical value indicating whether \code{NA} values should be stripped before the computation proceeds.}
|
||||||
|
}
|
||||||
|
\description{
|
||||||
|
Kurtosis is a measure of the "tailedness" of the probability distribution of a real-valued random variable.
|
||||||
|
}
|
||||||
|
\seealso{
|
||||||
|
\code{\link{skewness}}
|
||||||
|
}
|
@ -29,7 +29,7 @@ x \%like\% pattern
|
|||||||
A \code{logical} vector
|
A \code{logical} vector
|
||||||
}
|
}
|
||||||
\description{
|
\description{
|
||||||
Convenient wrapper around \code{\link[base]{grepl}} to match a pattern: \code{a \%like\% b}. It always returns a \code{logical} vector and is always case-insensitive. Also, \code{pattern} (\code{b}) can be as long as \code{x} (\code{a}) to compare items of each index in both vectors.
|
Convenient wrapper around \code{\link[base]{grep}} to match a pattern: \code{a \%like\% b}. It always returns a \code{logical} vector and is always case-insensitive. Also, \code{pattern} (\code{b}) can be as long as \code{x} (\code{a}) to compare items of each index in both vectors.
|
||||||
}
|
}
|
||||||
\details{
|
\details{
|
||||||
Using RStudio? This function can also be inserted from the Addins menu and can have its own Keyboard Shortcut like Ctrl+Shift+L or Cmd+Shift+L (see Tools > Modify Keyboard Shortcuts...).
|
Using RStudio? This function can also be inserted from the Addins menu and can have its own Keyboard Shortcut like Ctrl+Shift+L or Cmd+Shift+L (see Tools > Modify Keyboard Shortcuts...).
|
||||||
|
30
man/skewness.Rd
Normal file
30
man/skewness.Rd
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
% Generated by roxygen2: do not edit by hand
|
||||||
|
% Please edit documentation in R/skewness.R
|
||||||
|
\name{skewness}
|
||||||
|
\alias{skewness}
|
||||||
|
\alias{skewness.default}
|
||||||
|
\alias{skewness.matrix}
|
||||||
|
\alias{skewness.data.frame}
|
||||||
|
\title{Skewness of the sample}
|
||||||
|
\usage{
|
||||||
|
skewness(x, na.rm = FALSE)
|
||||||
|
|
||||||
|
\method{skewness}{default}(x, na.rm = FALSE)
|
||||||
|
|
||||||
|
\method{skewness}{matrix}(x, na.rm = FALSE)
|
||||||
|
|
||||||
|
\method{skewness}{data.frame}(x, na.rm = FALSE)
|
||||||
|
}
|
||||||
|
\arguments{
|
||||||
|
\item{x}{a vector of values, a \code{matrix} or a \code{data frame}}
|
||||||
|
|
||||||
|
\item{na.rm}{a logical value indicating whether \code{NA} values should be stripped before the computation proceeds.}
|
||||||
|
}
|
||||||
|
\description{
|
||||||
|
Skewness is a measure of the asymmetry of the probability distribution of a real-valued random variable about its mean.
|
||||||
|
|
||||||
|
When negative: the left tail is longer; the mass of the distribution is concentrated on the right of the figure. When positive: the right tail is longer; the mass of the distribution is concentrated on the left of the figure.
|
||||||
|
}
|
||||||
|
\seealso{
|
||||||
|
\code{\link{kurtosis}}
|
||||||
|
}
|
23
man/trends.Rd
Normal file
23
man/trends.Rd
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
% Generated by roxygen2: do not edit by hand
|
||||||
|
% Please edit documentation in R/trends.R
|
||||||
|
\name{trends}
|
||||||
|
\alias{trends}
|
||||||
|
\title{Detect trends using Machine Learning}
|
||||||
|
\usage{
|
||||||
|
trends(data, threshold_unique = 30, na.rm = TRUE, info = TRUE)
|
||||||
|
}
|
||||||
|
\arguments{
|
||||||
|
\item{data}{a \code{data.frame}}
|
||||||
|
|
||||||
|
\item{threshold_unique}{do not analyse more unique \code{threshold_unique} items per variable}
|
||||||
|
|
||||||
|
\item{na.rm}{a logical value indicating whether \code{NA} values should be stripped before the computation proceeds.}
|
||||||
|
|
||||||
|
\item{info}{print relevant combinations to console}
|
||||||
|
}
|
||||||
|
\value{
|
||||||
|
A \code{list} with class \code{"trends"}
|
||||||
|
}
|
||||||
|
\description{
|
||||||
|
Test text
|
||||||
|
}
|
@ -49,5 +49,9 @@ test_that("frequency table works", {
|
|||||||
# input must be freq tbl
|
# input must be freq tbl
|
||||||
expect_error(septic_patients %>% top_freq(1))
|
expect_error(septic_patients %>% top_freq(1))
|
||||||
|
|
||||||
|
# charts from plot and hist, should not raise errors
|
||||||
|
plot(freq(septic_patients, age))
|
||||||
|
hist(freq(septic_patients, age))
|
||||||
|
|
||||||
})
|
})
|
||||||
|
|
||||||
|
13
tests/testthat/test-kurtosis.R
Normal file
13
tests/testthat/test-kurtosis.R
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
context("kurtosis.R")
|
||||||
|
|
||||||
|
test_that("kurtosis works", {
|
||||||
|
expect_equal(kurtosis(septic_patients$age),
|
||||||
|
6.423118,
|
||||||
|
tolerance = 0.00001)
|
||||||
|
expect_equal(unname(kurtosis(data.frame(septic_patients$age))),
|
||||||
|
6.423118,
|
||||||
|
tolerance = 0.00001)
|
||||||
|
expect_equal(kurtosis(matrix(septic_patients$age)),
|
||||||
|
6.423118,
|
||||||
|
tolerance = 0.00001)
|
||||||
|
})
|
13
tests/testthat/test-skewness.R
Normal file
13
tests/testthat/test-skewness.R
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
context("skewness.R")
|
||||||
|
|
||||||
|
test_that("skewness works", {
|
||||||
|
expect_equal(skewness(septic_patients$age),
|
||||||
|
-1.637164,
|
||||||
|
tolerance = 0.00001)
|
||||||
|
expect_equal(unname(skewness(data.frame(septic_patients$age))),
|
||||||
|
-1.637164,
|
||||||
|
tolerance = 0.00001)
|
||||||
|
expect_equal(skewness(matrix(septic_patients$age)),
|
||||||
|
-1.637164,
|
||||||
|
tolerance = 0.00001)
|
||||||
|
})
|
Loading…
Reference in New Issue
Block a user