From 1ff69ec676970fa0ce710a664845485a31ec9074 Mon Sep 17 00:00:00 2001 From: Alistair Johnson Date: Fri, 24 Jul 2026 22:38:39 -0400 Subject: [PATCH] fix typos and dead links --- .gitignore | 2 ++ README.md | 4 +-- mimic-iii/Makefile.md | 13 +++++--- mimic-iii/benchmark/postgres-benchmark-4.sql | 2 +- mimic-iii/buildmimic/README.md | 2 +- mimic-iii/buildmimic/apache-drill/README.md | 2 +- mimic-iii/buildmimic/aws-athena/README.md | 6 ++-- mimic-iii/buildmimic/bigquery/README.md | 8 ++--- mimic-iii/buildmimic/duckdb/README.md | 2 +- mimic-iii/buildmimic/duckdb/import_duckdb.sh | 2 +- mimic-iii/buildmimic/oracle/README.md | 6 ++-- mimic-iii/buildmimic/postgres/Makefile | 2 +- mimic-iii/buildmimic/postgres/README.md | 2 +- .../postgres/postgres_add_comments.sql | 6 ++-- mimic-iii/buildmimic/sqlite/README.md | 4 +-- mimic-iii/buildmimic/vagrant/README.md | 2 +- mimic-iii/concepts/README.md | 9 +++-- mimic-iii/concepts/diagnosis/README.md | 4 +-- mimic-iii/concepts/diagnosis/ccs_dx.sql | 2 +- .../concepts/diagnosis/ccs_multi_dx.csv.gz | Bin 0 -> 63797 bytes mimic-iii/concepts/severityscores/README.md | 31 +++++++++--------- mimic-iii/concepts_duckdb/README.md | 2 +- .../diagnosis/ccs_multi_dx.sql | 7 ++-- mimic-iii/concepts_duckdb/duckdb.sql | 2 ++ mimic-iii/concepts_postgres/README.md | 2 +- .../concepts_postgres/diagnosis/ccs_dx.sql | 2 +- .../diagnosis/ccs_multi_dx.sql | 7 ++-- .../postgres-make-concepts.sql | 1 + mimic-iii/notebooks/aline-aws/README.md | 2 +- .../notebooks/aline-aws/aline-awsathena.ipynb | 2 +- .../aline-aws/aline_labs-awsathena.sql | 4 +-- .../aline-aws/aline_vitals-awsathena.sql | 2 +- mimic-iii/notebooks/aline/README.md | 2 +- mimic-iii/notebooks/aline/aline.ipynb | 2 +- mimic-iii/notebooks/aline/aline_labs.sql | 4 +-- mimic-iii/notebooks/aline/aline_vitals.sql | 2 +- mimic-iii/tutorials/cohort-selection.ipynb | 4 +-- .../data_viz/01_data_viz_basic.ipynb | 4 +-- mimic-iii/tutorials/data_viz/README.md | 2 +- mimic-iii/tutorials/dplyr-frontend/intro.html | 8 ++--- mimic-iii/tutorials/dplyr-frontend/intro.md | 12 +++---- mimic-iii/tutorials/dplyr-frontend/intro.rmd | 8 ++--- mimic-iii/tutorials/dplyr-frontend/intro.tex | 12 +++---- mimic-iii/tutorials/sql-intro.md | 16 ++++----- mimic-iv-cxr/txt/README.md | 4 +-- mimic-iv-cxr/txt/chexpert/README.md | 14 ++++++-- mimic-iv-cxr/txt/negbio/README.md | 4 +-- mimic-iv-ed/README.md | 2 +- .../buildmimic/duckdb/import_duckdb.sh | 2 +- mimic-iv-ed/buildmimic/postgres/README.md | 6 ++-- .../buildmimic/duckdb/import_duckdb.sh | 2 +- mimic-iv-note/buildmimic/postgres/load.sql | 2 +- mimic-iv-note/buildmimic/postgres/load_7z.sql | 2 +- mimic-iv-note/buildmimic/postgres/load_gz.sql | 2 +- mimic-iv/README.md | 6 ++-- mimic-iv/buildmimic/bigquery/README.md | 4 --- mimic-iv/buildmimic/duckdb/import_duckdb.sh | 2 +- mimic-iv/buildmimic/postgres/README.md | 7 ++-- mimic-iv/buildmimic/postgres/load_7z.sql | 2 +- mimic-iv/buildmimic/postgres/load_gz.sql | 2 +- mimic-iv/buildmimic/sqlite/README.md | 2 +- mimic-iv/concepts/README.md | 4 +-- 62 files changed, 152 insertions(+), 137 deletions(-) create mode 100644 mimic-iii/concepts/diagnosis/ccs_multi_dx.csv.gz diff --git a/.gitignore b/.gitignore index 6e843bfaa..d0f33f313 100644 --- a/.gitignore +++ b/.gitignore @@ -9,6 +9,8 @@ mimic-iv/docker-postgres/.env # data *.csv.gz +# reference data distributed with the repository +!mimic-iii/concepts/diagnosis/ccs_multi_dx.csv.gz # credentials key.json diff --git a/README.md b/README.md index 826fb1ec1..53fe9f9f3 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ You can read more about the code repository in the following open access paper: ## Cloud access to datasets -The various MIMIC databases are available on Google Cloud Platform (GCP) and Amazon Web Services (AWS). To access the data on the cloud, simply add the relevant cloud identifier to your PhysioNet profile. Then request access to the dataset for the particular cloud platform via the PhysioNet project page. Further instructions are available on [the MIMIC website](https://mimic.mit.edu/iv/access/cloud/). +The various MIMIC databases are available on Google Cloud Platform (GCP) and Amazon Web Services (AWS). To access the data on the cloud, simply add the relevant cloud identifier to your PhysioNet profile. Then request access to the dataset for the particular cloud platform via the PhysioNet project page. Further instructions are available on [the MIMIC website](https://mimic.mit.edu/docs/gettingstarted/cloud/). ## Navigating this repository @@ -71,7 +71,7 @@ pytest tests/ ## Other useful tools -* [Bloatectomy](https://github.com/MIT-LCP/bloatectomy) ([paper](https://github.com/MIT-LCP/bloatectomy/blob/master/paper/paper.md)) - A python based package for removing duplicate text in clinical notes +* [Bloatectomy](https://github.com/MIT-LCP/bloatectomy) ([paper](https://github.com/MIT-LCP/bloatectomy/blob/master/paper/bloatectomy_paper.md)) - A python based package for removing duplicate text in clinical notes * [Medication categories](https://github.com/mghassem/medicationCategories) - Python script for extracting medications from free-text notes * [MIMIC Extract](https://github.com/MLforHealth/MIMIC_Extract) ([paper](https://doi.org/10.1145/3368555.3384469)) - A python based package for transforming MIMIC-III data into a machine learning friendly format * [FIDDLE](https://github.com/MLD3/FIDDLE) ([paper](https://doi.org/10.1093/jamia/ocaa139)) - A python based package for a FlexIble Data-Driven pipeLinE (FIDDLE), transforming structured EHR data into a machine learning friendly format diff --git a/mimic-iii/Makefile.md b/mimic-iii/Makefile.md index 404b2497e..65c04b57d 100644 --- a/mimic-iii/Makefile.md +++ b/mimic-iii/Makefile.md @@ -7,10 +7,13 @@ Starting from a fresh system which has GNU Make installed, PostgreSQL installed, ```sh export datadir="/path/to/data" +make create-user make mimic-download physionetuser= datadir=$datadir make mimic-gz datadir=$datadir ``` +The `create-user` step creates the database, schema, and user (by default the database is named `mimic` and the user is `postgres`); skip it if these already exist. + Note that if you have already downloaded the data, you can skip the `make mimic-download`, just be sure to set `datadir` appropriately. If you have already decompressed the data into `.csv` files, call `make mimic` instead of `make mimic-gz`, e.g. `make mimic datadir=/path/to/data`. Optionally, additional contributed materialized views can be created afterward by running: @@ -19,7 +22,7 @@ Optionally, additional contributed materialized views can be created afterward b make concepts ``` -Note that you may want to modify parameters at the top of the Makefile - e.g. the username (see below "non-standard username or database name"). +Note that you may want to modify parameters at the top of `buildmimic/postgres/Makefile` - e.g. the username (see below "non-standard username or database name"). ### Authentication In order to avoid the prompts for your database password each time, you may create a file in your home directory called .pgpass containing the following: @@ -33,12 +36,12 @@ Replace ```mimic``` with your username and ```password``` with your password. No Alternatively you can configure the database to use operating system level authentication. See the Postgres manual for more detail (in particular, the section(s) on "Peer Authentication"): https://www.postgresql.org/docs/9.6/static/auth-methods.html ### Non-standard username or database name -If you need to use a username or database name other than ```mimic```, then you will need to specify this by modifying the top-level Makefile: +If you need to use a database name other than ```mimic``` or a username other than ```postgres```, then you will need to specify this by modifying the defaults at the top of `buildmimic/postgres/Makefile`: ``` -DBNAME=mimic -DBUSER=mimic +DBNAME := mimic +DBUSER := postgres ``` ## Contributing -If you would like to contribute code to create a materialized view to the `concepts` folder, simply add a command which calls the script to the `concepts/make-concepts.sql` file. The format is fairly straightforward: e.g. adding the `\i sepsis/angus.sql` line informs the script to call the `concepts/sepsis/angus.sql` file. +If you would like to contribute a new concept, add the script (written in the BigQuery dialect) to the [concepts](/mimic-iii/concepts) folder and add a corresponding line to [concepts/make-concepts.sh](/mimic-iii/concepts/make-concepts.sh). The PostgreSQL and DuckDB versions in [concepts_postgres](/mimic-iii/concepts_postgres) and [concepts_duckdb](/mimic-iii/concepts_duckdb) are then regenerated by transpilation, and the new script should be added to `concepts_postgres/postgres-make-concepts.sql` and `concepts_duckdb/duckdb.sql`. See the [concepts README](/mimic-iii/concepts/README.md) for details. diff --git a/mimic-iii/benchmark/postgres-benchmark-4.sql b/mimic-iii/benchmark/postgres-benchmark-4.sql index c7c398eae..d914868d1 100644 --- a/mimic-iii/benchmark/postgres-benchmark-4.sql +++ b/mimic-iii/benchmark/postgres-benchmark-4.sql @@ -18,7 +18,7 @@ STOPPED VARCHAR(50) ) ; --- PARTITIONNING +-- PARTITIONING -- CREATE CHARTEVENTS_PARTITIONED TABLE CREATE TABLE CHARTEVENTS_PARTITIONED_0 ( CHECK ( itemid in (211, 220045, 51, 442, 455, 6701, 220179, 220050, 8368, 8440, 8441, 8555, 220180, 220051, 456, 52, 6702, 443, 220052, 220181, 225312, 618, 615, 220210, 224690, 646, 220277, 223762, 676, 223761, 678 ) )) INHERITS (CHARTEVENTS_PARTITIONED); diff --git a/mimic-iii/buildmimic/README.md b/mimic-iii/buildmimic/README.md index 92929c4de..ce11732e9 100644 --- a/mimic-iii/buildmimic/README.md +++ b/mimic-iii/buildmimic/README.md @@ -1,6 +1,6 @@ # Building the MIMIC database -This directory contains scripts that can be used to create a new instance of the MIMIC Critical Care Database. Tutorials for building a local PostgreSQL database using these scripts are available on the MIMIC website, under the "Tutorials" item in the menu: http://mimic.physionet.org/about/mimic/ +This directory contains scripts that can be used to create a new instance of the MIMIC Critical Care Database. Tutorials for building a local PostgreSQL database using these scripts are available on the MIMIC website, under the "Tutorials" item in the menu: https://mimic.mit.edu/docs/III/about/ ## Automated tests (PostgreSQL scripts only) diff --git a/mimic-iii/buildmimic/apache-drill/README.md b/mimic-iii/buildmimic/apache-drill/README.md index ae0db324f..a3c46aa46 100644 --- a/mimic-iii/buildmimic/apache-drill/README.md +++ b/mimic-iii/buildmimic/apache-drill/README.md @@ -66,7 +66,7 @@ In DBeaver, connect and copy/paste: 1. drill_create_data.sql 1. create alias for all csv in temp (dfs.tmp = /tmp on linux) ln -s /path/to/mimic/csv/\* /tmp -1. create table one by one. Otherwize, it crashes when multi query are made in one run +1. create table one by one. Otherwise, it crashes when multi query are made in one run ## Notes diff --git a/mimic-iii/buildmimic/aws-athena/README.md b/mimic-iii/buildmimic/aws-athena/README.md index 0e7fb9133..5c2e5d0dc 100644 --- a/mimic-iii/buildmimic/aws-athena/README.md +++ b/mimic-iii/buildmimic/aws-athena/README.md @@ -1,17 +1,17 @@ # Study MIMIC-III data using AWS Athena -The MIMIC-III dataset is available in the AWS cloud through our [Open Data on AWS program](https://registry.opendata.aws/). This allows researchers to use the MIMIC-III dataset without having to download it, make a copy of it, or pay to store it. They can simply analyze MIMIC-III using AWS services like Amazon EC2, Amazon Athena, AWS Lambda, or Amazon EMR by pointing to its address in the AWS cloud. This makes it faster and less expensive to perform research studies. In order to gain access, please login to the [MIMIC PhysioNet website](https://mimic.physionet.org/), [input your AWS account number](https://physionet.org/settings/cloud/), and [request access to the MIMIC-III Clinical Database on AWS](https://physionet.org/projects/mimiciii/1.4/request_access/2). +The MIMIC-III dataset is available in the AWS cloud through our [Open Data on AWS program](https://registry.opendata.aws/). This allows researchers to use the MIMIC-III dataset without having to download it, make a copy of it, or pay to store it. They can simply analyze MIMIC-III using AWS services like Amazon EC2, Amazon Athena, AWS Lambda, or Amazon EMR by pointing to its address in the AWS cloud. This makes it faster and less expensive to perform research studies. In order to gain access, please login to the [MIMIC PhysioNet website](https://mimic.mit.edu/), [input your AWS account number](https://physionet.org/settings/cloud/), and [request access to the MIMIC-III Clinical Database on AWS](https://physionet.org/projects/mimiciii/1.4/request_access/2). Found here is some useful code to help you understand how to access the MIMIC-III dataset on AWS. ### mimic-iii-athena.yaml -This is an [AWS CloudFormation Template](https://aws.amazon.com/cloudformation/) that will deploy a database in the [AWS Glue](https://aws.amazon.com/glue/) Data Catalog that contains all of the MIMIC-III tables. It also deploys a Jupyter Notebook instance in [Amazon SageMaker](https://aws.amazon.com/sagemaker/) that contains the content of this [mimic-code](https://github.com/MIT-LCP/mimic-code/) GitHub repository and is set up to access the MIMIC-III data through AWS Glue. This repository contains a version of the [Aline Study](https://github.com/JamesSWiggins/mimic-code/tree/master/notebooks/aline/awsathena) that is configured to run it's SQL queries against the MIMIC-III data in AWS using [AWS Athena](https://aws.amazon.com/athena/). +This is an [AWS CloudFormation Template](https://aws.amazon.com/cloudformation/) that will deploy a database in the [AWS Glue](https://aws.amazon.com/glue/) Data Catalog that contains all of the MIMIC-III tables. It also deploys a Jupyter Notebook instance in [Amazon SageMaker](https://aws.amazon.com/sagemaker/) that contains the content of this [mimic-code](https://github.com/MIT-LCP/mimic-code/) GitHub repository and is set up to access the MIMIC-III data through AWS Glue. This repository contains a version of the [Aline Study](/mimic-iii/notebooks/aline-aws) that is configured to run it's SQL queries against the MIMIC-III data in AWS using [AWS Athena](https://aws.amazon.com/athena/). Use the below Launch Stack button to deploy this AWS CloudFormation template into your AWS account. On the first screen, the template link has already been specified, so just click next. On the second screen, provide a Stack name (letters and numbers) and click next, on the third screen, just click next. On the forth screen, at the bottom, there is a box that says **I acknowledge that AWS CloudFormation might create IAM resources.**. Check that box, and then click **Create**. Once the Stack has complete deploying, look at the **Outputs** tab of the AWS CloudFormation console for links to your Juypter Notebooks instance. [![cloudformation-launch-stack](cloudformation-launch-stack.png)](https://console.aws.amazon.com/cloudformation/home?region=us-east-1#/stacks/new?stackName=MIMIC&templateURL=https://aws-bigdata-blog.s3.amazonaws.com/artifacts/biomedical-informatics-studies/mimic-iii-athena.yaml) ### mimictoparquet_glue_job.py -The MIMIC-III dataset is offered on AWS in both the original gzipped CSV format as well as the Apache Parquet format. This Python script is run by the MIMIC team as an AWS Glue job to convert the CSV.gz files to Apache Parquet format. It uses Apache Spark to help conver the files. You don't need to use this script yourself to use the MIMIC-III data in Parquet format, but it is provided as a template that could be used to convert other data sets from CSV to Parquet. The benefits of querying this data in Parquet format are outlined in this blog post: +The MIMIC-III dataset is offered on AWS in both the original gzipped CSV format as well as the Apache Parquet format. This Python script is run by the MIMIC team as an AWS Glue job to convert the CSV.gz files to Apache Parquet format. It uses Apache Spark to help convert the files. You don't need to use this script yourself to use the MIMIC-III data in Parquet format, but it is provided as a template that could be used to convert other data sets from CSV to Parquet. The benefits of querying this data in Parquet format are outlined in this blog post: ### mimic-aws-athena-ddl.sql This is a SQL script that can be run directly within AWS Athena to define each of the MIMIC-III dataset tables from the Apache Parquet files provide in the AWS OpenData program. You do not need to execute these if you use the above ```mimic-iii-athena.yaml``` CloudFormation template. The table spaces are defined for you by that automation. However, if you wanted to define the tables yourself within your account, you can use these SQL statements. diff --git a/mimic-iii/buildmimic/bigquery/README.md b/mimic-iii/buildmimic/bigquery/README.md index b7ea10da5..8b03a48e9 100644 --- a/mimic-iii/buildmimic/bigquery/README.md +++ b/mimic-iii/buildmimic/bigquery/README.md @@ -2,7 +2,7 @@ Following are the steps to create the MIMIC-III dataset on BigQuery and load the source files (.csv.gz) downloaded from Physionet. -**IMPORTANT**: Only users with approved Physionet Data Use Agreement (DUA) should have access to the MIMIC dataset via BigQuery or Cloud Storage. If you don't have access to MIMIC, follow the instructions [here](https://mimic.physionet.org/gettingstarted/access/) to request access. +**IMPORTANT**: Only users with approved Physionet Data Use Agreement (DUA) should have access to the MIMIC dataset via BigQuery or Cloud Storage. If you don't have access to MIMIC, follow the instructions [here](https://mimic.mit.edu/docs/gettingstarted/) to request access. --- @@ -12,7 +12,7 @@ Following are the steps to create the MIMIC-III dataset on BigQuery and load the For this tutorial, we will proceed using the compressed files (.csv.gz) stored in a Google Cloud Storage (GCS) bucket. In order to use these files, you must have a Google account with access permission granted via PhysioNet. -You can read about being provisioned access to MIMIC-III on Google [on the cloud tutorial page](https://mimic.physionet.org/gettingstarted/cloud/). +You can read about being provisioned access to MIMIC-III on Google [on the cloud tutorial page](https://mimic.mit.edu/docs/gettingstarted/cloud/). Once you have configured your account on PhysioNet, go to the [MIMIC-III page on PhysioNet](https://physionet.org/content/mimiciii/) and scroll down to the Files section. @@ -139,12 +139,12 @@ BigQuery schemas are defined by JSON files. These files are an array of dictiona The information about the columns are compiled from several sources: 1. [The PostgreSQL build scripts](https://github.com/MIT-LCP/mimic-code/tree/main/mimic-iii/buildmimic/postgres) -2. [The MIMIC-III online documentation](https://mimic.physionet.org/about/mimic/) +2. [The MIMIC-III online documentation](https://mimic.mit.edu/docs/III/about/) 3. [A schematic of the MIMIC-III database](https://mit-lcp.github.io/mimic-schema-spy/) Currently all columns are set as NULLABLE as the tables will be used for searching/querying only and users with Viewer role should not be able to modify the tables (ex: insert/delete/update data). However, depending on your environment, you may need to set the mode REQUIRED for the appropriate columns. -We selected the type DATETIME for all columns with dates and times. However, you could also use TIMESTAMP. As [discussed in the MIMIC-III documentation](https://mimic.physionet.org/mimicdata/time), columns with suffix DATE (ex: CHARTDATE) "will always have 00:00:00 as the hour, minute, and second values. This does not mean it was recorded at midnight: it indicates that we do not have the exact time, only the date". This is also true for other columns such DOB and DOD (patients table). +We selected the type DATETIME for all columns with dates and times. However, you could also use TIMESTAMP. As [discussed in the MIMIC-III documentation](https://mimic.mit.edu/docs/III/about/time.html), columns with suffix DATE (ex: CHARTDATE) "will always have 00:00:00 as the hour, minute, and second values. This does not mean it was recorded at midnight: it indicates that we do not have the exact time, only the date". This is also true for other columns such DOB and DOD (patients table). --- diff --git a/mimic-iii/buildmimic/duckdb/README.md b/mimic-iii/buildmimic/duckdb/README.md index 04a0c38cf..5ab9021f1 100644 --- a/mimic-iii/buildmimic/duckdb/README.md +++ b/mimic-iii/buildmimic/duckdb/README.md @@ -85,7 +85,7 @@ $ Here's an example invocation that will make the database in the default "mimic3.db": ```sh -$ ./import_duckdb.sh physionet.org/files/mimiciii/1.4 +$ ./import_duckdb.sh mimiciii/1.4 ... output removed Successfully finished loading data into mimic3.db. diff --git a/mimic-iii/buildmimic/duckdb/import_duckdb.sh b/mimic-iii/buildmimic/duckdb/import_duckdb.sh index 15d4977fe..77b76c7d1 100755 --- a/mimic-iii/buildmimic/duckdb/import_duckdb.sh +++ b/mimic-iii/buildmimic/duckdb/import_duckdb.sh @@ -29,7 +29,7 @@ usage () { die " USAGE: ./import_duckdb.sh mimic_data_dir [output_db] WHERE: - mimic_data_dir directory that contains csv.tar.gz or csv files + mimic_data_dir directory that contains csv.gz or csv files output_db: optional filename for duckdb file (default: mimic3.db)\ " } diff --git a/mimic-iii/buildmimic/oracle/README.md b/mimic-iii/buildmimic/oracle/README.md index 62e19a791..f1ad6162d 100644 --- a/mimic-iii/buildmimic/oracle/README.md +++ b/mimic-iii/buildmimic/oracle/README.md @@ -31,11 +31,11 @@ Alternatively, you can follow this step by step guide: 3. Open up either `sqlplus` or SQLDeveloper 4. Convert NOTEEVENTS.csv into a workable format: `python add_oracle_rowdelimiter.py -d ',' -i 'NOTEEVENTS.csv' -r '><> diff --git a/mimic-iii/concepts/README.md b/mimic-iii/concepts/README.md index cedf3c476..039474bcc 100644 --- a/mimic-iii/concepts/README.md +++ b/mimic-iii/concepts/README.md @@ -5,7 +5,7 @@ The scripts are intended to be run against the BigQuery instantiation of MIMIC-I Concepts are categorized into folders if possible, otherwise they remain in the top-level directory. A table of contents is provided below: [List of concepts](#list-of-concepts). -You can read about cloud access to MIMIC-III, including via Google BigQuery, on the [cloud page](https://mimic.physionet.org/gettingstarted/cloud/). +You can read about cloud access to MIMIC-III, including via Google BigQuery, on the [cloud page](https://mimic.mit.edu/docs/gettingstarted/cloud/). The rest of this README describes: @@ -42,6 +42,7 @@ Folder | Table | Description --- | --- | --- . | [echo_data](echo_data.sql) | Text extracted from echocardiography reports using regular expressions. . | [code_status](code_status.sql) | Whether the patient has restrictions on life saving resuscitation. +. | [rrt](rrt.sql) | Whether the patient received any dialysis during their ICU stay. comorbidity | [elixhauser_ahrq_v37](comorbidity/elixhauser_ahrq_v37.sql) | Comorbidities in categories proposed by Elixhauser et al. AHRQ produced the mapping. comorbidity | [elixhauser_ahrq_v37_no_drg](comorbidity/elixhauser_ahrq_v37_no_drg.sql) | As above, but DRG codes are not used to exclude primary conditions. comorbidity | [elixhauser_quan](comorbidity/elixhauser_quan.sql) | Comorbidities in categories proposed by Elixhauser et al. using an algorithm by Quan et al. @@ -76,7 +77,7 @@ durations | [neuroblock_dose](durations/neuroblock_dose.sql) durations | [norepinephrine_dose](durations/norepinephrine_dose.sql) | Dose administered with start/stop times for norepinephrine. durations | [phenylephrine_dose](durations/phenylephrine_dose.sql) | Dose administered with start/stop times for phenylephrine. durations | [vasopressin_dose](durations/vasopressin_dose.sql) | Dose administered with start/stop times for vasopressin. -durations | [ventilation_classification](durations/ventilation_classification.sql) | Classifies patient settings as implying mechanical ventilation. +durations | [ventilation_classification](durations/ventilation_classification.sql) | Classifies ventilator settings (tidal volume, PEEP, etc.) as implying mechanical ventilation. durations | [ventilation_durations](durations/ventilation_durations.sql) | Start and stop times for mechanical ventilation. durations | [weight_durations](durations/weight_durations.sql) | Start and stop times for daily weight measurements. **firstday** | | The first day subfolder contains scripts to summarizes a patient's health on their first ICU day. @@ -93,6 +94,8 @@ firstday | [weight_first_day](firstday/weight_first_day.sql) **fluid_balance** | | Tables which track fluid input and output for the patient. fluid_balance | [colloid_bolus](fluid_balance/colloid_bolus.sql) | Times at which a patient received a bolus of colloidal fluid. fluid_balance | [crystalloid_bolus](fluid_balance/crystalloid_bolus.sql) | Times at which a patient received a bolus of crystalloid fluid. +fluid_balance | [ffp_transfusion](fluid_balance/ffp_transfusion.sql) | Times at which a patient received a transfusion of fresh frozen plasma. +fluid_balance | [rbc_transfusion](fluid_balance/rbc_transfusion.sql) | Times at which a patient received a transfusion of red blood cells. fluid_balance | [urine_output](fluid_balance/urine_output.sql) | Urine output for a patient with the time of documentation. **organfailure** | | Summarizations of the degree of organ failure for single organ systems. organfailure | [kdigo_creatinine](organfailure/kdigo_creatinine.sql) | Creatinine values with baseline creatinine as defined by KDIGO. @@ -103,6 +106,7 @@ organfailure | [kdigo_stages_7day](organfailure/kdigo_stages_7day.sql) organfailure | [meld](organfailure/meld.sql) | The MELD score, often used to assess health of liver transplant candidates. **pivot** | | Pivoted views contain the patient `icustay_id`, the `charttime`, and a number of variables. They are useful to acquiring a time series of values for patient stays. pivot | [pivoted_bg](pivot/pivoted_bg.sql) | Blood gas measurements. +pivot | [pivoted_bg_art](pivot/pivoted_bg_art.sql) | Arterial blood gas measurements, explicitly labelled or inferred from SpO2. pivot | [pivoted_fio2](pivot/pivoted_fio2.sql) | Fraction of inspired oxygen. pivot | [pivoted_gcs](pivot/pivoted_gcs.sql) | Glasgow Coma Scale. pivot | [pivoted_height](pivot/pivoted_height.sql) | Height. @@ -113,7 +117,6 @@ pivot | [pivoted_oasis](pivot/pivoted_oasis.sql) pivot | [pivoted_rrt](pivot/pivoted_rrt.sql) | Renal replacement therapy. pivot | [pivoted_sofa](pivot/pivoted_sofa.sql) | The Sequential Organ Failure Assessment (SOFA) scale. pivot | [pivoted_uo](pivot/pivoted_uo.sql) | Urine output. -pivot | [pivoted_vent_setting](pivot/pivoted_vent_setting.sql) | Ventilator settings (tidal volume, PEEP, etc). pivot | [pivoted_vital](pivot/pivoted_vital.sql) | Vital signs. **sepsis** | | Definitions of sepsis, a common cause of mortality for intensive care unit patients. sepsis | [angus](sepsis/angus.sql) | Sepsis defined using billing codes validated by Angus et al. diff --git a/mimic-iii/concepts/diagnosis/README.md b/mimic-iii/concepts/diagnosis/README.md index ae6d02301..b323d76e0 100644 --- a/mimic-iii/concepts/diagnosis/README.md +++ b/mimic-iii/concepts/diagnosis/README.md @@ -4,7 +4,7 @@ The Clinical Classification Software (CCS) categorizes ICD-9 coded diagnoses int The `ccs_multi_dx.csv.gz` data file must be uploaded to `physionet-data.mimiciii_derived.ccs_multi_dx`. -The BigQuery schema definition is available in this folder as [ccs_multi_dx.json](/ccs_multi_dx.json). +The BigQuery schema definition is available in this folder as [ccs_multi_dx.json](ccs_multi_dx.json). ## Creation of the ccs_multi_dx.csv.gz file @@ -24,7 +24,7 @@ Use Python to convert all apostrophes in `ccs_multi_dx_tool_2015.csv` into doubl ```python import pandas as pd -df = pd.read_csv('ccs_multi_dx_tool_2015.csv.gz') +df = pd.read_csv('ccs_multi_dx_tool_2015.csv') # remove apostrophes from header names and relabel df.rename(columns={"'ICD-9-CM CODE'": "icd9_code", "'CCS LVL 1'": "ccs_level1", "'CCS LVL 1 LABEL'": "ccs_group1", "'CCS LVL 2'": "ccs_level2", "'CCS LVL 2 LABEL'": "ccs_group2", "'CCS LVL 3'": "ccs_level3", "'CCS LVL 3 LABEL'": "ccs_group3", "'CCS LVL 4'": "ccs_level4", "'CCS LVL 4 LABEL'": "ccs_group4", }, inplace=True) diff --git a/mimic-iii/concepts/diagnosis/ccs_dx.sql b/mimic-iii/concepts/diagnosis/ccs_dx.sql index d67062d15..24781e525 100644 --- a/mimic-iii/concepts/diagnosis/ccs_dx.sql +++ b/mimic-iii/concepts/diagnosis/ccs_dx.sql @@ -1,5 +1,5 @@ -- add in matched ID, name, and ccs_id --- matched id (ccs_mid): the ccs ID with the hierachy, e.g. 7.1.2.1 +-- matched id (ccs_mid): the ccs ID with the hierarchy, e.g. 7.1.2.1 -- name (ccs_name): the most granular CCS category the diagnosis is in -- ID (ccs_id): the CCS identifier for the ICD-9 code (integer) SELECT diff --git a/mimic-iii/concepts/diagnosis/ccs_multi_dx.csv.gz b/mimic-iii/concepts/diagnosis/ccs_multi_dx.csv.gz new file mode 100644 index 0000000000000000000000000000000000000000..5e13857a6603729ac73748164940930757f34445 GIT binary patch literal 63797 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 "Burns" */ diff --git a/mimic-iii/concepts_postgres/diagnosis/ccs_multi_dx.sql b/mimic-iii/concepts_postgres/diagnosis/ccs_multi_dx.sql index dd30e9c4c..22a09d48a 100644 --- a/mimic-iii/concepts_postgres/diagnosis/ccs_multi_dx.sql +++ b/mimic-iii/concepts_postgres/diagnosis/ccs_multi_dx.sql @@ -1,6 +1,7 @@ -- There is no BigQuery source for this script. --- Loads the CCS multi-level diagnosis mapping from the CSV distributed --- alongside this script. On BigQuery the same table is loaded with: +-- Loads the CCS multi-level diagnosis mapping from the CSV stored in the +-- concepts folder (../concepts/diagnosis/ccs_multi_dx.csv.gz). On BigQuery +-- the same table is loaded with: -- bq load mimiciii_derived.ccs_multi_dx diagnosis/ccs_multi_dx.csv.gz diagnosis/ccs_multi_dx.json -- Run from the concepts_postgres directory so the relative path resolves. DROP TABLE IF EXISTS mimiciii_derived.ccs_multi_dx; @@ -17,4 +18,4 @@ CREATE TABLE mimiciii_derived.ccs_multi_dx ccs_level4 VARCHAR(10), ccs_group4 VARCHAR(100) ); -\COPY mimiciii_derived.ccs_multi_dx FROM PROGRAM 'gzip -dc diagnosis/ccs_multi_dx.csv.gz' CSV HEADER; +\COPY mimiciii_derived.ccs_multi_dx FROM PROGRAM 'gzip -dc ../concepts/diagnosis/ccs_multi_dx.csv.gz' CSV HEADER; diff --git a/mimic-iii/concepts_postgres/postgres-make-concepts.sql b/mimic-iii/concepts_postgres/postgres-make-concepts.sql index 3779bef6c..40fe88413 100644 --- a/mimic-iii/concepts_postgres/postgres-make-concepts.sql +++ b/mimic-iii/concepts_postgres/postgres-make-concepts.sql @@ -62,6 +62,7 @@ SET search_path TO mimiciii_derived, mimiciii; \i pivot/pivoted_vital.sql \i pivot/pivoted_bg_art.sql \i pivot/pivoted_sofa.sql +\i pivot/pivoted_oasis.sql -- comorbidity \i comorbidity/elixhauser_ahrq_v37.sql diff --git a/mimic-iii/notebooks/aline-aws/README.md b/mimic-iii/notebooks/aline-aws/README.md index ecfc40834..526126d35 100644 --- a/mimic-iii/notebooks/aline-aws/README.md +++ b/mimic-iii/notebooks/aline-aws/README.md @@ -17,7 +17,7 @@ You can learn more about the details of this modification and see a performance The study can be reproduced by: -1. Use the below Launch Stack button to deploy access to the MIMIC-III dataset into your AWS account. This will give you real-time access to the MIMIC-III data in your AWS account without having to download a copy of the MIMIC-III dataset. It will also deploy a Jupyter Notebook with access to the content of this GitHub repository in your AWS account. Prior to launching this, please login to the [MIMIC PhysioNet website](https://mimic.physionet.org/), [input your AWS account number](https://physionet.org/settings/cloud/), and [request access to the MIMIC-III Clinical Database on AWS](https://physionet.org/projects/mimiciii/1.4/request_access/2). +1. Use the below Launch Stack button to deploy access to the MIMIC-III dataset into your AWS account. This will give you real-time access to the MIMIC-III data in your AWS account without having to download a copy of the MIMIC-III dataset. It will also deploy a Jupyter Notebook with access to the content of this GitHub repository in your AWS account. Prior to launching this, please login to the [MIMIC PhysioNet website](https://mimic.mit.edu/), [input your AWS account number](https://physionet.org/settings/cloud/), and [request access to the MIMIC-III Clinical Database on AWS](https://physionet.org/projects/mimiciii/1.4/request_access/2). To start this deployment, click the Launch Stack button. On the first screen, the template link has already been specified, so just click next. On the second screen, provide a Stack name (letters and numbers) and click next, on the third screen, just click next. On the forth screen, at the bottom, there is a box that says **I acknowledge that AWS CloudFormation might create IAM resources.**. Check that box, and then click **Create**. Once the Stack has complete deploying, look at the **Outputs** tab of the AWS CloudFormation console for links to your Juypter Notebooks instance. diff --git a/mimic-iii/notebooks/aline-aws/aline-awsathena.ipynb b/mimic-iii/notebooks/aline-aws/aline-awsathena.ipynb index f2c8d0a72..68cf11005 100644 --- a/mimic-iii/notebooks/aline-aws/aline-awsathena.ipynb +++ b/mimic-iii/notebooks/aline-aws/aline-awsathena.ipynb @@ -1122,7 +1122,7 @@ " -- severity of illness just before ventilation\n", " , so.sofa as sofa_first\n", "\n", - " -- vital sign value just preceeding ventilation\n", + " -- vital sign value just preceding ventilation\n", " , vi.map as map_first\n", " , vi.heartrate as hr_first\n", " , vi.temperature as temp_first\n", diff --git a/mimic-iii/notebooks/aline-aws/aline_labs-awsathena.sql b/mimic-iii/notebooks/aline-aws/aline_labs-awsathena.sql index 3273c0c0e..ddf11e169 100644 --- a/mimic-iii/notebooks/aline-aws/aline_labs-awsathena.sql +++ b/mimic-iii/notebooks/aline-aws/aline_labs-awsathena.sql @@ -1,6 +1,6 @@ CREATE TABLE DATABASE.ALINE_LABS as -with labs_preceeding as +with labs_preceding as ( select co.icustay_id , l.valuenum, l.charttime @@ -49,7 +49,7 @@ with labs_preceeding as select icustay_id, valuenum, label, obs_after_vent , ROW_NUMBER() over (partition by icustay_id, label, obs_after_vent order by charttime DESC) as rn - from labs_preceeding + from labs_preceding ) , labs_grp as ( diff --git a/mimic-iii/notebooks/aline-aws/aline_vitals-awsathena.sql b/mimic-iii/notebooks/aline-aws/aline_vitals-awsathena.sql index 6d30869ca..bd0ebcab5 100644 --- a/mimic-iii/notebooks/aline-aws/aline_vitals-awsathena.sql +++ b/mimic-iii/notebooks/aline-aws/aline_vitals-awsathena.sql @@ -37,7 +37,7 @@ with vitals_stg0 as and valuenum is not null and coalesce(error,0) != 1 ) --- next, assign an integer where rn=1 is the vital sign just preceeding vent +-- next, assign an integer where rn=1 is the vital sign just preceding vent , vitals_stg1 as ( select diff --git a/mimic-iii/notebooks/aline/README.md b/mimic-iii/notebooks/aline/README.md index 1017a1e2f..b817cea66 100644 --- a/mimic-iii/notebooks/aline/README.md +++ b/mimic-iii/notebooks/aline/README.md @@ -10,7 +10,7 @@ The code here reproduces this study in the MIMIC-III database. This involved man # Requirements -There are a number of prerequesites to running this code: +There are a number of prerequisites to running this code: * an installation of MIMIC-III in a PostgreSQL database * Python 2.7 with the numpy, pandas, matplotlib, and psycopg2 packages diff --git a/mimic-iii/notebooks/aline/aline.ipynb b/mimic-iii/notebooks/aline/aline.ipynb index a0c1df3f8..bdc92212d 100644 --- a/mimic-iii/notebooks/aline/aline.ipynb +++ b/mimic-iii/notebooks/aline/aline.ipynb @@ -1062,7 +1062,7 @@ " -- severity of illness just before ventilation\n", " , so.sofa as sofa_first\n", "\n", - " -- vital sign value just preceeding ventilation\n", + " -- vital sign value just preceding ventilation\n", " , vi.map as map_first\n", " , vi.heartrate as hr_first\n", " , vi.temperature as temp_first\n", diff --git a/mimic-iii/notebooks/aline/aline_labs.sql b/mimic-iii/notebooks/aline/aline_labs.sql index f7efec0a9..1f07ac4b8 100644 --- a/mimic-iii/notebooks/aline/aline_labs.sql +++ b/mimic-iii/notebooks/aline/aline_labs.sql @@ -3,7 +3,7 @@ DROP MATERIALIZED VIEW IF EXISTS ALINE_LABS CASCADE; CREATE MATERIALIZED VIEW ALINE_LABS as -with labs_preceeding as +with labs_preceding as ( select co.icustay_id , l.valuenum, l.charttime @@ -52,7 +52,7 @@ with labs_preceeding as select icustay_id, valuenum, label, obs_after_vent , ROW_NUMBER() over (partition by icustay_id, label, obs_after_vent order by charttime DESC) as rn - from labs_preceeding + from labs_preceding ) , labs_grp as ( diff --git a/mimic-iii/notebooks/aline/aline_vitals.sql b/mimic-iii/notebooks/aline/aline_vitals.sql index 9ee60b797..f3f93a2c0 100644 --- a/mimic-iii/notebooks/aline/aline_vitals.sql +++ b/mimic-iii/notebooks/aline/aline_vitals.sql @@ -38,7 +38,7 @@ with vitals_stg0 as and valuenum is not null and coalesce(error,0) != 1 ) --- next, assign an integer where rn=1 is the vital sign just preceeding vent +-- next, assign an integer where rn=1 is the vital sign just preceding vent , vitals_stg1 as ( select diff --git a/mimic-iii/tutorials/cohort-selection.ipynb b/mimic-iii/tutorials/cohort-selection.ipynb index c16cc53eb..43cfb338c 100644 --- a/mimic-iii/tutorials/cohort-selection.ipynb +++ b/mimic-iii/tutorials/cohort-selection.ipynb @@ -18,7 +18,7 @@ "* Python packages installable with: \n", " * `pip install numpy pandas matplotlib psycopg2 jupyter`\n", " \n", - "First, as always, we open a connection to a local copy of the database. If you don't have a local copy of the database in PostgreSQL, follow the tutorial online (http://mimic.physionet.org) to install one.\n", + "First, as always, we open a connection to a local copy of the database. If you don't have a local copy of the database in PostgreSQL, follow the tutorial online (https://mimic.mit.edu) to install one.\n", "\n", "Let's begin!" ] @@ -1825,7 +1825,7 @@ "Above we can see that the `curr_service` column gives an abbreviation for the current service. The `prev_service` column is null, *unless* the patient had a transfer of service, in which case it identifies the previous service. For example, we can see `subject_id = 471` has had at least two service changes: once from TSURG to MED and once from MED back to TSURG (note: there may be more as we have limited this query using `LIMIT 10`, and you could examine this patient in detail using `SELECT * FROM services WHERE subject_id = 471` if you like).\n", "\n", "A list of the unique services and their descriptions can be found at:\n", - "http://mimic.physionet.org/mimictables/services/\n", + "https://mimic.mit.edu/docs/III/tables/services.html\n", "\n", "In particular, if we want to exclude surgery, we should exclude patients who were admitted under:\n", "\n", diff --git a/mimic-iii/tutorials/data_viz/01_data_viz_basic.ipynb b/mimic-iii/tutorials/data_viz/01_data_viz_basic.ipynb index be2fb0623..6a0b7056b 100644 --- a/mimic-iii/tutorials/data_viz/01_data_viz_basic.ipynb +++ b/mimic-iii/tutorials/data_viz/01_data_viz_basic.ipynb @@ -65,8 +65,8 @@ } }, "source": [ - "* Database description: https://mimic.physionet.org/gettingstarted/overview/\n", - "* Table description: https://mimic.physionet.org/mimictables/admissions/\n", + "* Database description: https://mimic.mit.edu/docs/gettingstarted/\n", + "* Table description: https://mimic.mit.edu/docs/III/tables/admissions.html\n", "* ER-Diagram: https://mit-lcp.github.io/mimic-schema-spy/relationships.html" ] }, diff --git a/mimic-iii/tutorials/data_viz/README.md b/mimic-iii/tutorials/data_viz/README.md index ecc6f6e3a..7a4c82872 100644 --- a/mimic-iii/tutorials/data_viz/README.md +++ b/mimic-iii/tutorials/data_viz/README.md @@ -13,6 +13,6 @@ conda activate dataviz please change the path if MIMIC dataset is located at different directory > ex: "`YOUR_PATH`/D_LABITEMS.csv" -* This is made for the Data analysis and visualization tutorial at [TMF summer school 2019](http://tmf-ev.de/Termine/ctl/Details/Mid/785/ItemID/1466.aspx) +* This is made for the Data analysis and visualization tutorial at the TMF summer school 2019 * Authors: Prof. med. Thomas Ganslandt
* and Kim Hee diff --git a/mimic-iii/tutorials/dplyr-frontend/intro.html b/mimic-iii/tutorials/dplyr-frontend/intro.html index 90d36d2f7..6538bd7bd 100755 --- a/mimic-iii/tutorials/dplyr-frontend/intro.html +++ b/mimic-iii/tutorials/dplyr-frontend/intro.html @@ -163,7 +163,7 @@

Attach R packages

Instantiate the MIMIC-III database

-

I followed the Unix/Mac instructions at PhysioNet to create an instance of MIMIC-III.2 In particular, i used the user name (mimicuser), database name (mimic), and schema name (mimiciii) suggested there, with the password mimic. If you make different choices, then you’ll need to change the corresponding parameter values in the dbConnect() call below. While the queries in this notebook can be performed on the entire database, a user new to MIMIC, Postgres, or R may want to install the demo data set instead, following the same process except for the CSV files used.3

+

I followed the Unix/Mac instructions at PhysioNet to create an instance of MIMIC-III.2 In particular, i used the user name (mimicuser), database name (mimic), and schema name (mimiciii) suggested there, with the password mimic. If you make different choices, then you’ll need to change the corresponding parameter values in the dbConnect() call below. While the queries in this notebook can be performed on the entire database, a user new to MIMIC, Postgres, or R may want to install the demo data set instead, following the same process except for the CSV files used.3

Connect to MIMIC-III

@@ -305,7 +305,7 @@

Subset and join query tables

## 9 18340 1626 117062 1 41001 ## 10 30343 2700 100335 1 41001 ## # ... with more rows -

MI may not be listed as the principal diagnosis; as explained in the documentation for the patients table, the seq_num field is a priority ranking for the diagnoses generated at the end of stay. In order to focus on patients for whom MI was central to their hospitalization, i will include records with MI in any of the first five diagnosis positions, according to the "seq_num" field. To avoid duplicate admissions, i use group_by() and top_n() to limit the query to the first MI diagnosis for each admission.

+

MI may not be listed as the principal diagnosis; as explained in the documentation for the patients table, the seq_num field is a priority ranking for the diagnoses generated at the end of stay. In order to focus on patients for whom MI was central to their hospitalization, i will include records with MI in any of the first five diagnosis positions, according to the "seq_num" field. To avoid duplicate admissions, i use group_by() and top_n() to limit the query to the first MI diagnosis for each admission.

mi_admissions %>%
   filter(seq_num <= 5) %>%
   group_by(subject_id, hadm_id) %>%
@@ -392,7 +392,7 @@ 

Transform and augment query tables

## 9 158 169433 1 412 FALSE ## 10 160 161672 1 41041 TRUE ## # ... with more rows
-

Finally, i adopt a common outcome measure for critical care: 30-day mortality. I’m interested in survival after discharge, so i must restrict to patients who did not die in hospital. This information is recorded in the "hospital_expire_flag" field (though not yet described in the admissions table documentation; see the tutorial on querying MIMIC-III). I also require the dates (admission and discharge) of each stay from the admissions table and the date of death (where available) of each patient from the patients table. While i’m working with dates, i’ll also calculate each patient’s age on the day of admission.

+

Finally, i adopt a common outcome measure for critical care: 30-day mortality. I’m interested in survival after discharge, so i must restrict to patients who did not die in hospital. This information is recorded in the "hospital_expire_flag" field (though not yet described in the admissions table documentation; see the tutorial on querying MIMIC-III). I also require the dates (admission and discharge) of each stay from the admissions table and the date of death (where available) of each patient from the patients table. While i’m working with dates, i’ll also calculate each patient’s age on the day of admission.

I first join the necessary date fields into study_admissions. The syntax gets a bit cluttered here in order to keep the query to one pipeline. This is my own preference; you may prefer, especially while familiarizing yourself with dplyr, to cut these into smaller chunks.

study_admissions %>%
   left_join(
@@ -425,7 +425,7 @@ 

Transform and augment query tables

## 10 160 161672 1 41041 TRUE ## # ... with more rows, and 4 more variables: admittime <dttm>, ## # dischtime <dttm>, dob <dttm>, dod <dttm>
-

Functionality for working with dates and times is not yet implemented in dbplyr, but an invaluable feature of its SQL translation is that unrecognized functions pass through verbatim, where Postgres will attempt to interpret them. This allows to use date_part() below to extract components of timestamp fields as numbers. (Postgres also has a convenient age() function that would simplify the code chunk below, but this produces a character string that doesn’t lend itself to analysis purposes.) The documentation for the patients table explains that patients of 90 years and older had their ages artificially inflated, so i’ve removed these patients from my analysis. I reorder the fields toward the end in order to show the results of the date calculations. In the last transformation step, everything() adds in all the fields i don’t explicitly select.

+

Functionality for working with dates and times is not yet implemented in dbplyr, but an invaluable feature of its SQL translation is that unrecognized functions pass through verbatim, where Postgres will attempt to interpret them. This allows to use date_part() below to extract components of timestamp fields as numbers. (Postgres also has a convenient age() function that would simplify the code chunk below, but this produces a character string that doesn’t lend itself to analysis purposes.) The documentation for the patients table explains that patients of 90 years and older had their ages artificially inflated, so i’ve removed these patients from my analysis. I reorder the fields toward the end in order to show the results of the date calculations. In the last transformation step, everything() adds in all the fields i don’t explicitly select.

study_admissions %>%
   mutate(tt_death = date_part("day", dod) - date_part("day", dischtime)) %>%
   mutate(mortality = tt_death <= 30) %>%
diff --git a/mimic-iii/tutorials/dplyr-frontend/intro.md b/mimic-iii/tutorials/dplyr-frontend/intro.md
index 2c33ab6ef..908f3f5b6 100755
--- a/mimic-iii/tutorials/dplyr-frontend/intro.md
+++ b/mimic-iii/tutorials/dplyr-frontend/intro.md
@@ -76,7 +76,7 @@ in a few queries.
 ### Instantiate the MIMIC-III database
 
 I followed [the Unix/Mac instructions at
-PhysioNet](https://mimic.physionet.org/tutorials/install-mimic-locally-ubuntu/)
+PhysioNet](https://mimic.mit.edu/docs/gettingstarted/local/install-mimic-locally-ubuntu.html)
 to create an instance of MIMIC-III.[2] In particular, i used the user
 name (`mimicuser`), database name (`mimic`), and schema name
 (`mimiciii`) suggested there, with the password `mimic`. If you make
@@ -84,7 +84,7 @@ different choices, then you'll need to change the corresponding
 parameter values in the `dbConnect()` call below. While the queries in
 this notebook can be performed on the entire database, a user new to
 MIMIC, Postgres, or R may want to install [the demo data
-set](https://mimic.physionet.org/gettingstarted/demo/) instead,
+set](https://mimic.mit.edu/docs/III/demo.html) instead,
 following the same process except for the CSV files used.[3]
 
 ### Connect to MIMIC-III
@@ -296,7 +296,7 @@ any fields from the codes table.
 
 MI may not be listed as the principal diagnosis; as explained in [the
 documentation for the `patients`
-table](https://mimic.physionet.org/mimictables/diagnoses_icd/), the
+table](https://mimic.mit.edu/docs/III/tables/diagnoses_icd.html), the
 `seq_num` field is a priority ranking for the diagnoses generated at the
 end of stay. In order to focus on patients for whom MI was central to
 their hospitalization, i will include records with MI in any of the
@@ -423,9 +423,9 @@ mortality. I'm interested in survival after discharge, so i must
 restrict to patients who did *not* die in hospital. This information is
 recorded in the `"hospital_expire_flag"` field (though not yet described
 in [the `admissions` table
-documentation](https://mimic.physionet.org/mimictables/admissions/); see
+documentation](https://mimic.mit.edu/docs/III/tables/admissions.html); see
 [the tutorial on querying
-MIMIC-III](https://mimic.physionet.org/tutorials/intro-to-mimic-iii/)).
+MIMIC-III](https://github.com/MIT-LCP/mimic-code/blob/main/mimic-iii/tutorials/sql-intro.md)).
 I also require the dates (admission and discharge) of each stay from the
 `admissions` table and the date of death (where available) of each
 patient from the `patients` table. While i'm working with dates, i'll
@@ -478,7 +478,7 @@ to extract components of timestamp fields as numbers. (Postgres also has
 a convenient `age()` function that would simplify the code chunk below,
 but this produces a character string that doesn't lend itself to
 analysis purposes.) [The documentation for the `patients`
-table](https://mimic.physionet.org/mimictables/patients/) explains that
+table](https://mimic.mit.edu/docs/III/tables/patients.html) explains that
 patients of 90 years and older had their ages artificially inflated, so
 i've removed these patients from my analysis. I reorder the fields
 toward the end in order to show the results of the date calculations. In
diff --git a/mimic-iii/tutorials/dplyr-frontend/intro.rmd b/mimic-iii/tutorials/dplyr-frontend/intro.rmd
index b3b804977..b5847f91f 100755
--- a/mimic-iii/tutorials/dplyr-frontend/intro.rmd
+++ b/mimic-iii/tutorials/dplyr-frontend/intro.rmd
@@ -47,7 +47,7 @@ library(stringr)
 
 ### Instantiate the MIMIC-III database
 
-I followed [the Unix/Mac instructions at PhysioNet](https://mimic.physionet.org/tutorials/install-mimic-locally-ubuntu/) to create an instance of MIMIC-III.[^corrections] In particular, i used the user name (`mimicuser`), database name (`mimic`), and schema name (`mimiciii`) suggested there, with the password `mimic`. If you make different choices, then you'll need to change the corresponding parameter values in the `dbConnect()` call below. While the queries in this notebook can be performed on the entire database, a user new to MIMIC, Postgres, or R may want to install [the demo data set](https://mimic.physionet.org/gettingstarted/demo/) instead, following the same process except for the CSV files used.[^etl]
+I followed [the Unix/Mac instructions at PhysioNet](https://mimic.mit.edu/docs/gettingstarted/local/install-mimic-locally-ubuntu.html) to create an instance of MIMIC-III.[^corrections] In particular, i used the user name (`mimicuser`), database name (`mimic`), and schema name (`mimiciii`) suggested there, with the password `mimic`. If you make different choices, then you'll need to change the corresponding parameter values in the `dbConnect()` call below. While the queries in this notebook can be performed on the entire database, a user new to MIMIC, Postgres, or R may want to install [the demo data set](https://mimic.mit.edu/docs/III/demo.html) instead, following the same process except for the CSV files used.[^etl]
 
 [^corrections]: The instantiation required some changes to the Postgres commands, e.g. `alter user mimic nosuperuser;` should in fact be `alter user mimicuser nosuperuser;`.
 
@@ -137,7 +137,7 @@ tbl_mimic(diagnoses_icd) %>%
   print() -> mi_admissions
 ```
 
-MI may not be listed as the principal diagnosis; as explained in [the documentation for the `patients` table](https://mimic.physionet.org/mimictables/diagnoses_icd/), the `seq_num` field is a priority ranking for the diagnoses generated at the end of stay. In order to focus on patients for whom MI was central to their hospitalization, i will include records with MI in any of the first five diagnosis positions, according to the `"seq_num"` field. To avoid duplicate admissions, i use `group_by()` and `top_n()` to limit the query to the first MI diagnosis for each admission.
+MI may not be listed as the principal diagnosis; as explained in [the documentation for the `patients` table](https://mimic.mit.edu/docs/III/tables/diagnoses_icd.html), the `seq_num` field is a priority ranking for the diagnoses generated at the end of stay. In order to focus on patients for whom MI was central to their hospitalization, i will include records with MI in any of the first five diagnosis positions, according to the `"seq_num"` field. To avoid duplicate admissions, i use `group_by()` and `top_n()` to limit the query to the first MI diagnosis for each admission.
 
 ```{r heart attack admissions}
 mi_admissions %>%
@@ -179,7 +179,7 @@ tbl_mimic(drgcodes) %>%
   print() -> study_admissions
 ```
 
-Finally, i adopt a common outcome measure for critical care: 30-day mortality. I'm interested in survival after discharge, so i must restrict to patients who did _not_ die in hospital. This information is recorded in the `"hospital_expire_flag"` field (though not yet described in [the `admissions` table documentation](https://mimic.physionet.org/mimictables/admissions/); see [the tutorial on querying MIMIC-III](https://mimic.physionet.org/tutorials/intro-to-mimic-iii/)).  I also require the dates (admission and discharge) of each stay from the `admissions` table and the date of death (where available) of each patient from the `patients` table.
+Finally, i adopt a common outcome measure for critical care: 30-day mortality. I'm interested in survival after discharge, so i must restrict to patients who did _not_ die in hospital. This information is recorded in the `"hospital_expire_flag"` field (though not yet described in [the `admissions` table documentation](https://mimic.mit.edu/docs/III/tables/admissions.html); see [the tutorial on querying MIMIC-III](https://github.com/MIT-LCP/mimic-code/blob/main/mimic-iii/tutorials/sql-intro.md)).  I also require the dates (admission and discharge) of each stay from the `admissions` table and the date of death (where available) of each patient from the `patients` table.
 While i'm working with dates, i'll also calculate each patient's age on the day of admission.
 
 I first join the necessary date fields into `study_admissions`.
@@ -203,7 +203,7 @@ study_admissions %>%
   print() -> study_admissions
 ```
 
-Functionality for working with dates and times is not yet implemented in **dbplyr**, but an invaluable feature of [its SQL translation](https://dbplyr.tidyverse.org/articles/sql-translation.html) is that unrecognized functions pass through verbatim, where Postgres will attempt to interpret them. This allows to use `date_part()` below to extract components of timestamp fields as numbers. (Postgres also has a convenient `age()` function that would simplify the code chunk below, but this produces a character string that doesn't lend itself to analysis purposes.) [The documentation for the `patients` table](https://mimic.physionet.org/mimictables/patients/) explains that patients of 90 years and older had their ages artificially inflated, so i've removed these patients from my analysis. I reorder the fields toward the end in order to show the results of the date calculations. In the last transformation step, `everything()` adds in all the fields i don't explicitly select.
+Functionality for working with dates and times is not yet implemented in **dbplyr**, but an invaluable feature of [its SQL translation](https://dbplyr.tidyverse.org/articles/sql-translation.html) is that unrecognized functions pass through verbatim, where Postgres will attempt to interpret them. This allows to use `date_part()` below to extract components of timestamp fields as numbers. (Postgres also has a convenient `age()` function that would simplify the code chunk below, but this produces a character string that doesn't lend itself to analysis purposes.) [The documentation for the `patients` table](https://mimic.mit.edu/docs/III/tables/patients.html) explains that patients of 90 years and older had their ages artificially inflated, so i've removed these patients from my analysis. I reorder the fields toward the end in order to show the results of the date calculations. In the last transformation step, `everything()` adds in all the fields i don't explicitly select.
 
 ```{r time differences}
 study_admissions %>%
diff --git a/mimic-iii/tutorials/dplyr-frontend/intro.tex b/mimic-iii/tutorials/dplyr-frontend/intro.tex
index 7b77a96d1..1e7d18759 100755
--- a/mimic-iii/tutorials/dplyr-frontend/intro.tex
+++ b/mimic-iii/tutorials/dplyr-frontend/intro.tex
@@ -238,7 +238,7 @@ \subsubsection{Instantiate the MIMIC-III
 database}\label{instantiate-the-mimic-iii-database}
 
 I followed
-\href{https://mimic.physionet.org/tutorials/install-mimic-locally-ubuntu/}{the
+\href{https://mimic.mit.edu/docs/gettingstarted/local/install-mimic-locally-ubuntu.html}{the
 Unix/Mac instructions at PhysioNet} to create an instance of
 MIMIC-III.\footnote{The instantiation required some changes to the
   Postgres commands, e.g. \texttt{alter\ user\ mimic\ nosuperuser;}
@@ -250,7 +250,7 @@ \subsubsection{Instantiate the MIMIC-III
 \texttt{dbConnect()} call below. While the queries in this notebook can
 be performed on the entire database, a user new to MIMIC, Postgres, or R
 may want to install
-\href{https://mimic.physionet.org/gettingstarted/demo/}{the demo data
+\href{https://mimic.mit.edu/docs/III/demo.html}{the demo data
 set} instead, following the same process except for the CSV files
 used.\footnote{When installing a new database, i find it much more
   efficient to wrap my steps in an R script that i can execute from the
@@ -512,7 +512,7 @@ \subsubsection{Subset and join query
 \end{verbatim}
 
 MI may not be listed as the principal diagnosis; as explained in
-\href{https://mimic.physionet.org/mimictables/diagnoses_icd/}{the
+\href{https://mimic.mit.edu/docs/III/tables/diagnoses_icd.html}{the
 documentation for the \texttt{patients} table}, the \texttt{seq\_num}
 field is a priority ranking for the diagnoses generated at the end of
 stay. In order to focus on patients for whom MI was central to their
@@ -668,9 +668,9 @@ \subsubsection{Transform and augment query
 restrict to patients who did \emph{not} die in hospital. This
 information is recorded in the \texttt{"hospital\_expire\_flag"} field
 (though not yet described in
-\href{https://mimic.physionet.org/mimictables/admissions/}{the
+\href{https://mimic.mit.edu/docs/III/tables/admissions.html}{the
 \texttt{admissions} table documentation}; see
-\href{https://mimic.physionet.org/tutorials/intro-to-mimic-iii/}{the
+\href{https://github.com/MIT-LCP/mimic-code/blob/main/mimic-iii/tutorials/sql-intro.md}{the
 tutorial on querying MIMIC-III}). I also require the dates (admission
 and discharge) of each stay from the \texttt{admissions} table and the
 date of death (where available) of each patient from the
@@ -731,7 +731,7 @@ \subsubsection{Transform and augment query
 numbers. (Postgres also has a convenient \texttt{age()} function that
 would simplify the code chunk below, but this produces a character
 string that doesn't lend itself to analysis purposes.)
-\href{https://mimic.physionet.org/mimictables/patients/}{The
+\href{https://mimic.mit.edu/docs/III/tables/patients.html}{The
 documentation for the \texttt{patients} table} explains that patients of
 90 years and older had their ages artificially inflated, so i've removed
 these patients from my analysis. I reorder the fields toward the end in
diff --git a/mimic-iii/tutorials/sql-intro.md b/mimic-iii/tutorials/sql-intro.md
index d74c91518..9fbcdaf6f 100644
--- a/mimic-iii/tutorials/sql-intro.md
+++ b/mimic-iii/tutorials/sql-intro.md
@@ -17,7 +17,7 @@ After this tutorial you should have:
 
 MIMIC-III is an openly available dataset developed by the MIT Lab for Computational Physiology, comprising deidentified health data associated with >60,000 hospital stays. Spanning 2001-2012, it includes demographics, vital signs, laboratory tests, medications, and more. A paper describing MIMIC-III is available from: http://www.nature.com/articles/sdata201635
 
-The dataset is provided as a collection of comma-separated value (CSV) files, which can be loaded into a database system such as PostgreSQL. A list of tables is provided on the MIMIC website: http://mimic.physionet.org/mimictables/admissions/
+The dataset is provided as a collection of comma-separated value (CSV) files, which can be loaded into a database system such as PostgreSQL. A list of tables is provided on the MIMIC website: https://mimic.mit.edu/docs/III/tables/admissions.html
 
 We have highlighted some of the key tables below:
 
@@ -32,8 +32,8 @@ We have highlighted some of the key tables below:
 
 ## Solution 1
 
-1. The patient's date of birth can be found in the *patients* table, as detailed in the documentation: http://mimic.physionet.org/mimictables/patients/
-2. The patient's hospital admission time can be found in the *admissions* table, which tracks hospital admission information, as detailed here: http://mimic.physionet.org/mimictables/admissions/
+1. The patient's date of birth can be found in the *patients* table, as detailed in the documentation: https://mimic.mit.edu/docs/III/tables/patients.html
+2. The patient's hospital admission time can be found in the *admissions* table, which tracks hospital admission information, as detailed here: https://mimic.mit.edu/docs/III/tables/admissions.html
 
 # Comma separated value files
 
@@ -41,8 +41,6 @@ Comma separated value (CSV) files are a plain text format used for storing data
 
 As there is no official standard for the CSV format, the term is used somewhat loosely, which can often cause issues when seeking to load the data into a data analysis package. A general recommendation is to follow the definition for CSVs set out by the Internet Engineering Task Force in the RFC 4180 specification document.
 
-![CSV file](./csvformat.png)
-
 Summarized briefly, RFC 4180 specifies that:
 
 - files may optionally begin with a header row, with each field separated by a comma;
@@ -89,8 +87,6 @@ Giving a simple example of a hospital database with four tables, it might compri
 
 The patients table lists unique patients. The admissions table lists unique hospital admissions. The chartevents table lists charted events such as heart rate measurements. The `d_items` table is a dictionary that lists `itemid`s and associated labels, as shown in the example query. pk is primary key. fk is foreign key.
 
-![Relational databases consist of multiple data tables linked by keys.](./relationaldb.png)
-
 # What is Structured Query Language (SQL)?
 
 Structured Query Language (SQL) is a programming language used to manage relational databases.
@@ -124,8 +120,8 @@ FROM patients;
 ## Solution 2
 
 1. If you have not installed the MIMIC-III database into a PostgreSQL server either locally or otherwise, you can follow the tutorial on installing MIMIC-III:
-    * OS X or Ubuntu: http://mimic.physionet.org/tutorials/install-mimic-locally-ubuntu/
-    * Windows: http://mimic.physionet.org/tutorials/install-mimic-locally-windows/
+    * OS X or Ubuntu: https://mimic.mit.edu/docs/gettingstarted/local/install-mimic-locally-ubuntu.html
+    * Windows: https://mimic.mit.edu/docs/gettingstarted/local/install-mimic-locally-windows.html
 2. `SELECT * FROM patients`
 3. `SELECT subject_id, dob, gender FROM patients`
 
@@ -270,7 +266,7 @@ Note that the `WHERE` clause is optional, and in the above query we have omitted
 
 Often we need information coming from multiple tables. This can be achieved using the SQL `JOIN` keyword. There are several types of join, including `INNER JOIN`, `LEFT JOIN`, and `RIGHT JOIN`. It is important to understand the difference between these joins because their usage can significantly impact query results. Detailed guidance on joins is widely available on the web.
 
-![SQL joins. Adapted from an image by Arbeck on Wikipedia: https://commons.wikimedia.org/wiki/File:SQL_Joins.svg](./sql-joins.png)
+![SQL joins. Image by Arbeck on Wikimedia Commons (CC BY 3.0): https://commons.wikimedia.org/wiki/File:SQL_Joins.svg](https://upload.wikimedia.org/wikipedia/commons/9/9d/SQL_Joins.svg)
 
 Using the `INNER JOIN` keyword, let’s select a list of patients from the *patients* table along with dates of birth, and join to the *admissions* table to get the admission time for each hospital admission. We use the `INNER JOIN` to indicate that two or more tables should be combined based on a common attribute, which in our case is `subject_id`:
 
diff --git a/mimic-iv-cxr/txt/README.md b/mimic-iv-cxr/txt/README.md
index 8e5ac7cc8..7a03df1b9 100644
--- a/mimic-iv-cxr/txt/README.md
+++ b/mimic-iv-cxr/txt/README.md
@@ -16,7 +16,7 @@ The script can be run (from this folder) as follows:
 
 `python create_section_files.py --reports_path /db/mimic-cxr/files --output_path /db/mimic-cxr/mimic-cxr-sections`
 
-... where you should replace `/db/mimic-cxr/mimic-cxr-reports/files` with the location of your MIMIC-CXR files folder.
+... where you should replace `/db/mimic-cxr/files` with the location of your MIMIC-CXR files folder.
 
 ## CheXpert
 
@@ -24,4 +24,4 @@ Instructions for generating CheXpert annotations from the reports are available
 
 ## NegBio
 
-Instructions for generating CheXpert annotations from the reports are available [in the negbio subfolder](/mimic-iv-cxr/txt/negbio).
\ No newline at end of file
+Instructions for generating NegBio annotations from the reports are available [in the negbio subfolder](/mimic-iv-cxr/txt/negbio).
\ No newline at end of file
diff --git a/mimic-iv-cxr/txt/chexpert/README.md b/mimic-iv-cxr/txt/chexpert/README.md
index fcc6ff80e..e9c345967 100644
--- a/mimic-iv-cxr/txt/chexpert/README.md
+++ b/mimic-iv-cxr/txt/chexpert/README.md
@@ -5,7 +5,7 @@ This folder provides code and instructions for running the CheXpert NLP tool on
 ## Requirements
 
 1. Sectioned report CSVs using the create_section_files.py script. See the [txt folder](/mimic-iv-cxr/txt/) for details.
-    * From this, note the path containing the CSVs, e.g. `/data/mimic-cxr/sections`. This folder should have 22 files, with filenames `mimic_cxr_000.csv`, `mimic_cxr_001.csv`, ...
+    * From this, note the path containing the CSVs, e.g. `/data/mimic-cxr/sections`. This folder should have 22 files, with filenames `mimic_cxr_00.csv`, `mimic_cxr_01.csv`, ...
 2. We use the `conda` manager to create a virtual environment to run the code in. To use `conda`, you will need to install [Miniconda](https://docs.conda.io/en/latest/miniconda.html) or [Anaconda](https://www.anaconda.com/) (Miniconda is a light-weight alternative of Anaconda).
 
 # Running CheXpert
@@ -29,10 +29,18 @@ Open up a terminal in this folder.
 `cd chexpert-labeler; git checkout 2f29daf2a7af97f494bc134e74600c05a7a5f987; cd ..`
 
 5. Run the bash script which calls CheXpert
-  * The first argument should be the location of the MIMIC-CXR sectioned files, output by `section_parser.py`
+  * The first argument should be the location of the MIMIC-CXR sectioned files, output by `create_section_files.py`
   * The second argument should be the location of the cloned chexpert repo
 
 `sh run_chexpert_on_files.sh /db/mimic-cxr/mimic-cxr-sections chexpert-labeler`
 
-6. Aggregate the labels together into a single file
+6. Aggregate the labels together into a single file. The script outputs one `mimic_cxr_XX_labeled.csv` file per input CSV in the current directory; these can be concatenated, e.g. with pandas:
+
+```python
+import glob
+import pandas as pd
+
+df = pd.concat(pd.read_csv(fn) for fn in sorted(glob.glob('mimic_cxr_*_labeled.csv')))
+df.to_csv('mimic-cxr-chexpert.csv', index=False)
+```
 
diff --git a/mimic-iv-cxr/txt/negbio/README.md b/mimic-iv-cxr/txt/negbio/README.md
index 74e624291..d464fd6cc 100644
--- a/mimic-iv-cxr/txt/negbio/README.md
+++ b/mimic-iv-cxr/txt/negbio/README.md
@@ -5,7 +5,7 @@ This folder provides code and instructions for running the NegBio NLP tool on MI
 ## Requirements
 
 1. Sectioned report CSVs using the create_section_files.py script. See the [txt folder](/mimic-iv-cxr/txt/) for details.
-    * From this, note the path containing the CSVs, e.g. `/data/mimic-cxr/sections`. This folder should have 22 files, with filenames `mimic_cxr_000.csv`, `mimic_cxr_001.csv`, ...
+    * From this, note the path containing the CSVs, e.g. `/data/mimic-cxr/sections`. This folder should have 22 files, with filenames `mimic_cxr_00.csv`, `mimic_cxr_01.csv`, ...
 2. We use the `conda` manager to create a virtual environment to run the code in. To use `conda`, you will need to install [Miniconda](https://docs.conda.io/en/latest/miniconda.html) or [Anaconda](https://www.anaconda.com/) (Miniconda is a light-weight alternative of Anaconda).
 
 ## Installation
@@ -32,5 +32,5 @@ Open up a terminal in this folder.
 **Warning: running this on all of MIMIC-CXR will generate ~15 GB of space on your hard drive**.
 
 ```
-bash run_negbio_on_files.sh /db/mimic-cxr/sections negbio-mimic-cxr
+bash run_negbio.sh /db/mimic-cxr/sections negbio-mimic-cxr
 ```
\ No newline at end of file
diff --git a/mimic-iv-ed/README.md b/mimic-iv-ed/README.md
index de7b8fcea..7e4df08a3 100644
--- a/mimic-iv-ed/README.md
+++ b/mimic-iv-ed/README.md
@@ -1,3 +1,3 @@
 # MIMIC-IV-ED
 
-MIMIC-IV-ED is a publicly available database of emergency department visit data. You can read more about the dataset on [the PhysioNet project page](https://mimic.mit.edu/iv/modules/ed/).
\ No newline at end of file
+MIMIC-IV-ED is a publicly available database of emergency department visit data. You can read more about the dataset on [the PhysioNet project page](https://mimic.mit.edu/docs/iv/modules/ed/).
\ No newline at end of file
diff --git a/mimic-iv-ed/buildmimic/duckdb/import_duckdb.sh b/mimic-iv-ed/buildmimic/duckdb/import_duckdb.sh
index 9142f7b40..88cf287b5 100644
--- a/mimic-iv-ed/buildmimic/duckdb/import_duckdb.sh
+++ b/mimic-iv-ed/buildmimic/duckdb/import_duckdb.sh
@@ -29,7 +29,7 @@ usage () {
     die "
 USAGE: ./import_duckdb.sh mimic_data_dir [output_db]
 WHERE:
-    mimic_data_dir        directory that contains csv.tar.gz or csv files
+    mimic_data_dir        directory that contains csv.gz or csv files
     output_db: optional   filename for duckdb file (default: mimic4_ed.db)\
 "
 }
diff --git a/mimic-iv-ed/buildmimic/postgres/README.md b/mimic-iv-ed/buildmimic/postgres/README.md
index 297f72fe5..62eb5a969 100644
--- a/mimic-iv-ed/buildmimic/postgres/README.md
+++ b/mimic-iv-ed/buildmimic/postgres/README.md
@@ -11,11 +11,11 @@ git clone https://github.com/MIT-LCP/mimic-code.git
 cd mimic-code
 # download data
 wget -r -N -c -np --user  --ask-password https://physionet.org/files/mimic-iv-ed/2.2/
-mv physionet.org/files/mimiciv-iv-ed mimiciv && rmdir physionet.org/files && rm physionet.org/robots.txt && rmdir physionet.org
+mv physionet.org/files/mimic-iv-ed mimiciv && rmdir physionet.org/files && rm physionet.org/robots.txt && rmdir physionet.org
 # if mimiciv not exists
 # createdb mimiciv
 psql -d mimiciv -f mimic-iv-ed/buildmimic/postgres/create.sql
-psql -d mimiciv -v ON_ERROR_STOP=1 -v mimic_data_dir=mimiciv/2.2/ed -f load_gz.sql
+psql -d mimiciv -v ON_ERROR_STOP=1 -v mimic_data_dir=mimiciv/2.2/ed -f mimic-iv-ed/buildmimic/postgres/load_gz.sql
 ```
 
 
@@ -46,7 +46,7 @@ psql -d mimic -v ON_ERROR_STOP=1 -v mimic_data_dir=
 If you encounter following error:
 
 ```bash
-psql "dbname=mimic user=postgres options=--search_path=mimic_ed" -v ON_ERROR_STOP=1 -f create.sql
+psql "dbname=mimic user=postgres options=--search_path=mimiciv_ed" -v ON_ERROR_STOP=1 -f create.sql
 psql: FATAL:  Peer authentication failed for user "postgres"
 ```
 
diff --git a/mimic-iv-note/buildmimic/duckdb/import_duckdb.sh b/mimic-iv-note/buildmimic/duckdb/import_duckdb.sh
index c0425fe6f..b194212fb 100644
--- a/mimic-iv-note/buildmimic/duckdb/import_duckdb.sh
+++ b/mimic-iv-note/buildmimic/duckdb/import_duckdb.sh
@@ -29,7 +29,7 @@ usage () {
     die "
 USAGE: ./import_duckdb.sh mimic_data_dir [output_db]
 WHERE:
-    mimic_data_dir        directory that contains csv.tar.gz or csv files
+    mimic_data_dir        directory that contains csv.gz or csv files
     output_db: optional   filename for duckdb file (default: mimic4_note.db)\
 "
 }
diff --git a/mimic-iv-note/buildmimic/postgres/load.sql b/mimic-iv-note/buildmimic/postgres/load.sql
index 38a79a82b..8c0f26d8b 100644
--- a/mimic-iv-note/buildmimic/postgres/load.sql
+++ b/mimic-iv-note/buildmimic/postgres/load.sql
@@ -6,7 +6,7 @@
 --  psql "dbname= user=" -v mimic_data_dir= -f load_gz.sql
 \cd :mimic_data_dir
 
--- making sure that all tables are emtpy and correct encoding is defined -utf8- 
+-- making sure that all tables are empty and correct encoding is defined -utf8- 
 SET CLIENT_ENCODING TO 'utf8';
 
 \COPY mimiciv_note.discharge FROM 'discharge.csv' DELIMITER ',' CSV HEADER NULL '';
diff --git a/mimic-iv-note/buildmimic/postgres/load_7z.sql b/mimic-iv-note/buildmimic/postgres/load_7z.sql
index 57c4dee65..0263e7ba4 100644
--- a/mimic-iv-note/buildmimic/postgres/load_7z.sql
+++ b/mimic-iv-note/buildmimic/postgres/load_7z.sql
@@ -6,7 +6,7 @@
 --  psql "dbname= user=" -v mimic_data_dir= -f load_gz.sql
 \cd :mimic_data_dir
 
--- making sure that all tables are emtpy and correct encoding is defined -utf8- 
+-- making sure that all tables are empty and correct encoding is defined -utf8- 
 SET CLIENT_ENCODING TO 'utf8';
 
 \COPY mimiciv_note.discharge FROM PROGRAM '7z e -so discharge.csv.gz' DELIMITER ',' CSV HEADER NULL '';
diff --git a/mimic-iv-note/buildmimic/postgres/load_gz.sql b/mimic-iv-note/buildmimic/postgres/load_gz.sql
index bbe9ba64b..ff8c97272 100644
--- a/mimic-iv-note/buildmimic/postgres/load_gz.sql
+++ b/mimic-iv-note/buildmimic/postgres/load_gz.sql
@@ -6,7 +6,7 @@
 --  psql "dbname= user=" -v mimic_data_dir= -f load_gz.sql
 \cd :mimic_data_dir
 
--- making sure that all tables are emtpy and correct encoding is defined -utf8- 
+-- making sure that all tables are empty and correct encoding is defined -utf8- 
 SET CLIENT_ENCODING TO 'utf8';
 
 \COPY mimiciv_note.discharge FROM PROGRAM 'gzip -dc discharge.csv.gz' DELIMITER ',' CSV HEADER NULL '';
diff --git a/mimic-iv/README.md b/mimic-iv/README.md
index 55b1af87c..919b196cc 100644
--- a/mimic-iv/README.md
+++ b/mimic-iv/README.md
@@ -12,9 +12,9 @@
 The [MIMIC-IV concepts](/mimic-iv/concepts) are written in an SQL syntax compatible with BigQuery.
 The BigQuery [physionet-data.mimiciv_derived](https://console.cloud.google.com/bigquery?ws=!1m4!1m3!3m2!1sphysionet-data!2smimiciv_derived) dataset contains the output of the SQL scripts present in the concepts folder.  These tables are generated using the code in the [latest release on GitHub](https://github.com/MIT-LCP/mimic-code/releases). Access to this dataset is available to MIMIC-IV approved users: see the [cloud instructions](https://mimic.mit.edu/docs/gettingstarted/cloud/).
 
-* [List of the concept folders and their content](#concept-index)
-* [Generating the concept tables on BigQuery](#generating-the-concepts-on-bigquery)
-* [Generating the concept tables on PostgreSQL](#generating-the-concepts-on-postgresql)
+* [List of the concept folders and their content](/mimic-iv/concepts/README.md#concept-index)
+* [Generating the concept tables on BigQuery](#bigquery)
+* [Generating the concept tables on PostgreSQL](#postgresql)
 
 ## Generating the concepts
 
diff --git a/mimic-iv/buildmimic/bigquery/README.md b/mimic-iv/buildmimic/bigquery/README.md
index b3da2a379..801f0b52b 100644
--- a/mimic-iv/buildmimic/bigquery/README.md
+++ b/mimic-iv/buildmimic/bigquery/README.md
@@ -211,10 +211,6 @@ OK....labevents
 Waiting on bqjob_r6a896e170257f60e_00000177f4b97a15_1 ... (65s) Current status: DONE   
 OK....microbiologyevents
 Waiting on bqjob_r1a722205e1dad7a9_00000177f4ba8456_1 ... (108s) Current status: DONE   
-OK....note
-Waiting on bqjob_r1c4ba80cb44c271d_00000177f4bc3685_1 ... (0s) Current status: DONE   
-OK....note_detail
-Waiting on bqjob_rf7b708a80accdd7_00000177f4bc402f_1 ... (224s) Current status: DONE   
 OK....pharmacy
 Waiting on bqjob_r624a5dcfb4d949ab_00000177f4bfb5f9_1 ... (254s) Current status: DONE   
 OK....poe
diff --git a/mimic-iv/buildmimic/duckdb/import_duckdb.sh b/mimic-iv/buildmimic/duckdb/import_duckdb.sh
index ab1d37fa3..8e72733c3 100755
--- a/mimic-iv/buildmimic/duckdb/import_duckdb.sh
+++ b/mimic-iv/buildmimic/duckdb/import_duckdb.sh
@@ -29,7 +29,7 @@ usage () {
     die "
 USAGE: ./import_duckdb.sh mimic_data_dir [output_db]
 WHERE:
-    mimic_data_dir        directory that contains csv.tar.gz or csv files
+    mimic_data_dir        directory that contains csv.gz or csv files
     output_db: optional   filename for duckdb file (default: mimic4.db)\
 "
 }
diff --git a/mimic-iv/buildmimic/postgres/README.md b/mimic-iv/buildmimic/postgres/README.md
index 78adb239b..5ab28c2c4 100644
--- a/mimic-iv/buildmimic/postgres/README.md
+++ b/mimic-iv/buildmimic/postgres/README.md
@@ -4,7 +4,7 @@ The scripts in this folder create the schema for MIMIC-IV and load the data into
 If you are having trouble, take a look at the common issues in the FAQ at the bottom of this page.