From 698a02879311e01802ff473bd97cd3bcf831f8bc Mon Sep 17 00:00:00 2001 From: SpatLyu Date: Tue, 24 Sep 2024 21:18:48 +0800 Subject: [PATCH] update rgd to fix #2 --- R/rgd.R | 47 +++++++++++++++++++++-------------------------- man/rgd.Rd | 29 +++++++---------------------- 2 files changed, 28 insertions(+), 48 deletions(-) diff --git a/R/rgd.R b/R/rgd.R index 466ca7b4..9426ce8e 100644 --- a/R/rgd.R +++ b/R/rgd.R @@ -23,6 +23,7 @@ #' @return A list of the RGD model result. #' \describe{ #' \item{\code{factor}}{the result of RGD model} +#' \item{\code{disc}}{robust discrete results} #' } #' @export #' @@ -32,9 +33,9 @@ #' data('ndvi') #' g = rgd(NDVIchange ~ ., data = ndvi, #' discvar = names(ndvi)[-1:-3], -#' cores = 6) +#' discnum = 3:8, cores = 6) #' } -rgd = \(formula, data, discvar = 3:22, discnum = 10, minsize = 1, cores = 1){ +rgd = \(formula, data, discvar = NULL, discnum = 3:22, minsize = 1, cores = 1){ formula = stats::as.formula(formula) formula.vars = all.vars(formula) if (inherits(data,'sf')) {data = sf::st_drop_geometry(data)} @@ -46,24 +47,22 @@ rgd = \(formula, data, discvar = 3:22, discnum = 10, minsize = 1, cores = 1){ discvar = colnames(data)[-which(colnames(data) == yname)] } discdf = dplyr::select(data,dplyr::all_of(c(yname,discvar))) - if (length(discnum)==1) {discnum = rep(discnum,length(discvar))} - g = robust_disc(paste0(yname,'~',paste0(discvar,collapse = '+')), - discdf, discnum, minsize, cores = cores) discedvar = colnames(data[,-which(colnames(data) %in% discvar)]) - newdata = data %>% - dplyr::select(dplyr::all_of(discedvar)) %>% - dplyr::bind_cols(g) - if (length(type) == 1){ - res = gd(paste0(yname,' ~ .'),data = newdata, - type = type,alpha = alpha) - } else { - res = vector("list", length(type)) - for (i in seq_along(type)){ - res[[i]] = gd(paste0(yname,' ~ .'),data = newdata, - type = type[i],alpha = alpha)[[1]] - } - names(res) = type + + resqv = vector("list", length(discnum)) + resdisc = vector("list", length(discnum)) + for (i in seq_along(discnum)) { + g = robust_disc(paste0(yname,'~',paste0(discvar,collapse = '+')), + discdf, discnum[i], minsize, cores = cores) + resdisc[[i]] = g + newdata = data %>% + dplyr::select(dplyr::all_of(discedvar)) %>% + dplyr::bind_cols(g) + resqv[[i]] = gd(paste0(yname,' ~ .'),data = newdata,type = "factor")[[1]] } + names(resqv) = paste0("discnum_",discnum) + names(resdisc) = paste0("discnum_",discnum) + res = c("factor" = resqv, "disc" = resdisc) class(res) = "rgd_result" return(res) } @@ -80,14 +79,10 @@ rgd = \(formula, data, discvar = 3:22, discnum = 10, minsize = 1, cores = 1){ #' @method print rgd_result #' @export print.rgd_result = \(x, ...) { - cat(" RGD Model \n") - nx = names(x) - for (i in seq_along(x)){ - res = x[i] - class(res) = paste0(nx[i],"_detector") - print(res) - cat("\n") - } + cat("*** Robust Geographical Detector ") + qv = x[[1]] + print(knitr::kable(qv[[length(qv)]],format = "markdown",digits = 12,align = 'c',...)) + cat("#### Only display the results corresponding to the maximum number of discretizations.") } #' @title plot RGD result diff --git a/man/rgd.Rd b/man/rgd.Rd index fc43527a..56f95fe8 100644 --- a/man/rgd.Rd +++ b/man/rgd.Rd @@ -4,16 +4,7 @@ \alias{rgd} \title{robust geographical detector(RGD) model} \usage{ -rgd( - formula, - data, - discvar = NULL, - discnum = 10, - minsize = 1, - cores = 1, - type = "factor", - alpha = 0.95 -) +rgd(formula, data, discvar = NULL, discnum = 3:22, minsize = 1, cores = 1) } \arguments{ \item{formula}{A formula of RGD model.} @@ -25,25 +16,18 @@ when \code{formula} has \code{discvar}, \code{data} must have these columns. By variables are used as \code{discvar}.} \item{discnum}{A numeric vector of discretized classes of columns that need to be discretized. -Default all \code{discvar} use \code{10}.} +Default all \code{discvar} use \code{3:22}.} \item{minsize}{(optional) The min size of each discretization group. Default all use \code{1}.} \item{cores}{(optional) Positive integer(default is 1). If cores > 1, use \code{python} \code{joblib} package to parallel computation.} - -\item{type}{(optional) The type of geographical detector, which must be \code{factor}(default), -\code{interaction}, \code{risk}, \code{ecological}.You can run one or more types at one time.} - -\item{alpha}{(optional) Specifies the size of confidence level. Default is \code{0.95}.} } \value{ A list of the RGD model result. \describe{ -\item{\code{factor}}{the result of factor detector} -\item{\code{interaction}}{the result of interaction detector} -\item{\code{risk}}{the result of risk detector} -\item{\code{ecological}}{the result of ecological detector} +\item{\code{factor}}{the result of RGD model} +\item{\code{disc}}{robust discrete results} } } \description{ @@ -57,8 +41,9 @@ See \code{vignette('rgdrid',package = 'gdverse')} for more details. \dontrun{ ## The following code needs to configure the Python environment to run: data('ndvi') -g = rgd(NDVIchange ~ ., data = ndvi, discvar = names(ndvi)[-1:-3], - cores = 6, type =c('factor','interaction')) +g = rgd(NDVIchange ~ ., data = ndvi, + discvar = names(ndvi)[-1:-3], + discnum = 3:8, cores = 6) } } \references{