R/main.R

Defines functions init execute

Documented in execute init

# Copyright 2018 Observational Health Data Sciences and Informatics
#
# This file is part of hivTestStudyCharacterization
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

#' Initialize hivTestStudyCharacterization Study Tables
#'
#' @details
#' This function initializes the hivTestStudy Characterization Study tables.
#'
#' @param connectionDetails    An object of type \code{connectionDetails} as created using the
#'                             \code{\link[DatabaseConnector]{createConnectionDetails}} function in the
#'                             DatabaseConnector package.
#' @param targetDatabaseSchema The schema to contain the study results tables
#'
#' @param tablePrefix          A prefix to add to the study tables
#'
#' @examples
#' \dontrun{
#' connectionDetails <- DatatbaseConnector:: createConnectionDetails(dbms = "postgresql",
#'                                              user = "joe",
#'                                              password = "secret",
#'                                              server = "myserver")
#'
#' execute(connectionDetails,
#'         targetDatabaseSchema = "studyDB.endoStudy",
#'         tablePrefix="endo_")
#' }
#'
#' @export
init <- function(connectionDetails, targetDatabaseSchema, tablePrefix="") {

	conn <- DatabaseConnector::connect(connectionDetails);

	# Create study cohort table structure:
	sql <- SqlRender::loadRenderTranslateSql(sqlFilename = "CreateCohortTable.sql",
																					 packageName = packageName(),
																					 dbms = attr(conn, "dbms"),
																					 cohort_database_schema = targetDatabaseSchema,
																					 cohort_table = paste0(tablePrefix, "cohort"))

	DatabaseConnector::executeSql(conn, sql, progressBar = TRUE, reportOverallTime = FALSE)
	DatabaseConnector::dbDisconnect(conn);

	invisible(NULL)
}

#' Execute hivTestStudyCharacterization Study
#'
#' @details
#' This function executes the hivTestStudy Characterization Study.
#'
#' @param connectionDetails    An object of type \code{connectionDetails} as created using the
#'                             \code{\link[DatabaseConnector]{createConnectionDetails}} function in the
#'                             DatabaseConnector package.
#' @param cdmDatabaseSchema    Schema name where your patient-level data in OMOP CDM format resides.
#'                             Note that for SQL Server, this should include both the database and
#'                             schema name, for example 'cdm_data.dbo'.
#' @param oracleTempSchema     Should be used in Oracle to specify a schema where the user has write
#'                             priviliges for storing temporary tables.
#' @param tablePrefix          The prefix for the study tables, should be same value used in init()
#' @param outputFolder         Name of local folder to place results; make sure to use forward slashes
#'                             (/). Do not use a folder on a network drive since this greatly impacts
#'                             performance.
#'
#' @examples
#' \dontrun{
#' connectionDetails <- createConnectionDetails(dbms = "postgresql",
#'                                              user = "joe",
#'                                              password = "secret",
#'                                              server = "myserver")
#'
#' execute(connectionDetails,
#'         cdmDatabaseSchema = "cdm_data",
#'         targetDatabaseSchema = "results",
#'         oracleTempSchema = NULL,
#'         tablePrefix = "endo_",
#'         outputFolder = "c:/temp/study_results")
#' }
#'
#' @export
execute <- function(connectionDetails,
										cdmDatabaseSchema,
										targetDatabaseSchema,
										oracleTempSchema = cdmDatabaseSchema,
										tablePrefix = "",
										outputFolder,
										createCohorts = TRUE) {
	if (!file.exists(outputFolder))
		dir.create(outputFolder, recursive = TRUE)

	# OhdsiRTools::addDefaultFileLogger(file.path(outputFolder, "log.txt"))

	conn <- DatabaseConnector::connect(connectionDetails)

	####################### featureExtraction ################################

	#covariateSettings <- #createDefaultCovariateSettings()
	covariateSettings <- createCovariateSettings(
	  useDemographicsAgeGroup = TRUE
	  # , useConditionOccurrenceAnyTimePrior = TRUE
	  # , useDemographicsGender = T
	  # , useCharlsonIndex = T,
	  # , useChads2Vasc = F,  # this one is causing an error:
	  , useDcsi = FALSE
	 )
	settings2 <- convertPrespecSettingsToDetailedSettings(covariateSettings)


	getDbDefaultCovariateData(conn,
	                          covariateSettings = covariateSettings,
	                          cdmDatabaseSchema = connp$schema,
	                          targetDatabaseSchema = connp$results_schema,
	                          cohortTable = "onek_results.hivteststudy_cohort")
	querySql(conn, 'SELECT *
FROM (
SELECT row_id, covariate_id, covariate_value FROM cov_1 UNION ALL
SELECT row_id, covariate_id, covariate_value FROM cov_2 UNION ALL
SELECT row_id, covariate_id, covariate_value FROM cov_3
) all_covariates;')


	# browser()
	covariateData2 <- getDbCovariateData(
	                                     # connectionDetails = connectionDetails,
	                                     connection = conn,
	                                     cdmDatabaseSchema = connp$schema,
	                                     cohortDatabaseSchema = connp$results_schema,
	                                     cohortTable = cohortTable,
	                                     cohortId = 1, #target_cohort_id,
	                                     aggregated = TRUE,
	                                     covariateSettings = covariateSettings
	                                     # covariateSettings = settings2
	                                     # createTable1 requires aggregated = TRUE
	                                     # tidyCovariateData requires aggregated = FALSE
	   # failing at getDbDefaultCovariateData
	   # getDbDefaultCovariateData(conn, covariateSettings = covariateSettings, cdmDatabaseSchema = connp$schema, targetDatabaseSchema = connp$results_schema, cohortTable = "onek_results.hivteststudy_cohort")
	)
	# summary(covariateData2)

	result <- createTable1(covariateData2)
	#
	# # not working: (from http://ohdsi.github.io/FeatureExtraction/articles/UsingFeatureExtraction.html#removing-infrequent-covariates-normalizing-and-removing-redundancy)
	# # (worked after setting aggregated = FALSE above)
	# tcd <- tidyCovariateData(covariateData2, minFraction = 0.01, normalize = T, removeRedundancy = F)
	#
	# atcd <- aggregateCovariates(tcd)
	# result <- createTable1(atcd)

	DatabaseConnector::disconnect(conn)

	invisible(NULL)
}
  # cut from execute function:
  # if (createCohorts) {
  #   # instantiate cohorts
  #   .createCohorts(connection = conn,
  #                  cdmDatabaseSchema = cdmDatabaseSchema,
  #                  targetDatabaseSchema = targetDatabaseSchema,
  #                  oracleTempSchema = oracleTempSchema,
  #                  cohortTable = paste0(tablePrefix, "cohort"))
  # }
  #
  # pathToCsv <- system.file("settings", "cohorts.csv", package = packageName())
  #
  # cohortsCsv<- read.csv(pathToCsv,stringsAsFactors = FALSE)
  #
  # cohortTable <- paste0(tablePrefix, "cohort")
  #
  # for (i in 1:nrow(cohortsCsv)) {
  #
  #   # Total Counts
  #   OhdsiRTools::logInfo(paste0("Total Counts for cohort: ", cohortsCsv$shortName[i]))
  #
  #   totalCountSql <- SqlRender::loadRenderTranslateSql(sqlFilename = "TotalCount.sql",
  #                                                      packageName = packageName(),
  #                                                      dbms = attr(conn, "dbms"),
  #                                                      cohortId = cohortsCsv$cohortId[i],
  #                                                      target_database_schema = targetDatabaseSchema,
  #                                                      target_cohort_table = cohortTable)
  #   totalCount <- DatabaseConnector::querySql(conn, totalCountSql);
  #
  #   fileName <- file.path(outputFolder, paste0("total_count_", cohortsCsv$shortName[i], ".csv"))
  #   write.csv(totalCount, file = fileName, row.names=FALSE, na="")
  #
  #
  #   # Counts with DE Prior
  #   OhdsiRTools::logInfo(paste0("Persons with DE Prior for cohort: ", cohortsCsv$shortName[i]))
  #
  #   dePriorCountSql <- SqlRender::loadRenderTranslateSql(sqlFilename = "CountWithDEPrior.sql",
  #                                                        packageName = packageName(),
  #                                                        dbms = attr(conn, "dbms"),
  #                                                        CDM_schema = cdmDatabaseSchema,
  #                                                        cohortId = cohortsCsv$cohortId[i],
  #                                                        target_database_schema = targetDatabaseSchema,
  #                                                        target_cohort_table = cohortTable)
  #   dePriorCount <- DatabaseConnector::querySql(conn, dePriorCountSql);
  #
  #   fileName <- file.path(outputFolder, paste0("total_count_", cohortsCsv$shortName[i],"_DE_before_cohort_start.csv"))
  #   write.csv(dePriorCount, file = fileName, row.names=FALSE, na="")
  #
  #   # Counts with CO Prior
  #   OhdsiRTools::logInfo(paste0("Persons with CO Prior for cohort: ", cohortsCsv$shortName[i]))
  #
  #   coPriorCountSql <- SqlRender::loadRenderTranslateSql(sqlFilename = "CountWithCOPrior.sql",
  #                                                        packageName = packageName(),
  #                                                        dbms = attr(conn, "dbms"),
  #                                                        CDM_schema = cdmDatabaseSchema,
  #                                                        cohortId = cohortsCsv$cohortId[i],
  #                                                        target_database_schema = targetDatabaseSchema,
  #                                                        target_cohort_table = cohortTable)
  #   coPriorCount <- DatabaseConnector::querySql(conn, coPriorCountSql);
  #
  #   fileName <- file.path(outputFolder, paste0("total_count_", cohortsCsv$shortName[i],"_CO_before_cohort_start.csv"))
  #   write.csv(coPriorCount, file = fileName, row.names=FALSE, na="")
  #
  #   # Drug Counts, prior to index
  #   OhdsiRTools::logInfo(paste0("Drug Counts prior to index for cohort: ", cohortsCsv$shortName[i]))
  #
  #   drugCountSql <- SqlRender::loadRenderTranslateSql(sqlFilename = "DrugCount.sql",
  #                                                     packageName = packageName(),
  #                                                     dbms = attr(conn, "dbms"),
  #                                                     CDM_schema = cdmDatabaseSchema,
  #                                                     cohortId = cohortsCsv$cohortId[i],
  #                                                     target_database_schema = targetDatabaseSchema,
  #                                                     target_cohort_table = cohortTable)
  #   drugCount <- DatabaseConnector::querySql(conn, drugCountSql);
  #
  #   fileName <- file.path(outputFolder, paste0("drugs_", cohortsCsv$shortName[i], ".csv"))
  #   write.csv(drugCount, file = fileName, row.names=FALSE, na="")
  #
  #   # Condition Counts, prior to index
  #   OhdsiRTools::logInfo(paste0("Condition Counts prior to index for cohort: ", cohortsCsv$shortName[i]))
  #
  #   conditionCountSql <- SqlRender::loadRenderTranslateSql(sqlFilename = "ConditionCount.sql",
  #                                                          packageName = packageName(),
  #                                                          dbms = attr(conn, "dbms"),
  #                                                          CDM_schema = cdmDatabaseSchema,
  #                                                          cohortId = cohortsCsv$cohortId[i],
  #                                                          target_database_schema = targetDatabaseSchema,
  #                                                          target_cohort_table = cohortTable)
  #   conditionCount <- DatabaseConnector::querySql(conn, conditionCountSql);
  #
  #   fileName <- file.path(outputFolder, paste0("conditions_", cohortsCsv$shortName[i], ".csv"))
  #   write.csv(conditionCount, file = fileName, row.names=FALSE, na="")
  #
  #   # Counts with ERVisits, prior to index
  #   OhdsiRTools::logInfo(paste0("Persons with ER Visits prior to index for cohort: ", cohortsCsv$shortName[i]))
  #
  #   erVisitCountSql <- SqlRender::loadRenderTranslateSql(sqlFilename = "ERVisitCount.sql",
  #                                                        packageName = packageName(),
  #                                                        dbms = attr(conn, "dbms"),
  #                                                        CDM_schema = cdmDatabaseSchema,
  #                                                        cohortId = cohortsCsv$cohortId[i],
  #                                                        target_database_schema = targetDatabaseSchema,
  #                                                        target_cohort_table = cohortTable)
  #   erVisitCount <- DatabaseConnector::querySql(conn, erVisitCountSql);
  #
  #   fileName <- file.path(outputFolder, paste0("ER_visits_", cohortsCsv$shortName[i], ".csv"))
  #   write.csv(erVisitCount, file = fileName, row.names=FALSE, na="")
  #
  # }
Sigfried/hivTestStudy documentation built on May 21, 2019, 6:47 a.m.