diff --git a/.github/workflows/test_Ch02.yml b/.github/workflows/test_Ch02.yml deleted file mode 100644 index dfcce44..0000000 --- a/.github/workflows/test_Ch02.yml +++ /dev/null @@ -1,40 +0,0 @@ -# This is a basic workflow to help you get started with Actions - -name: Building Ch02 notebook - -# Controls when the workflow will run -on: - workflow_dispatch: - environment: - description: 'Environment to run tests against' - type: environment - required: true - -# A workflow run is made up of one or more jobs that can run sequentially or in parallel -jobs: - # This workflow contains a single job called "build" - build: - # The type of runner that the job will run on - runs-on: ubuntu-latest - - # Steps represent a sequence of tasks that will be executed as part of the job - steps: - # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - - uses: actions/checkout@v3 - - uses: actions/setup-python@v2 - with: - python-version: '3.10' - cache: 'pip' - - # Install - - name: Install dependencies - run: | - pip install -r requirements.txt - pip install ISLP jupyter - - # Runs a set of commands using the runners shell - - name: Build notebook for Ch02 (some errors, not really a test) - run: | - jupyter nbconvert --execute --inplace Ch02-statlearn-lab.ipynb --allow-errors - - diff --git a/.github/workflows/test_Ch03.yml b/.github/workflows/test_Ch03.yml deleted file mode 100644 index d4022ce..0000000 --- a/.github/workflows/test_Ch03.yml +++ /dev/null @@ -1,40 +0,0 @@ -# This is a basic workflow to help you get started with Actions - -name: Building Ch03 notebook - -# Controls when the workflow will run -on: - workflow_dispatch: - environment: - description: 'Environment to run tests against' - type: environment - required: true - -# A workflow run is made up of one or more jobs that can run sequentially or in parallel -jobs: - # This workflow contains a single job called "build" - build: - # The type of runner that the job will run on - runs-on: ubuntu-latest - - # Steps represent a sequence of tasks that will be executed as part of the job - steps: - # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - - uses: actions/checkout@v3 - - uses: actions/setup-python@v2 - with: - python-version: '3.10' - cache: 'pip' - - # Install - - name: Install dependencies - run: | - pip install -r requirements.txt - pip install ISLP jupyter - - # Runs a set of commands using the runners shell - - name: Build notebook for Ch03 (some errors, not really a test) - run: | - jupyter nbconvert --execute --inplace Ch03*ipynb - - diff --git a/.github/workflows/test_Ch04.yml b/.github/workflows/test_Ch04.yml deleted file mode 100644 index b148d82..0000000 --- a/.github/workflows/test_Ch04.yml +++ /dev/null @@ -1,40 +0,0 @@ -# This is a basic workflow to help you get started with Actions - -name: Building Ch04 notebook - -# Controls when the workflow will run -on: - workflow_dispatch: - environment: - description: 'Environment to run tests against' - type: environment - required: true - -# A workflow run is made up of one or more jobs that can run sequentially or in parallel -jobs: - # This workflow contains a single job called "build" - build: - # The type of runner that the job will run on - runs-on: ubuntu-latest - - # Steps represent a sequence of tasks that will be executed as part of the job - steps: - # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - - uses: actions/checkout@v3 - - uses: actions/setup-python@v2 - with: - python-version: '3.10' - cache: 'pip' - - # Install - - name: Install dependencies - run: | - pip install -r requirements.txt - pip install ISLP jupyter - - # Runs a set of commands using the runners shell - - name: Build notebook for Ch04 (some errors, not really a test) - run: | - jupyter nbconvert --execute --inplace Ch04*ipynb - - diff --git a/.github/workflows/test_Ch05.yml b/.github/workflows/test_Ch05.yml deleted file mode 100644 index 2b01551..0000000 --- a/.github/workflows/test_Ch05.yml +++ /dev/null @@ -1,40 +0,0 @@ -# This is a basic workflow to help you get started with Actions - -name: Building Ch05 notebook - -# Controls when the workflow will run -on: - workflow_dispatch: - environment: - description: 'Environment to run tests against' - type: environment - required: true - -# A workflow run is made up of one or more jobs that can run sequentially or in parallel -jobs: - # This workflow contains a single job called "build" - build: - # The type of runner that the job will run on - runs-on: ubuntu-latest - - # Steps represent a sequence of tasks that will be executed as part of the job - steps: - # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - - uses: actions/checkout@v3 - - uses: actions/setup-python@v2 - with: - python-version: '3.10' - cache: 'pip' - - # Install - - name: Install dependencies - run: | - pip install -r requirements.txt - pip install ISLP jupyter - - # Runs a set of commands using the runners shell - - name: Build notebook for Ch05 (some errors, not really a test) - run: | - jupyter nbconvert --execute --inplace Ch05*ipynb - - diff --git a/.github/workflows/test_Ch06.yml b/.github/workflows/test_Ch06.yml deleted file mode 100644 index 3ed430c..0000000 --- a/.github/workflows/test_Ch06.yml +++ /dev/null @@ -1,40 +0,0 @@ -# This is a basic workflow to help you get started with Actions - -name: Building Ch06 notebook - -# Controls when the workflow will run -on: - workflow_dispatch: - environment: - description: 'Environment to run tests against' - type: environment - required: true - -# A workflow run is made up of one or more jobs that can run sequentially or in parallel -jobs: - # This workflow contains a single job called "build" - build: - # The type of runner that the job will run on - runs-on: ubuntu-latest - - # Steps represent a sequence of tasks that will be executed as part of the job - steps: - # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - - uses: actions/checkout@v3 - - uses: actions/setup-python@v2 - with: - python-version: '3.10' - cache: 'pip' - - # Install - - name: Install dependencies - run: | - pip install -r requirements.txt - pip install ISLP jupyter - - # Runs a set of commands using the runners shell - - name: Build notebook for Ch06 (some errors, not really a test) - run: | - jupyter nbconvert --execute --inplace Ch06*ipynb - - diff --git a/.github/workflows/test_Ch07.yml b/.github/workflows/test_Ch07.yml deleted file mode 100644 index d87d848..0000000 --- a/.github/workflows/test_Ch07.yml +++ /dev/null @@ -1,40 +0,0 @@ -# This is a basic workflow to help you get started with Actions - -name: Building Ch07 notebook - -# Controls when the workflow will run -on: - workflow_dispatch: - environment: - description: 'Environment to run tests against' - type: environment - required: true - -# A workflow run is made up of one or more jobs that can run sequentially or in parallel -jobs: - # This workflow contains a single job called "build" - build: - # The type of runner that the job will run on - runs-on: ubuntu-latest - - # Steps represent a sequence of tasks that will be executed as part of the job - steps: - # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - - uses: actions/checkout@v3 - - uses: actions/setup-python@v2 - with: - python-version: '3.10' - cache: 'pip' - - # Install - - name: Install dependencies - run: | - pip install -r requirements.txt - pip install ISLP jupyter - - # Runs a set of commands using the runners shell - - name: Build notebook for Ch07 (some errors, not really a test) - run: | - jupyter nbconvert --execute --inplace Ch07*ipynb - - diff --git a/.github/workflows/test_Ch08.yml b/.github/workflows/test_Ch08.yml deleted file mode 100644 index 2b7e77b..0000000 --- a/.github/workflows/test_Ch08.yml +++ /dev/null @@ -1,40 +0,0 @@ -# This is a basic workflow to help you get started with Actions - -name: Building Ch08 notebook - -# Controls when the workflow will run -on: - workflow_dispatch: - environment: - description: 'Environment to run tests against' - type: environment - required: true - -# A workflow run is made up of one or more jobs that can run sequentially or in parallel -jobs: - # This workflow contains a single job called "build" - build: - # The type of runner that the job will run on - runs-on: ubuntu-latest - - # Steps represent a sequence of tasks that will be executed as part of the job - steps: - # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - - uses: actions/checkout@v3 - - uses: actions/setup-python@v2 - with: - python-version: '3.10' - cache: 'pip' - - # Install - - name: Install dependencies - run: | - pip install -r requirements.txt - pip install ISLP jupyter - - # Runs a set of commands using the runners shell - - name: Build notebook for Ch08 (some errors, not really a test) - run: | - jupyter nbconvert --execute --inplace Ch08*ipynb - - diff --git a/.github/workflows/test_Ch09.yml b/.github/workflows/test_Ch09.yml deleted file mode 100644 index e88a6ff..0000000 --- a/.github/workflows/test_Ch09.yml +++ /dev/null @@ -1,40 +0,0 @@ -# This is a basic workflow to help you get started with Actions - -name: Building Ch09 notebook - -# Controls when the workflow will run -on: - workflow_dispatch: - environment: - description: 'Environment to run tests against' - type: environment - required: true - -# A workflow run is made up of one or more jobs that can run sequentially or in parallel -jobs: - # This workflow contains a single job called "build" - build: - # The type of runner that the job will run on - runs-on: ubuntu-latest - - # Steps represent a sequence of tasks that will be executed as part of the job - steps: - # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - - uses: actions/checkout@v3 - - uses: actions/setup-python@v2 - with: - python-version: '3.10' - cache: 'pip' - - # Install - - name: Install dependencies - run: | - pip install -r requirements.txt - pip install ISLP jupyter - - # Runs a set of commands using the runners shell - - name: Build notebook for Ch09 (some errors, not really a test) - run: | - jupyter nbconvert --execute --inplace Ch09*ipynb - - diff --git a/.github/workflows/test_Ch10.yml b/.github/workflows/test_Ch10.yml deleted file mode 100644 index ce97c12..0000000 --- a/.github/workflows/test_Ch10.yml +++ /dev/null @@ -1,40 +0,0 @@ -# This is a basic workflow to help you get started with Actions - -name: Building Ch10 notebook - -# Controls when the workflow will run -on: - workflow_dispatch: - environment: - description: 'Environment to run tests against' - type: environment - required: true - -# A workflow run is made up of one or more jobs that can run sequentially or in parallel -jobs: - # This workflow contains a single job called "build" - build: - # The type of runner that the job will run on - runs-on: ubuntu-latest - - # Steps represent a sequence of tasks that will be executed as part of the job - steps: - # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - - uses: actions/checkout@v3 - - uses: actions/setup-python@v2 - with: - python-version: '3.10' - cache: 'pip' - - # Install - - name: Install dependencies - run: | - pip install -r requirements.txt - pip install ISLP jupyter - - # Runs a set of commands using the runners shell - - name: Build notebook for Ch10 (some errors, not really a test) - run: | - jupyter nbconvert --execute --inplace Ch10*ipynb - - diff --git a/.github/workflows/test_Ch11.yml b/.github/workflows/test_Ch11.yml deleted file mode 100644 index a2a4ee2..0000000 --- a/.github/workflows/test_Ch11.yml +++ /dev/null @@ -1,40 +0,0 @@ -# This is a basic workflow to help you get started with Actions - -name: Building Ch11 notebook - -# Controls when the workflow will run -on: - workflow_dispatch: - environment: - description: 'Environment to run tests against' - type: environment - required: true - -# A workflow run is made up of one or more jobs that can run sequentially or in parallel -jobs: - # This workflow contains a single job called "build" - build: - # The type of runner that the job will run on - runs-on: ubuntu-latest - - # Steps represent a sequence of tasks that will be executed as part of the job - steps: - # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - - uses: actions/checkout@v3 - - uses: actions/setup-python@v2 - with: - python-version: '3.10' - cache: 'pip' - - # Install - - name: Install dependencies - run: | - pip install -r requirements.txt - pip install ISLP jupyter - - # Runs a set of commands using the runners shell - - name: Build notebook for Ch11 (some errors, not really a test) - run: | - jupyter nbconvert --execute --inplace Ch11*ipynb - - diff --git a/.github/workflows/test_Ch12.yml b/.github/workflows/test_Ch12.yml deleted file mode 100644 index f231523..0000000 --- a/.github/workflows/test_Ch12.yml +++ /dev/null @@ -1,40 +0,0 @@ -# This is a basic workflow to help you get started with Actions - -name: Building Ch12 notebook - -# Controls when the workflow will run -on: - workflow_dispatch: - environment: - description: 'Environment to run tests against' - type: environment - required: true - -# A workflow run is made up of one or more jobs that can run sequentially or in parallel -jobs: - # This workflow contains a single job called "build" - build: - # The type of runner that the job will run on - runs-on: ubuntu-latest - - # Steps represent a sequence of tasks that will be executed as part of the job - steps: - # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - - uses: actions/checkout@v3 - - uses: actions/setup-python@v2 - with: - python-version: '3.10' - cache: 'pip' - - # Install - - name: Install dependencies - run: | - pip install -r requirements.txt - pip install ISLP jupyter - - # Runs a set of commands using the runners shell - - name: Build notebook for Ch12 (some errors, not really a test) - run: | - jupyter nbconvert --execute --inplace Ch12*ipynb - - diff --git a/.github/workflows/test_Ch13.yml b/.github/workflows/test_Ch13.yml deleted file mode 100644 index 77ff83d..0000000 --- a/.github/workflows/test_Ch13.yml +++ /dev/null @@ -1,40 +0,0 @@ -# This is a basic workflow to help you get started with Actions - -name: Building Ch13 notebook - -# Controls when the workflow will run -on: - workflow_dispatch: - environment: - description: 'Environment to run tests against' - type: environment - required: true - -# A workflow run is made up of one or more jobs that can run sequentially or in parallel -jobs: - # This workflow contains a single job called "build" - build: - # The type of runner that the job will run on - runs-on: ubuntu-latest - - # Steps represent a sequence of tasks that will be executed as part of the job - steps: - # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - - uses: actions/checkout@v3 - - uses: actions/setup-python@v2 - with: - python-version: '3.10' - cache: 'pip' - - # Install - - name: Install dependencies - run: | - pip install -r requirements.txt - pip install ISLP jupyter - - # Runs a set of commands using the runners shell - - name: Build notebook for Ch13 (some errors, not really a test) - run: | - jupyter nbconvert --execute --inplace Ch13*ipynb - - diff --git a/Ch02-statlearn-lab.ipynb b/Ch02-statlearn-lab.ipynb index a848367..f137f1c 100644 --- a/Ch02-statlearn-lab.ipynb +++ b/Ch02-statlearn-lab.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "4a4000ea", + "id": "245f0c86", "metadata": {}, "source": [ "\n", @@ -14,7 +14,7 @@ }, { "cell_type": "markdown", - "id": "ca503bf1", + "id": "5ab29948", "metadata": {}, "source": [ "## Getting Started" @@ -22,7 +22,7 @@ }, { "cell_type": "markdown", - "id": "4d90d49a", + "id": "ed622870", "metadata": {}, "source": [ "To run the labs in this book, you will need two things:\n", @@ -33,7 +33,7 @@ }, { "cell_type": "markdown", - "id": "c05e9a74", + "id": "844d37fc", "metadata": {}, "source": [ "You can download and install `Python3` by following the instructions available at [anaconda.com](http://anaconda.com). " @@ -41,7 +41,7 @@ }, { "cell_type": "markdown", - "id": "a4fa6a12", + "id": "462ff1fe", "metadata": {}, "source": [ " There are a number of ways to get access to `Jupyter`. Here are just a few:\n", @@ -63,7 +63,7 @@ }, { "cell_type": "markdown", - "id": "fb245ea1", + "id": "b46f9182", "metadata": {}, "source": [ "## Basic Commands\n" @@ -71,7 +71,7 @@ }, { "cell_type": "markdown", - "id": "df72fe8e", + "id": "54060fd9", "metadata": {}, "source": [ "In this lab, we will introduce some simple `Python` commands. \n", @@ -83,7 +83,7 @@ }, { "cell_type": "markdown", - "id": "713233e6", + "id": "d3dbd0e9", "metadata": {}, "source": [ "Like most programming languages, `Python` uses *functions*\n", @@ -99,13 +99,13 @@ { "cell_type": "code", "execution_count": 1, - "id": "3e6aae64", + "id": "9e8aa21f", "metadata": { "execution": { - "iopub.execute_input": "2023-08-15T18:48:57.279506Z", - "iopub.status.busy": "2023-08-15T18:48:57.279285Z", - "iopub.status.idle": "2023-08-15T18:48:57.289471Z", - "shell.execute_reply": "2023-08-15T18:48:57.289054Z" + "iopub.execute_input": "2023-08-21T03:36:04.654555Z", + "iopub.status.busy": "2023-08-21T03:36:04.654242Z", + "iopub.status.idle": "2023-08-21T03:36:04.664431Z", + "shell.execute_reply": "2023-08-21T03:36:04.663990Z" } }, "outputs": [ @@ -123,7 +123,7 @@ }, { "cell_type": "markdown", - "id": "790e89ef", + "id": "27d935f8", "metadata": {}, "source": [ " The following command will provide information about the `print()` function." @@ -132,13 +132,13 @@ { "cell_type": "code", "execution_count": 2, - "id": "086066fd", + "id": "d62ec119", "metadata": { "execution": { - "iopub.execute_input": "2023-08-15T18:48:57.292564Z", - "iopub.status.busy": "2023-08-15T18:48:57.292381Z", - "iopub.status.idle": "2023-08-15T18:48:57.319543Z", - "shell.execute_reply": "2023-08-15T18:48:57.319262Z" + "iopub.execute_input": "2023-08-21T03:36:04.666908Z", + "iopub.status.busy": "2023-08-21T03:36:04.666727Z", + "iopub.status.idle": "2023-08-21T03:36:04.693658Z", + "shell.execute_reply": "2023-08-21T03:36:04.693389Z" } }, "outputs": [], @@ -148,7 +148,7 @@ }, { "cell_type": "markdown", - "id": "1519b474", + "id": "04b3e2a3", "metadata": {}, "source": [ "Adding two integers in `Python` is pretty intuitive." @@ -157,13 +157,13 @@ { "cell_type": "code", "execution_count": 3, - "id": "cb86e827", + "id": "c64e9f4d", "metadata": { "execution": { - "iopub.execute_input": "2023-08-15T18:48:57.321132Z", - "iopub.status.busy": "2023-08-15T18:48:57.321031Z", - "iopub.status.idle": "2023-08-15T18:48:57.324040Z", - "shell.execute_reply": "2023-08-15T18:48:57.323786Z" + "iopub.execute_input": "2023-08-21T03:36:04.695168Z", + "iopub.status.busy": "2023-08-21T03:36:04.695071Z", + "iopub.status.idle": "2023-08-21T03:36:04.697996Z", + "shell.execute_reply": "2023-08-21T03:36:04.697736Z" } }, "outputs": [ @@ -184,7 +184,7 @@ }, { "cell_type": "markdown", - "id": "995ac4a8", + "id": "cd754cba", "metadata": {}, "source": [ "In `Python`, textual data is handled using\n", @@ -197,13 +197,13 @@ { "cell_type": "code", "execution_count": 4, - "id": "f4d45d80", + "id": "9abccc1f", "metadata": { "execution": { - "iopub.execute_input": "2023-08-15T18:48:57.325425Z", - "iopub.status.busy": "2023-08-15T18:48:57.325349Z", - "iopub.status.idle": "2023-08-15T18:48:57.327462Z", - "shell.execute_reply": "2023-08-15T18:48:57.327221Z" + "iopub.execute_input": "2023-08-21T03:36:04.699502Z", + "iopub.status.busy": "2023-08-21T03:36:04.699420Z", + "iopub.status.idle": "2023-08-21T03:36:04.701419Z", + "shell.execute_reply": "2023-08-21T03:36:04.701183Z" } }, "outputs": [ @@ -224,7 +224,7 @@ }, { "cell_type": "markdown", - "id": "54a86535", + "id": "c28db903", "metadata": {}, "source": [ " A string is actually a type of *sequence*: this is a generic term for an ordered list. \n", @@ -234,7 +234,7 @@ }, { "cell_type": "markdown", - "id": "f2cd64af", + "id": "5fdcc5a1", "metadata": {}, "source": [ "The following command instructs `Python` to join together\n", @@ -246,13 +246,13 @@ { "cell_type": "code", "execution_count": 5, - "id": "e386aff9", + "id": "802ca33c", "metadata": { "execution": { - "iopub.execute_input": "2023-08-15T18:48:57.328950Z", - "iopub.status.busy": "2023-08-15T18:48:57.328870Z", - "iopub.status.idle": "2023-08-15T18:48:57.331048Z", - "shell.execute_reply": "2023-08-15T18:48:57.330802Z" + "iopub.execute_input": "2023-08-21T03:36:04.702877Z", + "iopub.status.busy": "2023-08-21T03:36:04.702786Z", + "iopub.status.idle": "2023-08-21T03:36:04.704849Z", + "shell.execute_reply": "2023-08-21T03:36:04.704596Z" } }, "outputs": [ @@ -274,7 +274,7 @@ }, { "cell_type": "markdown", - "id": "185fdcfa", + "id": "5492ecd1", "metadata": {}, "source": [ "Note that we used the brackets\n", @@ -287,13 +287,13 @@ { "cell_type": "code", "execution_count": 6, - "id": "f81b1212", + "id": "a8c72744", "metadata": { "execution": { - "iopub.execute_input": "2023-08-15T18:48:57.332609Z", - "iopub.status.busy": "2023-08-15T18:48:57.332515Z", - "iopub.status.idle": "2023-08-15T18:48:57.334649Z", - "shell.execute_reply": "2023-08-15T18:48:57.334387Z" + "iopub.execute_input": "2023-08-21T03:36:04.706312Z", + "iopub.status.busy": "2023-08-21T03:36:04.706207Z", + "iopub.status.idle": "2023-08-21T03:36:04.708359Z", + "shell.execute_reply": "2023-08-21T03:36:04.708116Z" } }, "outputs": [ @@ -315,7 +315,7 @@ }, { "cell_type": "markdown", - "id": "f421a679", + "id": "8f42ea1d", "metadata": {}, "source": [ "The result may appear slightly counterintuitive: why did `Python` not add the entries of the lists\n", @@ -327,7 +327,7 @@ }, { "cell_type": "markdown", - "id": "911db9e2", + "id": "69015df5", "metadata": {}, "source": [ "This example reflects the fact that \n", @@ -340,7 +340,7 @@ }, { "cell_type": "markdown", - "id": "2045f04d", + "id": "16bfc4a2", "metadata": {}, "source": [ "## Introduction to Numerical Python\n", @@ -352,7 +352,7 @@ }, { "cell_type": "markdown", - "id": "b4ef08ea", + "id": "f5bed3f0", "metadata": {}, "source": [ " To access `numpy`, we must first `import` it." @@ -361,13 +361,13 @@ { "cell_type": "code", "execution_count": 7, - "id": "13739a14", + "id": "f1c7d1db", "metadata": { "execution": { - "iopub.execute_input": "2023-08-15T18:48:57.336173Z", - "iopub.status.busy": "2023-08-15T18:48:57.336085Z", - "iopub.status.idle": "2023-08-15T18:48:57.487183Z", - "shell.execute_reply": "2023-08-15T18:48:57.486459Z" + "iopub.execute_input": "2023-08-21T03:36:04.709873Z", + "iopub.status.busy": "2023-08-21T03:36:04.709781Z", + "iopub.status.idle": "2023-08-21T03:36:04.767425Z", + "shell.execute_reply": "2023-08-21T03:36:04.766663Z" }, "lines_to_next_cell": 0 }, @@ -378,7 +378,7 @@ }, { "cell_type": "markdown", - "id": "587207d9", + "id": "5c8614e7", "metadata": {}, "source": [ "In the previous line, we named the `numpy` *module* `np`; an abbreviation for easier referencing." @@ -386,7 +386,7 @@ }, { "cell_type": "markdown", - "id": "c485aeb9", + "id": "ba1224a6", "metadata": {}, "source": [ "In `numpy`, an *array* is a generic term for a multidimensional\n", @@ -397,13 +397,13 @@ { "cell_type": "code", "execution_count": 8, - "id": "f3f62d0a", + "id": "e2ea2bfd", "metadata": { "execution": { - "iopub.execute_input": "2023-08-15T18:48:57.492222Z", - "iopub.status.busy": "2023-08-15T18:48:57.491645Z", - "iopub.status.idle": "2023-08-15T18:48:57.497340Z", - "shell.execute_reply": "2023-08-15T18:48:57.496428Z" + "iopub.execute_input": "2023-08-21T03:36:04.772015Z", + "iopub.status.busy": "2023-08-21T03:36:04.771631Z", + "iopub.status.idle": "2023-08-21T03:36:04.777911Z", + "shell.execute_reply": "2023-08-21T03:36:04.777302Z" }, "lines_to_next_cell": 0 }, @@ -415,7 +415,7 @@ }, { "cell_type": "markdown", - "id": "d5e7e5e3", + "id": "a977e05a", "metadata": {}, "source": [ "Note that if you forgot to run the `import numpy as np` command earlier, then\n", @@ -426,7 +426,7 @@ }, { "cell_type": "markdown", - "id": "5ba313c6", + "id": "742431b6", "metadata": {}, "source": [ "Since `x` and `y` have been defined using `np.array()`, we get a sensible result when we add them together. Compare this to our results in the previous section,\n", @@ -436,13 +436,13 @@ { "cell_type": "code", "execution_count": 9, - "id": "3cff111f", + "id": "59fbf9fd", "metadata": { "execution": { - "iopub.execute_input": "2023-08-15T18:48:57.501566Z", - "iopub.status.busy": "2023-08-15T18:48:57.501206Z", - "iopub.status.idle": "2023-08-15T18:48:57.515553Z", - "shell.execute_reply": "2023-08-15T18:48:57.514659Z" + "iopub.execute_input": "2023-08-21T03:36:04.781791Z", + "iopub.status.busy": "2023-08-21T03:36:04.781430Z", + "iopub.status.idle": "2023-08-21T03:36:04.788256Z", + "shell.execute_reply": "2023-08-21T03:36:04.787586Z" }, "lines_to_next_cell": 0 }, @@ -464,7 +464,7 @@ }, { "cell_type": "markdown", - "id": "96db430f", + "id": "2ceccc2b", "metadata": {}, "source": [ " \n", @@ -473,7 +473,7 @@ }, { "cell_type": "markdown", - "id": "801647e7", + "id": "74be6d74", "metadata": {}, "source": [ "In `numpy`, matrices are typically represented as two-dimensional arrays, and vectors as one-dimensional arrays. {While it is also possible to create matrices using `np.matrix()`, we will use `np.array()` throughout the labs in this book.}\n", @@ -483,13 +483,13 @@ { "cell_type": "code", "execution_count": 10, - "id": "30d6c7f8", + "id": "2279437e", "metadata": { "execution": { - "iopub.execute_input": "2023-08-15T18:48:57.520927Z", - "iopub.status.busy": "2023-08-15T18:48:57.520636Z", - "iopub.status.idle": "2023-08-15T18:48:57.528716Z", - "shell.execute_reply": "2023-08-15T18:48:57.528048Z" + "iopub.execute_input": "2023-08-21T03:36:04.792995Z", + "iopub.status.busy": "2023-08-21T03:36:04.792549Z", + "iopub.status.idle": "2023-08-21T03:36:04.800387Z", + "shell.execute_reply": "2023-08-21T03:36:04.799738Z" }, "lines_to_next_cell": 0 }, @@ -513,7 +513,7 @@ }, { "cell_type": "markdown", - "id": "5df2b6c3", + "id": "f96f304d", "metadata": {}, "source": [ " \n", @@ -522,7 +522,7 @@ }, { "cell_type": "markdown", - "id": "d7804f5e", + "id": "f764f7d1", "metadata": {}, "source": [ "The object `x` has several \n", @@ -534,13 +534,13 @@ { "cell_type": "code", "execution_count": 11, - "id": "42d49be4", + "id": "75bf1b1e", "metadata": { "execution": { - "iopub.execute_input": "2023-08-15T18:48:57.532634Z", - "iopub.status.busy": "2023-08-15T18:48:57.532261Z", - "iopub.status.idle": "2023-08-15T18:48:57.543935Z", - "shell.execute_reply": "2023-08-15T18:48:57.543179Z" + "iopub.execute_input": "2023-08-21T03:36:04.804503Z", + "iopub.status.busy": "2023-08-21T03:36:04.804231Z", + "iopub.status.idle": "2023-08-21T03:36:04.810136Z", + "shell.execute_reply": "2023-08-21T03:36:04.809353Z" } }, "outputs": [ @@ -561,7 +561,7 @@ }, { "cell_type": "markdown", - "id": "765e1496", + "id": "4e3b83bf", "metadata": {}, "source": [ "The output indicates that `x` is a two-dimensional array. \n", @@ -572,13 +572,13 @@ { "cell_type": "code", "execution_count": 12, - "id": "de32b275", + "id": "58292240", "metadata": { "execution": { - "iopub.execute_input": "2023-08-15T18:48:57.549690Z", - "iopub.status.busy": "2023-08-15T18:48:57.549447Z", - "iopub.status.idle": "2023-08-15T18:48:57.554487Z", - "shell.execute_reply": "2023-08-15T18:48:57.553790Z" + "iopub.execute_input": "2023-08-21T03:36:04.813981Z", + "iopub.status.busy": "2023-08-21T03:36:04.813417Z", + "iopub.status.idle": "2023-08-21T03:36:04.819511Z", + "shell.execute_reply": "2023-08-21T03:36:04.818936Z" }, "lines_to_next_cell": 0 }, @@ -600,7 +600,7 @@ }, { "cell_type": "markdown", - "id": "044bf011", + "id": "cf9cf94b", "metadata": {}, "source": [ "Why is `x` comprised of integers? This is because we created `x` by passing in exclusively integers to the `np.array()` function.\n", @@ -612,13 +612,13 @@ { "cell_type": "code", "execution_count": 13, - "id": "528c3fa0", + "id": "fc5fff57", "metadata": { "execution": { - "iopub.execute_input": "2023-08-15T18:48:57.558246Z", - "iopub.status.busy": "2023-08-15T18:48:57.557892Z", - "iopub.status.idle": "2023-08-15T18:48:57.564135Z", - "shell.execute_reply": "2023-08-15T18:48:57.563353Z" + "iopub.execute_input": "2023-08-21T03:36:04.823519Z", + "iopub.status.busy": "2023-08-21T03:36:04.823222Z", + "iopub.status.idle": "2023-08-21T03:36:04.829861Z", + "shell.execute_reply": "2023-08-21T03:36:04.829223Z" }, "lines_to_next_cell": 2 }, @@ -640,7 +640,7 @@ }, { "cell_type": "markdown", - "id": "053da117", + "id": "41a79641", "metadata": {}, "source": [ "Typing `fun?` will cause `Python` to display \n", @@ -651,13 +651,13 @@ { "cell_type": "code", "execution_count": 14, - "id": "fbf8763b", + "id": "762562a6", "metadata": { "execution": { - "iopub.execute_input": "2023-08-15T18:48:57.567429Z", - "iopub.status.busy": "2023-08-15T18:48:57.567214Z", - "iopub.status.idle": "2023-08-15T18:48:57.571774Z", - "shell.execute_reply": "2023-08-15T18:48:57.570942Z" + "iopub.execute_input": "2023-08-21T03:36:04.833747Z", + "iopub.status.busy": "2023-08-21T03:36:04.833468Z", + "iopub.status.idle": "2023-08-21T03:36:04.838421Z", + "shell.execute_reply": "2023-08-21T03:36:04.837747Z" }, "lines_to_next_cell": 0 }, @@ -668,7 +668,7 @@ }, { "cell_type": "markdown", - "id": "0df45f3d", + "id": "d4d82167", "metadata": {}, "source": [ "This documentation indicates that we could create a floating point array by passing a `dtype` argument into `np.array()`." @@ -677,13 +677,13 @@ { "cell_type": "code", "execution_count": 15, - "id": "482d0c05", + "id": "66d2b82a", "metadata": { "execution": { - "iopub.execute_input": "2023-08-15T18:48:57.575374Z", - "iopub.status.busy": "2023-08-15T18:48:57.575055Z", - "iopub.status.idle": "2023-08-15T18:48:57.581818Z", - "shell.execute_reply": "2023-08-15T18:48:57.580921Z" + "iopub.execute_input": "2023-08-21T03:36:04.842127Z", + "iopub.status.busy": "2023-08-21T03:36:04.841891Z", + "iopub.status.idle": "2023-08-21T03:36:04.848885Z", + "shell.execute_reply": "2023-08-21T03:36:04.848125Z" }, "lines_to_next_cell": 2 }, @@ -705,7 +705,7 @@ }, { "cell_type": "markdown", - "id": "757c10a0", + "id": "1e3ba5be", "metadata": {}, "source": [ "The array `x` is two-dimensional. We can find out the number of rows and columns by looking\n", @@ -715,13 +715,13 @@ { "cell_type": "code", "execution_count": 16, - "id": "192cdf26", + "id": "89881402", "metadata": { "execution": { - "iopub.execute_input": "2023-08-15T18:48:57.585609Z", - "iopub.status.busy": "2023-08-15T18:48:57.585283Z", - "iopub.status.idle": "2023-08-15T18:48:57.590942Z", - "shell.execute_reply": "2023-08-15T18:48:57.589913Z" + "iopub.execute_input": "2023-08-21T03:36:04.853039Z", + "iopub.status.busy": "2023-08-21T03:36:04.852643Z", + "iopub.status.idle": "2023-08-21T03:36:04.859072Z", + "shell.execute_reply": "2023-08-21T03:36:04.858149Z" }, "lines_to_next_cell": 2 }, @@ -743,7 +743,7 @@ }, { "cell_type": "markdown", - "id": "b3d091f4", + "id": "2967b644", "metadata": {}, "source": [ "A *method* is a function that is associated with an\n", @@ -758,13 +758,13 @@ { "cell_type": "code", "execution_count": 17, - "id": "4420b967", + "id": "0572d3f6", "metadata": { "execution": { - "iopub.execute_input": "2023-08-15T18:48:57.596192Z", - "iopub.status.busy": "2023-08-15T18:48:57.595890Z", - "iopub.status.idle": "2023-08-15T18:48:57.600791Z", - "shell.execute_reply": "2023-08-15T18:48:57.600018Z" + "iopub.execute_input": "2023-08-21T03:36:04.863011Z", + "iopub.status.busy": "2023-08-21T03:36:04.862610Z", + "iopub.status.idle": "2023-08-21T03:36:04.869722Z", + "shell.execute_reply": "2023-08-21T03:36:04.869078Z" }, "lines_to_next_cell": 0 }, @@ -787,7 +787,7 @@ }, { "cell_type": "markdown", - "id": "ca0ff297", + "id": "e3f49995", "metadata": {}, "source": [ "We could also sum the elements of `x` by passing in `x` as an argument to the `np.sum()` function. " @@ -796,13 +796,13 @@ { "cell_type": "code", "execution_count": 18, - "id": "5af5e20f", + "id": "33b10a6f", "metadata": { "execution": { - "iopub.execute_input": "2023-08-15T18:48:57.605039Z", - "iopub.status.busy": "2023-08-15T18:48:57.604654Z", - "iopub.status.idle": "2023-08-15T18:48:57.611781Z", - "shell.execute_reply": "2023-08-15T18:48:57.609766Z" + "iopub.execute_input": "2023-08-21T03:36:04.874228Z", + "iopub.status.busy": "2023-08-21T03:36:04.873632Z", + "iopub.status.idle": "2023-08-21T03:36:04.879222Z", + "shell.execute_reply": "2023-08-21T03:36:04.878606Z" }, "lines_to_next_cell": 0 }, @@ -825,7 +825,7 @@ }, { "cell_type": "markdown", - "id": "355ad58f", + "id": "2f3dd2c3", "metadata": {}, "source": [ " As another example, the\n", @@ -842,13 +842,13 @@ { "cell_type": "code", "execution_count": 19, - "id": "77a0df31", + "id": "a32716db", "metadata": { "execution": { - "iopub.execute_input": "2023-08-15T18:48:57.615659Z", - "iopub.status.busy": "2023-08-15T18:48:57.615422Z", - "iopub.status.idle": "2023-08-15T18:48:57.619501Z", - "shell.execute_reply": "2023-08-15T18:48:57.619211Z" + "iopub.execute_input": "2023-08-21T03:36:04.882833Z", + "iopub.status.busy": "2023-08-21T03:36:04.882354Z", + "iopub.status.idle": "2023-08-21T03:36:04.887384Z", + "shell.execute_reply": "2023-08-21T03:36:04.886127Z" } }, "outputs": [ @@ -873,7 +873,7 @@ }, { "cell_type": "markdown", - "id": "e68cddfa", + "id": "2483179e", "metadata": {}, "source": [ "The previous output reveals that `numpy` arrays are specified as a sequence\n", @@ -882,7 +882,7 @@ }, { "cell_type": "markdown", - "id": "4b16c07d", + "id": "e256575f", "metadata": {}, "source": [ "`Python` (and hence `numpy`) uses 0-based\n", @@ -893,13 +893,13 @@ { "cell_type": "code", "execution_count": 20, - "id": "c57ce2ca", + "id": "3db6e1cf", "metadata": { "execution": { - "iopub.execute_input": "2023-08-15T18:48:57.622217Z", - "iopub.status.busy": "2023-08-15T18:48:57.622128Z", - "iopub.status.idle": "2023-08-15T18:48:57.624279Z", - "shell.execute_reply": "2023-08-15T18:48:57.624023Z" + "iopub.execute_input": "2023-08-21T03:36:04.890861Z", + "iopub.status.busy": "2023-08-21T03:36:04.890532Z", + "iopub.status.idle": "2023-08-21T03:36:04.894815Z", + "shell.execute_reply": "2023-08-21T03:36:04.894149Z" }, "lines_to_next_cell": 0 }, @@ -921,7 +921,7 @@ }, { "cell_type": "markdown", - "id": "9a4feee5", + "id": "0e10119e", "metadata": {}, "source": [ "Similarly, `x_reshape[1,2]` yields the element in the second row and the third column \n", @@ -931,13 +931,13 @@ { "cell_type": "code", "execution_count": 21, - "id": "ea55b034", + "id": "e15c753f", "metadata": { "execution": { - "iopub.execute_input": "2023-08-15T18:48:57.626107Z", - "iopub.status.busy": "2023-08-15T18:48:57.625991Z", - "iopub.status.idle": "2023-08-15T18:48:57.628267Z", - "shell.execute_reply": "2023-08-15T18:48:57.627959Z" + "iopub.execute_input": "2023-08-21T03:36:04.898049Z", + "iopub.status.busy": "2023-08-21T03:36:04.897796Z", + "iopub.status.idle": "2023-08-21T03:36:04.902137Z", + "shell.execute_reply": "2023-08-21T03:36:04.901538Z" }, "lines_to_next_cell": 0 }, @@ -959,7 +959,7 @@ }, { "cell_type": "markdown", - "id": "7a3c27dd", + "id": "f9c55622", "metadata": {}, "source": [ "Similarly, `x[2]` yields the\n", @@ -972,13 +972,13 @@ { "cell_type": "code", "execution_count": 22, - "id": "b897a965", + "id": "91c6e7d8", "metadata": { "execution": { - "iopub.execute_input": "2023-08-15T18:48:57.629860Z", - "iopub.status.busy": "2023-08-15T18:48:57.629753Z", - "iopub.status.idle": "2023-08-15T18:48:57.631845Z", - "shell.execute_reply": "2023-08-15T18:48:57.631576Z" + "iopub.execute_input": "2023-08-21T03:36:04.905358Z", + "iopub.status.busy": "2023-08-21T03:36:04.905148Z", + "iopub.status.idle": "2023-08-21T03:36:04.910143Z", + "shell.execute_reply": "2023-08-21T03:36:04.909500Z" } }, "outputs": [ @@ -1009,7 +1009,7 @@ }, { "cell_type": "markdown", - "id": "77ab8534", + "id": "8a840507", "metadata": {}, "source": [ "Modifying `x_reshape` also modified `x` because the two objects occupy the same space in memory.\n", @@ -1020,7 +1020,7 @@ }, { "cell_type": "markdown", - "id": "8d5214bc", + "id": "ec551f3e", "metadata": {}, "source": [ "We just saw that we can modify an element of an array. Can we also modify a tuple? It turns out that we cannot --- and trying to do so introduces\n", @@ -1030,13 +1030,13 @@ { "cell_type": "code", "execution_count": 23, - "id": "1de2f886", + "id": "59d95dce", "metadata": { "execution": { - "iopub.execute_input": "2023-08-15T18:48:57.633340Z", - "iopub.status.busy": "2023-08-15T18:48:57.633238Z", - "iopub.status.idle": "2023-08-15T18:48:57.752298Z", - "shell.execute_reply": "2023-08-15T18:48:57.751937Z" + "iopub.execute_input": "2023-08-21T03:36:04.913411Z", + "iopub.status.busy": "2023-08-21T03:36:04.912985Z", + "iopub.status.idle": "2023-08-21T03:36:05.037046Z", + "shell.execute_reply": "2023-08-21T03:36:05.036755Z" }, "lines_to_next_cell": 2 }, @@ -1060,7 +1060,7 @@ }, { "cell_type": "markdown", - "id": "5f8a5095", + "id": "d594f1af", "metadata": {}, "source": [ "We now briefly mention some attributes of arrays that will come in handy. An array's `shape` attribute contains its dimension; this is always a tuple.\n", @@ -1070,13 +1070,13 @@ { "cell_type": "code", "execution_count": 24, - "id": "634a18d8", + "id": "a6fde9af", "metadata": { "execution": { - "iopub.execute_input": "2023-08-15T18:48:57.754084Z", - "iopub.status.busy": "2023-08-15T18:48:57.753976Z", - "iopub.status.idle": "2023-08-15T18:48:57.756236Z", - "shell.execute_reply": "2023-08-15T18:48:57.756009Z" + "iopub.execute_input": "2023-08-21T03:36:05.038645Z", + "iopub.status.busy": "2023-08-21T03:36:05.038536Z", + "iopub.status.idle": "2023-08-21T03:36:05.040823Z", + "shell.execute_reply": "2023-08-21T03:36:05.040589Z" } }, "outputs": [ @@ -1101,7 +1101,7 @@ }, { "cell_type": "markdown", - "id": "1db9f878", + "id": "76d20b98", "metadata": {}, "source": [ "Notice that the three individual outputs `(2,3)`, `2`, and `array([[5, 4],[2, 5], [3,6]])` are themselves output as a tuple. \n", @@ -1114,13 +1114,13 @@ { "cell_type": "code", "execution_count": 25, - "id": "38563574", + "id": "fadb6b45", "metadata": { "execution": { - "iopub.execute_input": "2023-08-15T18:48:57.757698Z", - "iopub.status.busy": "2023-08-15T18:48:57.757600Z", - "iopub.status.idle": "2023-08-15T18:48:57.759735Z", - "shell.execute_reply": "2023-08-15T18:48:57.759486Z" + "iopub.execute_input": "2023-08-21T03:36:05.042203Z", + "iopub.status.busy": "2023-08-21T03:36:05.042112Z", + "iopub.status.idle": "2023-08-21T03:36:05.044185Z", + "shell.execute_reply": "2023-08-21T03:36:05.043940Z" } }, "outputs": [ @@ -1142,7 +1142,7 @@ }, { "cell_type": "markdown", - "id": "cdee1904", + "id": "22fab2ce", "metadata": {}, "source": [ "We can also square the elements:" @@ -1151,13 +1151,13 @@ { "cell_type": "code", "execution_count": 26, - "id": "6d7eb044", + "id": "fda3134b", "metadata": { "execution": { - "iopub.execute_input": "2023-08-15T18:48:57.761258Z", - "iopub.status.busy": "2023-08-15T18:48:57.761155Z", - "iopub.status.idle": "2023-08-15T18:48:57.764201Z", - "shell.execute_reply": "2023-08-15T18:48:57.763942Z" + "iopub.execute_input": "2023-08-21T03:36:05.045709Z", + "iopub.status.busy": "2023-08-21T03:36:05.045601Z", + "iopub.status.idle": "2023-08-21T03:36:05.047665Z", + "shell.execute_reply": "2023-08-21T03:36:05.047412Z" } }, "outputs": [ @@ -1178,7 +1178,7 @@ }, { "cell_type": "markdown", - "id": "7322f04a", + "id": "1278f26b", "metadata": {}, "source": [ "We can compute the square roots using the same notation, raising to the power of $1/2$ instead of 2." @@ -1187,13 +1187,13 @@ { "cell_type": "code", "execution_count": 27, - "id": "dcf49c32", + "id": "52eb335b", "metadata": { "execution": { - "iopub.execute_input": "2023-08-15T18:48:57.765568Z", - "iopub.status.busy": "2023-08-15T18:48:57.765489Z", - "iopub.status.idle": "2023-08-15T18:48:57.767687Z", - "shell.execute_reply": "2023-08-15T18:48:57.767416Z" + "iopub.execute_input": "2023-08-21T03:36:05.049290Z", + "iopub.status.busy": "2023-08-21T03:36:05.049191Z", + "iopub.status.idle": "2023-08-21T03:36:05.051249Z", + "shell.execute_reply": "2023-08-21T03:36:05.051004Z" }, "lines_to_next_cell": 2 }, @@ -1216,7 +1216,7 @@ }, { "cell_type": "markdown", - "id": "a4ccea4f", + "id": "299a5a85", "metadata": {}, "source": [ "Throughout this book, we will often want to generate random data. \n", @@ -1234,29 +1234,29 @@ { "cell_type": "code", "execution_count": 28, - "id": "dec2f36f", + "id": "ac5e9d29", "metadata": { "execution": { - "iopub.execute_input": "2023-08-15T18:48:57.769038Z", - "iopub.status.busy": "2023-08-15T18:48:57.768966Z", - "iopub.status.idle": "2023-08-15T18:48:57.772119Z", - "shell.execute_reply": "2023-08-15T18:48:57.771880Z" + "iopub.execute_input": "2023-08-21T03:36:05.052622Z", + "iopub.status.busy": "2023-08-21T03:36:05.052529Z", + "iopub.status.idle": "2023-08-21T03:36:05.054818Z", + "shell.execute_reply": "2023-08-21T03:36:05.054569Z" } }, "outputs": [ { "data": { "text/plain": [ - "array([ 0.29014042, -1.86056555, -1.03145717, -0.07365371, -0.28189692,\n", - " -0.71611404, 0.05880048, 0.46770064, 0.79645167, -0.0162479 ,\n", - " 0.47130365, 1.05609834, -0.68946797, 1.41358519, 0.73655573,\n", - " -0.54189331, -0.44411721, -1.5708482 , -1.52047945, 1.32694248,\n", - " -1.18915043, -0.32868506, 1.38578859, -0.36928554, 0.42589616,\n", - " -0.4244271 , 0.80408062, 0.43856581, -0.17138868, -0.84893759,\n", - " 1.13046227, 0.22826387, 0.13787643, 1.01904386, -0.29545438,\n", - " -0.62502879, 1.2120335 , -0.82664507, -1.41961403, 1.7012509 ,\n", - " 0.04141695, 2.63161733, 0.40039857, 0.82556693, 0.13357677,\n", - " 0.12961134, 0.62829697, 0.05220314, 0.66114213, 0.68263063])" + "array([-0.97992307, 0.29561095, 0.60481929, -0.20482365, -1.01517527,\n", + " 2.76594674, -0.65748447, 1.27396181, -1.01573869, 1.37373688,\n", + " 0.93524901, -2.41971622, -0.58080017, 0.13777341, 1.35936356,\n", + " 0.61747629, 0.82550921, 0.7943598 , 1.0905082 , 1.80820045,\n", + " -1.31320321, 2.0651966 , -0.78632522, -2.01068042, -1.36562571,\n", + " 1.43466837, -0.16848093, -1.57211786, 0.49888498, -1.86050966,\n", + " 1.08743609, 0.53059599, 0.02172848, -0.41808062, 1.88343414,\n", + " 0.09112977, 1.23489568, 0.53207714, -1.62670383, 1.29859234,\n", + " 0.30311344, 1.01143392, -1.64596169, 1.58876421, -1.85189683,\n", + " -0.53929878, -2.19895144, -0.36691225, 1.03621761, 0.25278481])" ] }, "execution_count": 28, @@ -1271,7 +1271,7 @@ }, { "cell_type": "markdown", - "id": "9c60001d", + "id": "d77cf45a", "metadata": {}, "source": [ "We create an array `y` by adding an independent $N(50,1)$ random variable to each element of `x`." @@ -1280,13 +1280,13 @@ { "cell_type": "code", "execution_count": 29, - "id": "f535fba4", + "id": "55fa905e", "metadata": { "execution": { - "iopub.execute_input": "2023-08-15T18:48:57.773475Z", - "iopub.status.busy": "2023-08-15T18:48:57.773381Z", - "iopub.status.idle": "2023-08-15T18:48:57.775112Z", - "shell.execute_reply": "2023-08-15T18:48:57.774870Z" + "iopub.execute_input": "2023-08-21T03:36:05.056219Z", + "iopub.status.busy": "2023-08-21T03:36:05.056124Z", + "iopub.status.idle": "2023-08-21T03:36:05.057790Z", + "shell.execute_reply": "2023-08-21T03:36:05.057543Z" }, "lines_to_next_cell": 0 }, @@ -1297,7 +1297,7 @@ }, { "cell_type": "markdown", - "id": "b267be24", + "id": "eacfecc9", "metadata": {}, "source": [ "The `np.corrcoef()` function computes the correlation matrix between `x` and `y`. The off-diagonal elements give the \n", @@ -1307,21 +1307,21 @@ { "cell_type": "code", "execution_count": 30, - "id": "faf3be25", + "id": "fde0dc19", "metadata": { "execution": { - "iopub.execute_input": "2023-08-15T18:48:57.776482Z", - "iopub.status.busy": "2023-08-15T18:48:57.776392Z", - "iopub.status.idle": "2023-08-15T18:48:57.778813Z", - "shell.execute_reply": "2023-08-15T18:48:57.778571Z" + "iopub.execute_input": "2023-08-21T03:36:05.059163Z", + "iopub.status.busy": "2023-08-21T03:36:05.059091Z", + "iopub.status.idle": "2023-08-21T03:36:05.061351Z", + "shell.execute_reply": "2023-08-21T03:36:05.061105Z" } }, "outputs": [ { "data": { "text/plain": [ - "array([[1. , 0.76729831],\n", - " [0.76729831, 1. ]])" + "array([[1. , 0.66045794],\n", + " [0.66045794, 1. ]])" ] }, "execution_count": 30, @@ -1335,7 +1335,7 @@ }, { "cell_type": "markdown", - "id": "c6d0e0ce", + "id": "8a594218", "metadata": {}, "source": [ "If you're following along in your own `Jupyter` notebook, then you probably noticed that you got a different set of results when you ran the past few \n", @@ -1347,13 +1347,13 @@ { "cell_type": "code", "execution_count": 31, - "id": "b6a756e0", + "id": "5099cf54", "metadata": { "execution": { - "iopub.execute_input": "2023-08-15T18:48:57.780187Z", - "iopub.status.busy": "2023-08-15T18:48:57.780099Z", - "iopub.status.idle": "2023-08-15T18:48:57.782068Z", - "shell.execute_reply": "2023-08-15T18:48:57.781835Z" + "iopub.execute_input": "2023-08-21T03:36:05.062721Z", + "iopub.status.busy": "2023-08-21T03:36:05.062630Z", + "iopub.status.idle": "2023-08-21T03:36:05.064539Z", + "shell.execute_reply": "2023-08-21T03:36:05.064300Z" }, "lines_to_next_cell": 0 }, @@ -1362,8 +1362,8 @@ "name": "stdout", "output_type": "stream", "text": [ - "[1.14627413 4.27059779]\n", - "[ 0.8049877 -5.40386206]\n" + "[-9.63514647 -0.12742473]\n", + "[0.85490033 0.05488893]\n" ] } ], @@ -1374,7 +1374,7 @@ }, { "cell_type": "markdown", - "id": "a1071413", + "id": "2e209118", "metadata": {}, "source": [ " " @@ -1382,7 +1382,7 @@ }, { "cell_type": "markdown", - "id": "31d9911e", + "id": "ed7697a4", "metadata": {}, "source": [ "In order to ensure that our code provides exactly the same results\n", @@ -1398,13 +1398,13 @@ { "cell_type": "code", "execution_count": 32, - "id": "921b634a", + "id": "9d8074e5", "metadata": { "execution": { - "iopub.execute_input": "2023-08-15T18:48:57.783469Z", - "iopub.status.busy": "2023-08-15T18:48:57.783382Z", - "iopub.status.idle": "2023-08-15T18:48:57.786255Z", - "shell.execute_reply": "2023-08-15T18:48:57.786022Z" + "iopub.execute_input": "2023-08-21T03:36:05.065999Z", + "iopub.status.busy": "2023-08-21T03:36:05.065912Z", + "iopub.status.idle": "2023-08-21T03:36:05.068039Z", + "shell.execute_reply": "2023-08-21T03:36:05.067820Z" } }, "outputs": [ @@ -1426,7 +1426,7 @@ }, { "cell_type": "markdown", - "id": "7a4da703", + "id": "93f826ef", "metadata": {}, "source": [ "Throughout the labs in this book, we use `np.random.default_rng()` whenever we\n", @@ -1444,13 +1444,13 @@ { "cell_type": "code", "execution_count": 33, - "id": "fe28973e", + "id": "e98472df", "metadata": { "execution": { - "iopub.execute_input": "2023-08-15T18:48:57.787657Z", - "iopub.status.busy": "2023-08-15T18:48:57.787557Z", - "iopub.status.idle": "2023-08-15T18:48:57.790025Z", - "shell.execute_reply": "2023-08-15T18:48:57.789788Z" + "iopub.execute_input": "2023-08-21T03:36:05.069438Z", + "iopub.status.busy": "2023-08-21T03:36:05.069347Z", + "iopub.status.idle": "2023-08-21T03:36:05.071564Z", + "shell.execute_reply": "2023-08-21T03:36:05.071324Z" }, "lines_to_next_cell": 0 }, @@ -1474,7 +1474,7 @@ }, { "cell_type": "markdown", - "id": "b6092d9c", + "id": "2870d61f", "metadata": {}, "source": [ " \n" @@ -1483,13 +1483,13 @@ { "cell_type": "code", "execution_count": 34, - "id": "04c26742", + "id": "8c2784fd", "metadata": { "execution": { - "iopub.execute_input": "2023-08-15T18:48:57.791368Z", - "iopub.status.busy": "2023-08-15T18:48:57.791283Z", - "iopub.status.idle": "2023-08-15T18:48:57.793457Z", - "shell.execute_reply": "2023-08-15T18:48:57.793225Z" + "iopub.execute_input": "2023-08-21T03:36:05.072967Z", + "iopub.status.busy": "2023-08-21T03:36:05.072873Z", + "iopub.status.idle": "2023-08-21T03:36:05.075053Z", + "shell.execute_reply": "2023-08-21T03:36:05.074833Z" }, "lines_to_next_cell": 2 }, @@ -1511,7 +1511,7 @@ }, { "cell_type": "markdown", - "id": "b9212f82", + "id": "86261a69", "metadata": {}, "source": [ "Notice that by default `np.var()` divides by the sample size $n$ rather\n", @@ -1521,13 +1521,13 @@ { "cell_type": "code", "execution_count": 35, - "id": "e35cdcbf", + "id": "7e7205f2", "metadata": { "execution": { - "iopub.execute_input": "2023-08-15T18:48:57.794778Z", - "iopub.status.busy": "2023-08-15T18:48:57.794692Z", - "iopub.status.idle": "2023-08-15T18:48:57.796774Z", - "shell.execute_reply": "2023-08-15T18:48:57.796540Z" + "iopub.execute_input": "2023-08-21T03:36:05.076473Z", + "iopub.status.busy": "2023-08-21T03:36:05.076373Z", + "iopub.status.idle": "2023-08-21T03:36:05.078474Z", + "shell.execute_reply": "2023-08-21T03:36:05.078224Z" } }, "outputs": [ @@ -1548,7 +1548,7 @@ }, { "cell_type": "markdown", - "id": "41eb4c38", + "id": "d4faf901", "metadata": {}, "source": [ "The `np.mean()`, `np.var()`, and `np.std()` functions can also be applied to the rows and columns of a matrix. \n", @@ -1558,13 +1558,13 @@ { "cell_type": "code", "execution_count": 36, - "id": "fbd49766", + "id": "fce06849", "metadata": { "execution": { - "iopub.execute_input": "2023-08-15T18:48:57.798111Z", - "iopub.status.busy": "2023-08-15T18:48:57.798040Z", - "iopub.status.idle": "2023-08-15T18:48:57.800173Z", - "shell.execute_reply": "2023-08-15T18:48:57.799940Z" + "iopub.execute_input": "2023-08-21T03:36:05.079856Z", + "iopub.status.busy": "2023-08-21T03:36:05.079755Z", + "iopub.status.idle": "2023-08-21T03:36:05.081961Z", + "shell.execute_reply": "2023-08-21T03:36:05.081709Z" } }, "outputs": [ @@ -1595,7 +1595,7 @@ }, { "cell_type": "markdown", - "id": "5520aeae", + "id": "6cc355d2", "metadata": {}, "source": [ "Since arrays are row-major ordered, the first axis, i.e. `axis=0`, refers to its rows. We pass this argument into the `mean()` method for the object `X`. " @@ -1604,13 +1604,13 @@ { "cell_type": "code", "execution_count": 37, - "id": "f5865859", + "id": "1403ff7a", "metadata": { "execution": { - "iopub.execute_input": "2023-08-15T18:48:57.801565Z", - "iopub.status.busy": "2023-08-15T18:48:57.801490Z", - "iopub.status.idle": "2023-08-15T18:48:57.803669Z", - "shell.execute_reply": "2023-08-15T18:48:57.803436Z" + "iopub.execute_input": "2023-08-21T03:36:05.083361Z", + "iopub.status.busy": "2023-08-21T03:36:05.083273Z", + "iopub.status.idle": "2023-08-21T03:36:05.085366Z", + "shell.execute_reply": "2023-08-21T03:36:05.085112Z" } }, "outputs": [ @@ -1631,7 +1631,7 @@ }, { "cell_type": "markdown", - "id": "8aedc41d", + "id": "6785c0ec", "metadata": {}, "source": [ "The following yields the same result." @@ -1640,13 +1640,13 @@ { "cell_type": "code", "execution_count": 38, - "id": "e27b30bf", + "id": "7e9255ba", "metadata": { "execution": { - "iopub.execute_input": "2023-08-15T18:48:57.804972Z", - "iopub.status.busy": "2023-08-15T18:48:57.804902Z", - "iopub.status.idle": "2023-08-15T18:48:57.806941Z", - "shell.execute_reply": "2023-08-15T18:48:57.806694Z" + "iopub.execute_input": "2023-08-21T03:36:05.086730Z", + "iopub.status.busy": "2023-08-21T03:36:05.086636Z", + "iopub.status.idle": "2023-08-21T03:36:05.088698Z", + "shell.execute_reply": "2023-08-21T03:36:05.088470Z" }, "lines_to_next_cell": 0 }, @@ -1668,7 +1668,7 @@ }, { "cell_type": "markdown", - "id": "4ee7f516", + "id": "5de246dc", "metadata": {}, "source": [ " " @@ -1676,7 +1676,7 @@ }, { "cell_type": "markdown", - "id": "80ab3209", + "id": "30b002fa", "metadata": {}, "source": [ "## Graphics\n", @@ -1710,13 +1710,13 @@ { "cell_type": "code", "execution_count": 39, - "id": "fed2376c", + "id": "8236e5f7", "metadata": { "execution": { - "iopub.execute_input": "2023-08-15T18:48:57.808301Z", - "iopub.status.busy": "2023-08-15T18:48:57.808228Z", - "iopub.status.idle": "2023-08-15T18:48:58.138590Z", - "shell.execute_reply": "2023-08-15T18:48:58.138241Z" + "iopub.execute_input": "2023-08-21T03:36:05.090105Z", + "iopub.status.busy": "2023-08-21T03:36:05.090015Z", + "iopub.status.idle": "2023-08-21T03:36:05.390499Z", + "shell.execute_reply": "2023-08-21T03:36:05.390143Z" } }, "outputs": [ @@ -1741,7 +1741,7 @@ }, { "cell_type": "markdown", - "id": "9b697b2a", + "id": "bbef67e6", "metadata": {}, "source": [ "We pause here to note that we have *unpacked* the tuple of length two returned by `subplots()` into the two distinct\n", @@ -1752,13 +1752,13 @@ { "cell_type": "code", "execution_count": 40, - "id": "228ee04d", + "id": "ddc9ed4f", "metadata": { "execution": { - "iopub.execute_input": "2023-08-15T18:48:58.140540Z", - "iopub.status.busy": "2023-08-15T18:48:58.140403Z", - "iopub.status.idle": "2023-08-15T18:48:58.212007Z", - "shell.execute_reply": "2023-08-15T18:48:58.211693Z" + "iopub.execute_input": "2023-08-21T03:36:05.392242Z", + "iopub.status.busy": "2023-08-21T03:36:05.392127Z", + "iopub.status.idle": "2023-08-21T03:36:05.464507Z", + "shell.execute_reply": "2023-08-21T03:36:05.464208Z" } }, "outputs": [ @@ -1781,7 +1781,7 @@ }, { "cell_type": "markdown", - "id": "e040ba84", + "id": "104d6b8f", "metadata": {}, "source": [ "We see that our earlier cell produced a line plot, which is the default. To create a scatterplot, we provide an additional argument to `ax.plot()`, indicating that circles should be displayed." @@ -1790,13 +1790,13 @@ { "cell_type": "code", "execution_count": 41, - "id": "e1dc79d2", + "id": "c64ed600", "metadata": { "execution": { - "iopub.execute_input": "2023-08-15T18:48:58.213756Z", - "iopub.status.busy": "2023-08-15T18:48:58.213640Z", - "iopub.status.idle": "2023-08-15T18:48:58.289684Z", - "shell.execute_reply": "2023-08-15T18:48:58.289374Z" + "iopub.execute_input": "2023-08-21T03:36:05.466274Z", + "iopub.status.busy": "2023-08-21T03:36:05.466157Z", + "iopub.status.idle": "2023-08-21T03:36:05.540801Z", + "shell.execute_reply": "2023-08-21T03:36:05.540543Z" }, "lines_to_next_cell": 0 }, @@ -1819,7 +1819,7 @@ }, { "cell_type": "markdown", - "id": "960d0ceb", + "id": "840be2a9", "metadata": {}, "source": [ "Different values\n", @@ -1829,7 +1829,7 @@ }, { "cell_type": "markdown", - "id": "833d6751", + "id": "971b98bd", "metadata": {}, "source": [ "As an alternative, we could use the `ax.scatter()` function to create a scatterplot." @@ -1838,13 +1838,13 @@ { "cell_type": "code", "execution_count": 42, - "id": "d6e6bf34", + "id": "bc6245e2", "metadata": { "execution": { - "iopub.execute_input": "2023-08-15T18:48:58.291440Z", - "iopub.status.busy": "2023-08-15T18:48:58.291326Z", - "iopub.status.idle": "2023-08-15T18:48:58.373922Z", - "shell.execute_reply": "2023-08-15T18:48:58.373639Z" + "iopub.execute_input": "2023-08-21T03:36:05.542497Z", + "iopub.status.busy": "2023-08-21T03:36:05.542378Z", + "iopub.status.idle": "2023-08-21T03:36:05.621061Z", + "shell.execute_reply": "2023-08-21T03:36:05.620765Z" } }, "outputs": [ @@ -1866,7 +1866,7 @@ }, { "cell_type": "markdown", - "id": "ff56b51f", + "id": "97f36df0", "metadata": {}, "source": [ "Notice that in the code blocks above, we have ended\n", @@ -1878,13 +1878,13 @@ { "cell_type": "code", "execution_count": 43, - "id": "9c1ea81c", + "id": "2454807b", "metadata": { "execution": { - "iopub.execute_input": "2023-08-15T18:48:58.375715Z", - "iopub.status.busy": "2023-08-15T18:48:58.375585Z", - "iopub.status.idle": "2023-08-15T18:48:58.454702Z", - "shell.execute_reply": "2023-08-15T18:48:58.454405Z" + "iopub.execute_input": "2023-08-21T03:36:05.622738Z", + "iopub.status.busy": "2023-08-21T03:36:05.622624Z", + "iopub.status.idle": "2023-08-21T03:36:05.700853Z", + "shell.execute_reply": "2023-08-21T03:36:05.700564Z" }, "lines_to_next_cell": 0 }, @@ -1892,7 +1892,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 43, @@ -1917,7 +1917,7 @@ }, { "cell_type": "markdown", - "id": "abdc9ceb", + "id": "1230c0a6", "metadata": {}, "source": [ "In what follows, we will use\n", @@ -1930,7 +1930,7 @@ }, { "cell_type": "markdown", - "id": "4b9491f5", + "id": "0ccb9964", "metadata": {}, "source": [ "To label our plot, we make use of the `set_xlabel()`, `set_ylabel()`, and `set_title()` methods\n", @@ -1941,13 +1941,13 @@ { "cell_type": "code", "execution_count": 44, - "id": "e6217bc8", + "id": "1e18a793", "metadata": { "execution": { - "iopub.execute_input": "2023-08-15T18:48:58.456512Z", - "iopub.status.busy": "2023-08-15T18:48:58.456386Z", - "iopub.status.idle": "2023-08-15T18:48:58.551777Z", - "shell.execute_reply": "2023-08-15T18:48:58.551466Z" + "iopub.execute_input": "2023-08-21T03:36:05.702667Z", + "iopub.status.busy": "2023-08-21T03:36:05.702545Z", + "iopub.status.idle": "2023-08-21T03:36:05.797850Z", + "shell.execute_reply": "2023-08-21T03:36:05.797545Z" } }, "outputs": [ @@ -1972,7 +1972,7 @@ }, { "cell_type": "markdown", - "id": "e8228a39", + "id": "f2d818ee", "metadata": {}, "source": [ " Having access to the figure object `fig` itself means that we can go in and change some aspects and then redisplay it. Here, we change\n", @@ -1982,13 +1982,13 @@ { "cell_type": "code", "execution_count": 45, - "id": "2feef77c", + "id": "aec3f009", "metadata": { "execution": { - "iopub.execute_input": "2023-08-15T18:48:58.553489Z", - "iopub.status.busy": "2023-08-15T18:48:58.553368Z", - "iopub.status.idle": "2023-08-15T18:48:58.616077Z", - "shell.execute_reply": "2023-08-15T18:48:58.615653Z" + "iopub.execute_input": "2023-08-21T03:36:05.799658Z", + "iopub.status.busy": "2023-08-21T03:36:05.799529Z", + "iopub.status.idle": "2023-08-21T03:36:05.861021Z", + "shell.execute_reply": "2023-08-21T03:36:05.860749Z" }, "lines_to_next_cell": 0 }, @@ -2012,7 +2012,7 @@ }, { "cell_type": "markdown", - "id": "d22f3886", + "id": "dee531cc", "metadata": {}, "source": [ " " @@ -2020,7 +2020,7 @@ }, { "cell_type": "markdown", - "id": "e9187ea8", + "id": "011bf802", "metadata": {}, "source": [ "Occasionally we will want to create several plots within a figure. This can be\n", @@ -2036,13 +2036,13 @@ { "cell_type": "code", "execution_count": 46, - "id": "24c9bd3c", + "id": "2cbc7fd4", "metadata": { "execution": { - "iopub.execute_input": "2023-08-15T18:48:58.617956Z", - "iopub.status.busy": "2023-08-15T18:48:58.617675Z", - "iopub.status.idle": "2023-08-15T18:48:58.904869Z", - "shell.execute_reply": "2023-08-15T18:48:58.904534Z" + "iopub.execute_input": "2023-08-21T03:36:05.862740Z", + "iopub.status.busy": "2023-08-21T03:36:05.862621Z", + "iopub.status.idle": "2023-08-21T03:36:06.143924Z", + "shell.execute_reply": "2023-08-21T03:36:06.143646Z" }, "lines_to_next_cell": 0 }, @@ -2066,7 +2066,7 @@ }, { "cell_type": "markdown", - "id": "7c6bdba5", + "id": "b8ff2e6d", "metadata": {}, "source": [ "We now produce a scatter plot with `'o'` in the second column of the first row and\n", @@ -2076,13 +2076,13 @@ { "cell_type": "code", "execution_count": 47, - "id": "dbe7d87c", + "id": "702f80d9", "metadata": { "execution": { - "iopub.execute_input": "2023-08-15T18:48:58.906555Z", - "iopub.status.busy": "2023-08-15T18:48:58.906430Z", - "iopub.status.idle": "2023-08-15T18:48:59.089062Z", - "shell.execute_reply": "2023-08-15T18:48:59.088760Z" + "iopub.execute_input": "2023-08-21T03:36:06.145683Z", + "iopub.status.busy": "2023-08-21T03:36:06.145574Z", + "iopub.status.idle": "2023-08-21T03:36:06.326301Z", + "shell.execute_reply": "2023-08-21T03:36:06.326007Z" }, "lines_to_next_cell": 0 }, @@ -2107,7 +2107,7 @@ }, { "cell_type": "markdown", - "id": "81d8fa9f", + "id": "5b265f8b", "metadata": {}, "source": [ "Type `subplots?` to learn more about \n", @@ -2118,7 +2118,7 @@ }, { "cell_type": "markdown", - "id": "d3760a25", + "id": "1bd7e707", "metadata": {}, "source": [ "To save the output of `fig`, we call its `savefig()`\n", @@ -2129,13 +2129,13 @@ { "cell_type": "code", "execution_count": 48, - "id": "c86bffe6", + "id": "5493d229", "metadata": { "execution": { - "iopub.execute_input": "2023-08-15T18:48:59.090755Z", - "iopub.status.busy": "2023-08-15T18:48:59.090646Z", - "iopub.status.idle": "2023-08-15T18:49:00.169920Z", - "shell.execute_reply": "2023-08-15T18:49:00.169634Z" + "iopub.execute_input": "2023-08-21T03:36:06.327958Z", + "iopub.status.busy": "2023-08-21T03:36:06.327847Z", + "iopub.status.idle": "2023-08-21T03:36:07.432805Z", + "shell.execute_reply": "2023-08-21T03:36:07.432429Z" }, "lines_to_next_cell": 2 }, @@ -2147,7 +2147,7 @@ }, { "cell_type": "markdown", - "id": "fd9dbb47", + "id": "7152d0c7", "metadata": {}, "source": [ "We can continue to modify `fig` using step-by-step updates; for example, we can modify the range of the $x$-axis, re-save the figure, and even re-display it. " @@ -2156,13 +2156,13 @@ { "cell_type": "code", "execution_count": 49, - "id": "07f180e1", + "id": "bd07af12", "metadata": { "execution": { - "iopub.execute_input": "2023-08-15T18:49:00.172125Z", - "iopub.status.busy": "2023-08-15T18:49:00.171883Z", - "iopub.status.idle": "2023-08-15T18:49:00.406313Z", - "shell.execute_reply": "2023-08-15T18:49:00.405904Z" + "iopub.execute_input": "2023-08-21T03:36:07.434785Z", + "iopub.status.busy": "2023-08-21T03:36:07.434614Z", + "iopub.status.idle": "2023-08-21T03:36:07.663475Z", + "shell.execute_reply": "2023-08-21T03:36:07.663165Z" } }, "outputs": [ @@ -2186,7 +2186,7 @@ }, { "cell_type": "markdown", - "id": "8e013a6f", + "id": "b5278857", "metadata": {}, "source": [ "We now create some more sophisticated plots. The \n", @@ -2206,13 +2206,13 @@ { "cell_type": "code", "execution_count": 50, - "id": "a465c3aa", + "id": "01019508", "metadata": { "execution": { - "iopub.execute_input": "2023-08-15T18:49:00.408153Z", - "iopub.status.busy": "2023-08-15T18:49:00.408030Z", - "iopub.status.idle": "2023-08-15T18:49:00.529270Z", - "shell.execute_reply": "2023-08-15T18:49:00.528966Z" + "iopub.execute_input": "2023-08-21T03:36:07.665255Z", + "iopub.status.busy": "2023-08-21T03:36:07.665128Z", + "iopub.status.idle": "2023-08-21T03:36:07.766569Z", + "shell.execute_reply": "2023-08-21T03:36:07.766244Z" }, "lines_to_next_cell": 0 }, @@ -2238,7 +2238,7 @@ }, { "cell_type": "markdown", - "id": "df35daed", + "id": "9ef3c475", "metadata": {}, "source": [ "We can increase the resolution by adding more levels to the image." @@ -2247,13 +2247,13 @@ { "cell_type": "code", "execution_count": 51, - "id": "469979b0", + "id": "7d08992f", "metadata": { "execution": { - "iopub.execute_input": "2023-08-15T18:49:00.531056Z", - "iopub.status.busy": "2023-08-15T18:49:00.530927Z", - "iopub.status.idle": "2023-08-15T18:49:00.658628Z", - "shell.execute_reply": "2023-08-15T18:49:00.658295Z" + "iopub.execute_input": "2023-08-21T03:36:07.768244Z", + "iopub.status.busy": "2023-08-21T03:36:07.768130Z", + "iopub.status.idle": "2023-08-21T03:36:07.893027Z", + "shell.execute_reply": "2023-08-21T03:36:07.892660Z" }, "lines_to_next_cell": 0 }, @@ -2276,7 +2276,7 @@ }, { "cell_type": "markdown", - "id": "e6aa9a72", + "id": "8e1d37a2", "metadata": {}, "source": [ "To fine-tune the output of the\n", @@ -2293,13 +2293,13 @@ { "cell_type": "code", "execution_count": 52, - "id": "31092abb", + "id": "1f89d704", "metadata": { "execution": { - "iopub.execute_input": "2023-08-15T18:49:00.660299Z", - "iopub.status.busy": "2023-08-15T18:49:00.660207Z", - "iopub.status.idle": "2023-08-15T18:49:00.765408Z", - "shell.execute_reply": "2023-08-15T18:49:00.765121Z" + "iopub.execute_input": "2023-08-21T03:36:07.894802Z", + "iopub.status.busy": "2023-08-21T03:36:07.894695Z", + "iopub.status.idle": "2023-08-21T03:36:07.995202Z", + "shell.execute_reply": "2023-08-21T03:36:07.994863Z" }, "lines_to_next_cell": 2 }, @@ -2322,7 +2322,7 @@ }, { "cell_type": "markdown", - "id": "aba44db2", + "id": "2500a6ec", "metadata": {}, "source": [ "## Sequences and Slice Notation" @@ -2330,7 +2330,7 @@ }, { "cell_type": "markdown", - "id": "f0edc818", + "id": "07001b88", "metadata": {}, "source": [ "As seen above, the\n", @@ -2341,13 +2341,13 @@ { "cell_type": "code", "execution_count": 53, - "id": "4e834c17", + "id": "cd971131", "metadata": { "execution": { - "iopub.execute_input": "2023-08-15T18:49:00.767103Z", - "iopub.status.busy": "2023-08-15T18:49:00.766990Z", - "iopub.status.idle": "2023-08-15T18:49:00.769572Z", - "shell.execute_reply": "2023-08-15T18:49:00.769310Z" + "iopub.execute_input": "2023-08-21T03:36:07.996961Z", + "iopub.status.busy": "2023-08-21T03:36:07.996836Z", + "iopub.status.idle": "2023-08-21T03:36:07.999447Z", + "shell.execute_reply": "2023-08-21T03:36:07.999154Z" }, "lines_to_next_cell": 2 }, @@ -2370,7 +2370,7 @@ }, { "cell_type": "markdown", - "id": "e95ff002", + "id": "926f96fc", "metadata": {}, "source": [ "The function `np.arange()`\n", @@ -2381,13 +2381,13 @@ { "cell_type": "code", "execution_count": 54, - "id": "65d67d22", + "id": "aa630d16", "metadata": { "execution": { - "iopub.execute_input": "2023-08-15T18:49:00.771217Z", - "iopub.status.busy": "2023-08-15T18:49:00.771065Z", - "iopub.status.idle": "2023-08-15T18:49:00.773408Z", - "shell.execute_reply": "2023-08-15T18:49:00.773113Z" + "iopub.execute_input": "2023-08-21T03:36:08.001028Z", + "iopub.status.busy": "2023-08-21T03:36:08.000925Z", + "iopub.status.idle": "2023-08-21T03:36:08.003185Z", + "shell.execute_reply": "2023-08-21T03:36:08.002908Z" } }, "outputs": [ @@ -2409,7 +2409,7 @@ }, { "cell_type": "markdown", - "id": "09d51db7", + "id": "6908bad7", "metadata": {}, "source": [ "Why isn't $10$ output above? This has to do with *slice* notation in `Python`. \n", @@ -2422,13 +2422,13 @@ { "cell_type": "code", "execution_count": 55, - "id": "676ab564", + "id": "89955ee2", "metadata": { "execution": { - "iopub.execute_input": "2023-08-15T18:49:00.774895Z", - "iopub.status.busy": "2023-08-15T18:49:00.774790Z", - "iopub.status.idle": "2023-08-15T18:49:00.776727Z", - "shell.execute_reply": "2023-08-15T18:49:00.776499Z" + "iopub.execute_input": "2023-08-21T03:36:08.004703Z", + "iopub.status.busy": "2023-08-21T03:36:08.004594Z", + "iopub.status.idle": "2023-08-21T03:36:08.006692Z", + "shell.execute_reply": "2023-08-21T03:36:08.006429Z" }, "lines_to_next_cell": 0 }, @@ -2450,7 +2450,7 @@ }, { "cell_type": "markdown", - "id": "d51b85fc", + "id": "17d73e4d", "metadata": {}, "source": [ "In the code block above, the notation `3:6` is shorthand for `slice(3,6)` when used inside\n", @@ -2460,13 +2460,13 @@ { "cell_type": "code", "execution_count": 56, - "id": "569f45ab", + "id": "517f592d", "metadata": { "execution": { - "iopub.execute_input": "2023-08-15T18:49:00.778176Z", - "iopub.status.busy": "2023-08-15T18:49:00.778073Z", - "iopub.status.idle": "2023-08-15T18:49:00.780149Z", - "shell.execute_reply": "2023-08-15T18:49:00.779889Z" + "iopub.execute_input": "2023-08-21T03:36:08.008158Z", + "iopub.status.busy": "2023-08-21T03:36:08.008062Z", + "iopub.status.idle": "2023-08-21T03:36:08.010083Z", + "shell.execute_reply": "2023-08-21T03:36:08.009819Z" } }, "outputs": [ @@ -2487,7 +2487,7 @@ }, { "cell_type": "markdown", - "id": "b82b891c", + "id": "680fe656", "metadata": {}, "source": [ "You might have expected `slice(3,6)` to output the fourth through seventh characters in the text string (recalling that `Python` begins its indexing at zero), but instead it output the fourth through sixth. \n", @@ -2517,7 +2517,7 @@ }, { "cell_type": "markdown", - "id": "46aa45f7", + "id": "522a2761", "metadata": {}, "source": [ "## Indexing Data\n", @@ -2527,13 +2527,13 @@ { "cell_type": "code", "execution_count": 57, - "id": "7cf343bd", + "id": "35927abd", "metadata": { "execution": { - "iopub.execute_input": "2023-08-15T18:49:00.781654Z", - "iopub.status.busy": "2023-08-15T18:49:00.781547Z", - "iopub.status.idle": "2023-08-15T18:49:00.783829Z", - "shell.execute_reply": "2023-08-15T18:49:00.783563Z" + "iopub.execute_input": "2023-08-21T03:36:08.011518Z", + "iopub.status.busy": "2023-08-21T03:36:08.011425Z", + "iopub.status.idle": "2023-08-21T03:36:08.013558Z", + "shell.execute_reply": "2023-08-21T03:36:08.013317Z" } }, "outputs": [ @@ -2558,7 +2558,7 @@ }, { "cell_type": "markdown", - "id": "a396d5a6", + "id": "27c88984", "metadata": {}, "source": [ "Typing `A[1,2]` retrieves the element corresponding to the second row and third\n", @@ -2568,13 +2568,13 @@ { "cell_type": "code", "execution_count": 58, - "id": "2f4c1b37", + "id": "78ee7f5b", "metadata": { "execution": { - "iopub.execute_input": "2023-08-15T18:49:00.785421Z", - "iopub.status.busy": "2023-08-15T18:49:00.785315Z", - "iopub.status.idle": "2023-08-15T18:49:00.787314Z", - "shell.execute_reply": "2023-08-15T18:49:00.787066Z" + "iopub.execute_input": "2023-08-21T03:36:08.014962Z", + "iopub.status.busy": "2023-08-21T03:36:08.014871Z", + "iopub.status.idle": "2023-08-21T03:36:08.016938Z", + "shell.execute_reply": "2023-08-21T03:36:08.016689Z" } }, "outputs": [ @@ -2595,7 +2595,7 @@ }, { "cell_type": "markdown", - "id": "839feee0", + "id": "dd65ec1c", "metadata": {}, "source": [ "The first number after the open-bracket symbol `[`\n", @@ -2609,13 +2609,13 @@ { "cell_type": "code", "execution_count": 59, - "id": "a8ef1be5", + "id": "16212696", "metadata": { "execution": { - "iopub.execute_input": "2023-08-15T18:49:00.788866Z", - "iopub.status.busy": "2023-08-15T18:49:00.788741Z", - "iopub.status.idle": "2023-08-15T18:49:00.791048Z", - "shell.execute_reply": "2023-08-15T18:49:00.790773Z" + "iopub.execute_input": "2023-08-21T03:36:08.018506Z", + "iopub.status.busy": "2023-08-21T03:36:08.018407Z", + "iopub.status.idle": "2023-08-21T03:36:08.020572Z", + "shell.execute_reply": "2023-08-21T03:36:08.020301Z" } }, "outputs": [ @@ -2637,7 +2637,7 @@ }, { "cell_type": "markdown", - "id": "abe68415", + "id": "0b8b3ce3", "metadata": {}, "source": [ "To select the first and third columns, we pass in `[0,2]` as the second argument in the square brackets.\n", @@ -2648,13 +2648,13 @@ { "cell_type": "code", "execution_count": 60, - "id": "830897a9", + "id": "d5f473d2", "metadata": { "execution": { - "iopub.execute_input": "2023-08-15T18:49:00.792551Z", - "iopub.status.busy": "2023-08-15T18:49:00.792448Z", - "iopub.status.idle": "2023-08-15T18:49:00.794695Z", - "shell.execute_reply": "2023-08-15T18:49:00.794378Z" + "iopub.execute_input": "2023-08-21T03:36:08.022048Z", + "iopub.status.busy": "2023-08-21T03:36:08.021947Z", + "iopub.status.idle": "2023-08-21T03:36:08.024301Z", + "shell.execute_reply": "2023-08-21T03:36:08.024006Z" } }, "outputs": [ @@ -2678,7 +2678,7 @@ }, { "cell_type": "markdown", - "id": "004f3600", + "id": "471ed1b4", "metadata": {}, "source": [ "Now, suppose that we want to select the submatrix made up of the second and fourth \n", @@ -2689,13 +2689,13 @@ { "cell_type": "code", "execution_count": 61, - "id": "12e88036", + "id": "c89646d6", "metadata": { "execution": { - "iopub.execute_input": "2023-08-15T18:49:00.796240Z", - "iopub.status.busy": "2023-08-15T18:49:00.796133Z", - "iopub.status.idle": "2023-08-15T18:49:00.798381Z", - "shell.execute_reply": "2023-08-15T18:49:00.798108Z" + "iopub.execute_input": "2023-08-21T03:36:08.025864Z", + "iopub.status.busy": "2023-08-21T03:36:08.025745Z", + "iopub.status.idle": "2023-08-21T03:36:08.027990Z", + "shell.execute_reply": "2023-08-21T03:36:08.027692Z" } }, "outputs": [ @@ -2716,7 +2716,7 @@ }, { "cell_type": "markdown", - "id": "9b978348", + "id": "9cbf1ff9", "metadata": {}, "source": [ " Oops --- what happened? We got a one-dimensional array of length two identical to" @@ -2725,13 +2725,13 @@ { "cell_type": "code", "execution_count": 62, - "id": "c4098144", + "id": "87f6b4f2", "metadata": { "execution": { - "iopub.execute_input": "2023-08-15T18:49:00.799924Z", - "iopub.status.busy": "2023-08-15T18:49:00.799822Z", - "iopub.status.idle": "2023-08-15T18:49:00.801953Z", - "shell.execute_reply": "2023-08-15T18:49:00.801652Z" + "iopub.execute_input": "2023-08-21T03:36:08.029541Z", + "iopub.status.busy": "2023-08-21T03:36:08.029439Z", + "iopub.status.idle": "2023-08-21T03:36:08.031650Z", + "shell.execute_reply": "2023-08-21T03:36:08.031378Z" } }, "outputs": [ @@ -2752,7 +2752,7 @@ }, { "cell_type": "markdown", - "id": "2dcd98eb", + "id": "9a93dc96", "metadata": {}, "source": [ " Similarly, the following code fails to extract the submatrix comprised of the second and fourth rows and the first, third, and fourth columns:" @@ -2761,13 +2761,13 @@ { "cell_type": "code", "execution_count": 63, - "id": "b4d6bd49", + "id": "5da5bda8", "metadata": { "execution": { - "iopub.execute_input": "2023-08-15T18:49:00.803507Z", - "iopub.status.busy": "2023-08-15T18:49:00.803385Z", - "iopub.status.idle": "2023-08-15T18:49:00.827278Z", - "shell.execute_reply": "2023-08-15T18:49:00.826930Z" + "iopub.execute_input": "2023-08-21T03:36:08.033127Z", + "iopub.status.busy": "2023-08-21T03:36:08.033016Z", + "iopub.status.idle": "2023-08-21T03:36:08.056275Z", + "shell.execute_reply": "2023-08-21T03:36:08.056014Z" } }, "outputs": [ @@ -2789,7 +2789,7 @@ }, { "cell_type": "markdown", - "id": "dcac422f", + "id": "f4fd2f83", "metadata": {}, "source": [ "We can see what has gone wrong here. When supplied with two indexing lists, the `numpy` interpretation is that these provide pairs of $i,j$ indices for a series of entries. That is why the pair of lists must have the same length. However, that was not our intent, since we are looking for a submatrix.\n", @@ -2800,13 +2800,13 @@ { "cell_type": "code", "execution_count": 64, - "id": "e46c3267", + "id": "ac48a95b", "metadata": { "execution": { - "iopub.execute_input": "2023-08-15T18:49:00.828896Z", - "iopub.status.busy": "2023-08-15T18:49:00.828781Z", - "iopub.status.idle": "2023-08-15T18:49:00.831271Z", - "shell.execute_reply": "2023-08-15T18:49:00.831008Z" + "iopub.execute_input": "2023-08-21T03:36:08.057926Z", + "iopub.status.busy": "2023-08-21T03:36:08.057815Z", + "iopub.status.idle": "2023-08-21T03:36:08.060231Z", + "shell.execute_reply": "2023-08-21T03:36:08.059980Z" }, "lines_to_next_cell": 0 }, @@ -2829,7 +2829,7 @@ }, { "cell_type": "markdown", - "id": "d14bb320", + "id": "5e8388aa", "metadata": {}, "source": [ " " @@ -2837,7 +2837,7 @@ }, { "cell_type": "markdown", - "id": "a3d7e667", + "id": "a09467cd", "metadata": {}, "source": [ "There are more efficient ways of achieving the same result.\n", @@ -2849,13 +2849,13 @@ { "cell_type": "code", "execution_count": 65, - "id": "96d2355e", + "id": "ee195cc4", "metadata": { "execution": { - "iopub.execute_input": "2023-08-15T18:49:00.832787Z", - "iopub.status.busy": "2023-08-15T18:49:00.832688Z", - "iopub.status.idle": "2023-08-15T18:49:00.835031Z", - "shell.execute_reply": "2023-08-15T18:49:00.834787Z" + "iopub.execute_input": "2023-08-21T03:36:08.061798Z", + "iopub.status.busy": "2023-08-21T03:36:08.061686Z", + "iopub.status.idle": "2023-08-21T03:36:08.063979Z", + "shell.execute_reply": "2023-08-21T03:36:08.063715Z" }, "lines_to_next_cell": 2 }, @@ -2879,7 +2879,7 @@ }, { "cell_type": "markdown", - "id": "d462675f", + "id": "b7177cb9", "metadata": {}, "source": [ "Alternatively, we can subset matrices efficiently using slices.\n", @@ -2892,13 +2892,13 @@ { "cell_type": "code", "execution_count": 66, - "id": "326ef740", + "id": "48917bb5", "metadata": { "execution": { - "iopub.execute_input": "2023-08-15T18:49:00.836551Z", - "iopub.status.busy": "2023-08-15T18:49:00.836441Z", - "iopub.status.idle": "2023-08-15T18:49:00.838682Z", - "shell.execute_reply": "2023-08-15T18:49:00.838419Z" + "iopub.execute_input": "2023-08-21T03:36:08.067067Z", + "iopub.status.busy": "2023-08-21T03:36:08.066955Z", + "iopub.status.idle": "2023-08-21T03:36:08.069279Z", + "shell.execute_reply": "2023-08-21T03:36:08.068966Z" }, "lines_to_next_cell": 0 }, @@ -2921,7 +2921,7 @@ }, { "cell_type": "markdown", - "id": "e2eeed28", + "id": "697c5ab0", "metadata": {}, "source": [ " " @@ -2929,7 +2929,7 @@ }, { "cell_type": "markdown", - "id": "5139b99f", + "id": "c647dbf0", "metadata": {}, "source": [ "Why are we able to retrieve a submatrix directly using slices but not using lists?\n", @@ -2951,7 +2951,7 @@ }, { "cell_type": "markdown", - "id": "417c640e", + "id": "2dce8961", "metadata": {}, "source": [ "### Boolean Indexing\n", @@ -2962,13 +2962,13 @@ { "cell_type": "code", "execution_count": 67, - "id": "62ad65f2", + "id": "5d4caf22", "metadata": { "execution": { - "iopub.execute_input": "2023-08-15T18:49:00.840331Z", - "iopub.status.busy": "2023-08-15T18:49:00.840207Z", - "iopub.status.idle": "2023-08-15T18:49:00.842474Z", - "shell.execute_reply": "2023-08-15T18:49:00.842219Z" + "iopub.execute_input": "2023-08-21T03:36:08.070903Z", + "iopub.status.busy": "2023-08-21T03:36:08.070799Z", + "iopub.status.idle": "2023-08-21T03:36:08.072959Z", + "shell.execute_reply": "2023-08-21T03:36:08.072701Z" }, "lines_to_next_cell": 0 }, @@ -2991,7 +2991,7 @@ }, { "cell_type": "markdown", - "id": "117d1718", + "id": "d83fadb5", "metadata": {}, "source": [ "We now set two of the elements to `True`. " @@ -3000,13 +3000,13 @@ { "cell_type": "code", "execution_count": 68, - "id": "683f49a3", + "id": "348820e3", "metadata": { "execution": { - "iopub.execute_input": "2023-08-15T18:49:00.843979Z", - "iopub.status.busy": "2023-08-15T18:49:00.843879Z", - "iopub.status.idle": "2023-08-15T18:49:00.846073Z", - "shell.execute_reply": "2023-08-15T18:49:00.845769Z" + "iopub.execute_input": "2023-08-21T03:36:08.074422Z", + "iopub.status.busy": "2023-08-21T03:36:08.074322Z", + "iopub.status.idle": "2023-08-21T03:36:08.076398Z", + "shell.execute_reply": "2023-08-21T03:36:08.076106Z" } }, "outputs": [ @@ -3028,7 +3028,7 @@ }, { "cell_type": "markdown", - "id": "5036e0f2", + "id": "a0fb487d", "metadata": {}, "source": [ "Note that the elements of `keep_rows`, when viewed as integers, are the same as the\n", @@ -3039,13 +3039,13 @@ { "cell_type": "code", "execution_count": 69, - "id": "ede73656", + "id": "4aafe45b", "metadata": { "execution": { - "iopub.execute_input": "2023-08-15T18:49:00.847573Z", - "iopub.status.busy": "2023-08-15T18:49:00.847472Z", - "iopub.status.idle": "2023-08-15T18:49:00.849818Z", - "shell.execute_reply": "2023-08-15T18:49:00.849531Z" + "iopub.execute_input": "2023-08-21T03:36:08.077952Z", + "iopub.status.busy": "2023-08-21T03:36:08.077853Z", + "iopub.status.idle": "2023-08-21T03:36:08.080163Z", + "shell.execute_reply": "2023-08-21T03:36:08.079901Z" } }, "outputs": [ @@ -3066,7 +3066,7 @@ }, { "cell_type": "markdown", - "id": "45587df2", + "id": "603c0c53", "metadata": {}, "source": [ "(Here, the function `np.all()` has checked whether\n", @@ -3075,7 +3075,7 @@ }, { "cell_type": "markdown", - "id": "cd3e2b53", + "id": "b0a449d1", "metadata": {}, "source": [ " However, even though `np.array([0,1,0,1])` and `keep_rows` are equal according to `==`, they index different sets of rows!\n", @@ -3085,13 +3085,13 @@ { "cell_type": "code", "execution_count": 70, - "id": "f65c75d6", + "id": "1be6a588", "metadata": { "execution": { - "iopub.execute_input": "2023-08-15T18:49:00.851339Z", - "iopub.status.busy": "2023-08-15T18:49:00.851241Z", - "iopub.status.idle": "2023-08-15T18:49:00.853566Z", - "shell.execute_reply": "2023-08-15T18:49:00.853301Z" + "iopub.execute_input": "2023-08-21T03:36:08.081637Z", + "iopub.status.busy": "2023-08-21T03:36:08.081537Z", + "iopub.status.idle": "2023-08-21T03:36:08.083796Z", + "shell.execute_reply": "2023-08-21T03:36:08.083505Z" } }, "outputs": [ @@ -3115,7 +3115,7 @@ }, { "cell_type": "markdown", - "id": "12479298", + "id": "e45bbebe", "metadata": {}, "source": [ " By contrast, `keep_rows` retrieves only the second and fourth rows of `A` --- i.e. the rows for which the Boolean equals `TRUE`. " @@ -3124,13 +3124,13 @@ { "cell_type": "code", "execution_count": 71, - "id": "31a8ff76", + "id": "e83da57b", "metadata": { "execution": { - "iopub.execute_input": "2023-08-15T18:49:00.855023Z", - "iopub.status.busy": "2023-08-15T18:49:00.854922Z", - "iopub.status.idle": "2023-08-15T18:49:00.857083Z", - "shell.execute_reply": "2023-08-15T18:49:00.856833Z" + "iopub.execute_input": "2023-08-21T03:36:08.085319Z", + "iopub.status.busy": "2023-08-21T03:36:08.085216Z", + "iopub.status.idle": "2023-08-21T03:36:08.087359Z", + "shell.execute_reply": "2023-08-21T03:36:08.087095Z" } }, "outputs": [ @@ -3152,7 +3152,7 @@ }, { "cell_type": "markdown", - "id": "40932333", + "id": "374d34a7", "metadata": {}, "source": [ "This example shows that Booleans and integers are treated differently by `numpy`." @@ -3160,7 +3160,7 @@ }, { "cell_type": "markdown", - "id": "8751cf99", + "id": "25db74bf", "metadata": {}, "source": [ "We again make use of the `np.ix_()` function\n", @@ -3171,13 +3171,13 @@ { "cell_type": "code", "execution_count": 72, - "id": "c91f330e", + "id": "09675294", "metadata": { "execution": { - "iopub.execute_input": "2023-08-15T18:49:00.858714Z", - "iopub.status.busy": "2023-08-15T18:49:00.858613Z", - "iopub.status.idle": "2023-08-15T18:49:00.861203Z", - "shell.execute_reply": "2023-08-15T18:49:00.860913Z" + "iopub.execute_input": "2023-08-21T03:36:08.088904Z", + "iopub.status.busy": "2023-08-21T03:36:08.088804Z", + "iopub.status.idle": "2023-08-21T03:36:08.091266Z", + "shell.execute_reply": "2023-08-21T03:36:08.090985Z" } }, "outputs": [ @@ -3202,7 +3202,7 @@ }, { "cell_type": "markdown", - "id": "e8b9619b", + "id": "0166c179", "metadata": {}, "source": [ "We can also mix a list with an array of Booleans in the arguments to `np.ix_()`:" @@ -3211,13 +3211,13 @@ { "cell_type": "code", "execution_count": 73, - "id": "fb53de70", + "id": "a85614e4", "metadata": { "execution": { - "iopub.execute_input": "2023-08-15T18:49:00.862684Z", - "iopub.status.busy": "2023-08-15T18:49:00.862579Z", - "iopub.status.idle": "2023-08-15T18:49:00.864973Z", - "shell.execute_reply": "2023-08-15T18:49:00.864715Z" + "iopub.execute_input": "2023-08-21T03:36:08.092757Z", + "iopub.status.busy": "2023-08-21T03:36:08.092664Z", + "iopub.status.idle": "2023-08-21T03:36:08.094873Z", + "shell.execute_reply": "2023-08-21T03:36:08.094581Z" }, "lines_to_next_cell": 0 }, @@ -3241,7 +3241,7 @@ }, { "cell_type": "markdown", - "id": "18f16a0a", + "id": "f6a338f1", "metadata": {}, "source": [ " " @@ -3249,7 +3249,7 @@ }, { "cell_type": "markdown", - "id": "f6e932f4", + "id": "b3541e0c", "metadata": {}, "source": [ "For more details on indexing in `numpy`, readers are referred\n", @@ -3258,7 +3258,7 @@ }, { "cell_type": "markdown", - "id": "8c59352f", + "id": "ab75f168", "metadata": {}, "source": [ "## Loading Data\n", @@ -3275,7 +3275,7 @@ }, { "cell_type": "markdown", - "id": "4417d4d4", + "id": "ca018d13", "metadata": {}, "source": [ "### Reading in a Data Set\n", @@ -3294,7 +3294,7 @@ }, { "cell_type": "markdown", - "id": "f9fd0896", + "id": "b76342df", "metadata": {}, "source": [ "We will begin by reading in `Auto.csv`, available on the book website. This is a comma-separated file, and can be read in using `pd.read_csv()`: " @@ -3303,13 +3303,13 @@ { "cell_type": "code", "execution_count": 74, - "id": "cc87ed8c", + "id": "ff81e644", "metadata": { "execution": { - "iopub.execute_input": "2023-08-15T18:49:00.866686Z", - "iopub.status.busy": "2023-08-15T18:49:00.866579Z", - "iopub.status.idle": "2023-08-15T18:49:01.152579Z", - "shell.execute_reply": "2023-08-15T18:49:01.152290Z" + "iopub.execute_input": "2023-08-21T03:36:08.096546Z", + "iopub.status.busy": "2023-08-21T03:36:08.096449Z", + "iopub.status.idle": "2023-08-21T03:36:08.317557Z", + "shell.execute_reply": "2023-08-21T03:36:08.317278Z" } }, "outputs": [ @@ -3526,7 +3526,7 @@ }, { "cell_type": "markdown", - "id": "5c4cf682", + "id": "42d6a799", "metadata": {}, "source": [ "The book website also has a whitespace-delimited version of this data, called `Auto.data`. This can be read in as follows:" @@ -3535,13 +3535,13 @@ { "cell_type": "code", "execution_count": 75, - "id": "69b34e00", + "id": "5b45aa7f", "metadata": { "execution": { - "iopub.execute_input": "2023-08-15T18:49:01.154192Z", - "iopub.status.busy": "2023-08-15T18:49:01.154082Z", - "iopub.status.idle": "2023-08-15T18:49:01.157257Z", - "shell.execute_reply": "2023-08-15T18:49:01.157026Z" + "iopub.execute_input": "2023-08-21T03:36:08.319194Z", + "iopub.status.busy": "2023-08-21T03:36:08.319082Z", + "iopub.status.idle": "2023-08-21T03:36:08.322312Z", + "shell.execute_reply": "2023-08-21T03:36:08.322063Z" }, "lines_to_next_cell": 0 }, @@ -3552,7 +3552,7 @@ }, { "cell_type": "markdown", - "id": "61b12987", + "id": "f942c457", "metadata": {}, "source": [ " Both `Auto.csv` and `Auto.data` are simply text\n", @@ -3563,7 +3563,7 @@ }, { "cell_type": "markdown", - "id": "8de34877", + "id": "1aceff38", "metadata": {}, "source": [ "We now take a look at the column of `Auto` corresponding to the variable `horsepower`: " @@ -3572,13 +3572,13 @@ { "cell_type": "code", "execution_count": 76, - "id": "c45b3e32", + "id": "413f626a", "metadata": { "execution": { - "iopub.execute_input": "2023-08-15T18:49:01.158784Z", - "iopub.status.busy": "2023-08-15T18:49:01.158680Z", - "iopub.status.idle": "2023-08-15T18:49:01.161285Z", - "shell.execute_reply": "2023-08-15T18:49:01.161037Z" + "iopub.execute_input": "2023-08-21T03:36:08.323776Z", + "iopub.status.busy": "2023-08-21T03:36:08.323686Z", + "iopub.status.idle": "2023-08-21T03:36:08.326230Z", + "shell.execute_reply": "2023-08-21T03:36:08.325989Z" }, "lines_to_next_cell": 0 }, @@ -3611,7 +3611,7 @@ }, { "cell_type": "markdown", - "id": "7b5df8f9", + "id": "fd11e757", "metadata": {}, "source": [ "We see that the `dtype` of this column is `object`. \n", @@ -3623,13 +3623,13 @@ { "cell_type": "code", "execution_count": 77, - "id": "fdac0ada", + "id": "57b86346", "metadata": { "execution": { - "iopub.execute_input": "2023-08-15T18:49:01.162652Z", - "iopub.status.busy": "2023-08-15T18:49:01.162556Z", - "iopub.status.idle": "2023-08-15T18:49:01.164858Z", - "shell.execute_reply": "2023-08-15T18:49:01.164626Z" + "iopub.execute_input": "2023-08-21T03:36:08.327630Z", + "iopub.status.busy": "2023-08-21T03:36:08.327527Z", + "iopub.status.idle": "2023-08-21T03:36:08.329871Z", + "shell.execute_reply": "2023-08-21T03:36:08.329620Z" }, "lines_to_next_cell": 0 }, @@ -3664,7 +3664,7 @@ }, { "cell_type": "markdown", - "id": "dc6e92aa", + "id": "f0aee233", "metadata": {}, "source": [ "We see the culprit is the value `?`, which is being used to encode missing values.\n", @@ -3673,7 +3673,7 @@ }, { "cell_type": "markdown", - "id": "f15457ad", + "id": "b7b032d4", "metadata": {}, "source": [ "To fix the problem, we must provide `pd.read_csv()` with an argument called `na_values`.\n", @@ -3684,13 +3684,13 @@ { "cell_type": "code", "execution_count": 78, - "id": "883e0b73", + "id": "a9698b26", "metadata": { "execution": { - "iopub.execute_input": "2023-08-15T18:49:01.166263Z", - "iopub.status.busy": "2023-08-15T18:49:01.166173Z", - "iopub.status.idle": "2023-08-15T18:49:01.169588Z", - "shell.execute_reply": "2023-08-15T18:49:01.169351Z" + "iopub.execute_input": "2023-08-21T03:36:08.331328Z", + "iopub.status.busy": "2023-08-21T03:36:08.331230Z", + "iopub.status.idle": "2023-08-21T03:36:08.334947Z", + "shell.execute_reply": "2023-08-21T03:36:08.334715Z" }, "lines_to_next_cell": 2 }, @@ -3715,7 +3715,7 @@ }, { "cell_type": "markdown", - "id": "cbc53f2a", + "id": "13cb364e", "metadata": {}, "source": [ "The `Auto.shape` attribute tells us that the data has 397\n", @@ -3725,13 +3725,13 @@ { "cell_type": "code", "execution_count": 79, - "id": "c733c1e8", + "id": "4877cb2c", "metadata": { "execution": { - "iopub.execute_input": "2023-08-15T18:49:01.170985Z", - "iopub.status.busy": "2023-08-15T18:49:01.170894Z", - "iopub.status.idle": "2023-08-15T18:49:01.173006Z", - "shell.execute_reply": "2023-08-15T18:49:01.172777Z" + "iopub.execute_input": "2023-08-21T03:36:08.336400Z", + "iopub.status.busy": "2023-08-21T03:36:08.336322Z", + "iopub.status.idle": "2023-08-21T03:36:08.338340Z", + "shell.execute_reply": "2023-08-21T03:36:08.338101Z" } }, "outputs": [ @@ -3752,7 +3752,7 @@ }, { "cell_type": "markdown", - "id": "94c32cfb", + "id": "3fdc6f47", "metadata": {}, "source": [ "There are\n", @@ -3764,13 +3764,13 @@ { "cell_type": "code", "execution_count": 80, - "id": "0e0e9956", + "id": "2ba1d33d", "metadata": { "execution": { - "iopub.execute_input": "2023-08-15T18:49:01.174378Z", - "iopub.status.busy": "2023-08-15T18:49:01.174286Z", - "iopub.status.idle": "2023-08-15T18:49:01.177052Z", - "shell.execute_reply": "2023-08-15T18:49:01.176811Z" + "iopub.execute_input": "2023-08-21T03:36:08.339714Z", + "iopub.status.busy": "2023-08-21T03:36:08.339640Z", + "iopub.status.idle": "2023-08-21T03:36:08.342116Z", + "shell.execute_reply": "2023-08-21T03:36:08.341883Z" }, "lines_to_next_cell": 2 }, @@ -3793,7 +3793,7 @@ }, { "cell_type": "markdown", - "id": "7250498b", + "id": "ac9748d9", "metadata": {}, "source": [ "### Basics of Selecting Rows and Columns\n", @@ -3804,13 +3804,13 @@ { "cell_type": "code", "execution_count": 81, - "id": "0477b4ff", + "id": "3d03baab", "metadata": { "execution": { - "iopub.execute_input": "2023-08-15T18:49:01.178507Z", - "iopub.status.busy": "2023-08-15T18:49:01.178399Z", - "iopub.status.idle": "2023-08-15T18:49:01.180581Z", - "shell.execute_reply": "2023-08-15T18:49:01.180288Z" + "iopub.execute_input": "2023-08-21T03:36:08.343548Z", + "iopub.status.busy": "2023-08-21T03:36:08.343471Z", + "iopub.status.idle": "2023-08-21T03:36:08.345627Z", + "shell.execute_reply": "2023-08-21T03:36:08.345379Z" }, "lines_to_next_cell": 2 }, @@ -3835,7 +3835,7 @@ }, { "cell_type": "markdown", - "id": "c2084300", + "id": "d24d4d42", "metadata": {}, "source": [ "Accessing the rows and columns of a data frame is similar, but not identical, to accessing the rows and columns of an array. \n", @@ -3848,13 +3848,13 @@ { "cell_type": "code", "execution_count": 82, - "id": "a989e541", + "id": "410b4dd7", "metadata": { "execution": { - "iopub.execute_input": "2023-08-15T18:49:01.182149Z", - "iopub.status.busy": "2023-08-15T18:49:01.182047Z", - "iopub.status.idle": "2023-08-15T18:49:01.186385Z", - "shell.execute_reply": "2023-08-15T18:49:01.186138Z" + "iopub.execute_input": "2023-08-21T03:36:08.347031Z", + "iopub.status.busy": "2023-08-21T03:36:08.346955Z", + "iopub.status.idle": "2023-08-21T03:36:08.351303Z", + "shell.execute_reply": "2023-08-21T03:36:08.351081Z" }, "lines_to_next_cell": 0 }, @@ -3955,7 +3955,7 @@ }, { "cell_type": "markdown", - "id": "b5af114e", + "id": "4ea0be7b", "metadata": {}, "source": [ "Similarly, an array of Booleans can be used to subset the rows:" @@ -3964,13 +3964,13 @@ { "cell_type": "code", "execution_count": 83, - "id": "d336e7ce", + "id": "3540804d", "metadata": { "execution": { - "iopub.execute_input": "2023-08-15T18:49:01.187796Z", - "iopub.status.busy": "2023-08-15T18:49:01.187719Z", - "iopub.status.idle": "2023-08-15T18:49:01.200825Z", - "shell.execute_reply": "2023-08-15T18:49:01.200533Z" + "iopub.execute_input": "2023-08-21T03:36:08.352671Z", + "iopub.status.busy": "2023-08-21T03:36:08.352588Z", + "iopub.status.idle": "2023-08-21T03:36:08.365290Z", + "shell.execute_reply": "2023-08-21T03:36:08.365017Z" }, "lines_to_next_cell": 0 }, @@ -4842,7 +4842,7 @@ }, { "cell_type": "markdown", - "id": "2f09c4df", + "id": "a02221a2", "metadata": {}, "source": [ "However, if we pass in a list of strings to the `[]` method, then we obtain a data frame containing the corresponding set of *columns*. " @@ -4851,13 +4851,13 @@ { "cell_type": "code", "execution_count": 84, - "id": "88e9a63b", + "id": "66d174f1", "metadata": { "execution": { - "iopub.execute_input": "2023-08-15T18:49:01.202619Z", - "iopub.status.busy": "2023-08-15T18:49:01.202479Z", - "iopub.status.idle": "2023-08-15T18:49:01.207774Z", - "shell.execute_reply": "2023-08-15T18:49:01.207524Z" + "iopub.execute_input": "2023-08-21T03:36:08.366746Z", + "iopub.status.busy": "2023-08-21T03:36:08.366648Z", + "iopub.status.idle": "2023-08-21T03:36:08.371142Z", + "shell.execute_reply": "2023-08-21T03:36:08.370889Z" }, "lines_to_next_cell": 0 }, @@ -4976,7 +4976,7 @@ }, { "cell_type": "markdown", - "id": "b372687d", + "id": "54bef6a3", "metadata": {}, "source": [ "Since we did not specify an *index* column when we loaded our data frame, the rows are labeled using integers\n", @@ -4986,13 +4986,13 @@ { "cell_type": "code", "execution_count": 85, - "id": "aed049d8", + "id": "52789c77", "metadata": { "execution": { - "iopub.execute_input": "2023-08-15T18:49:01.209353Z", - "iopub.status.busy": "2023-08-15T18:49:01.209247Z", - "iopub.status.idle": "2023-08-15T18:49:01.211692Z", - "shell.execute_reply": "2023-08-15T18:49:01.211381Z" + "iopub.execute_input": "2023-08-21T03:36:08.372548Z", + "iopub.status.busy": "2023-08-21T03:36:08.372468Z", + "iopub.status.idle": "2023-08-21T03:36:08.374676Z", + "shell.execute_reply": "2023-08-21T03:36:08.374427Z" }, "lines_to_next_cell": 0 }, @@ -5017,7 +5017,7 @@ }, { "cell_type": "markdown", - "id": "f18f3695", + "id": "3f5fcb26", "metadata": {}, "source": [ "We can use the\n", @@ -5027,13 +5027,13 @@ { "cell_type": "code", "execution_count": 86, - "id": "c93cefd3", + "id": "d83650bf", "metadata": { "execution": { - "iopub.execute_input": "2023-08-15T18:49:01.213226Z", - "iopub.status.busy": "2023-08-15T18:49:01.213124Z", - "iopub.status.idle": "2023-08-15T18:49:01.219346Z", - "shell.execute_reply": "2023-08-15T18:49:01.219084Z" + "iopub.execute_input": "2023-08-21T03:36:08.376096Z", + "iopub.status.busy": "2023-08-21T03:36:08.376016Z", + "iopub.status.idle": "2023-08-21T03:36:08.382023Z", + "shell.execute_reply": "2023-08-21T03:36:08.381780Z" } }, "outputs": [ @@ -5251,13 +5251,13 @@ { "cell_type": "code", "execution_count": 87, - "id": "84947a78", + "id": "880d79d9", "metadata": { "execution": { - "iopub.execute_input": "2023-08-15T18:49:01.220731Z", - "iopub.status.busy": "2023-08-15T18:49:01.220656Z", - "iopub.status.idle": "2023-08-15T18:49:01.222770Z", - "shell.execute_reply": "2023-08-15T18:49:01.222521Z" + "iopub.execute_input": "2023-08-21T03:36:08.383342Z", + "iopub.status.busy": "2023-08-21T03:36:08.383266Z", + "iopub.status.idle": "2023-08-21T03:36:08.385348Z", + "shell.execute_reply": "2023-08-21T03:36:08.385111Z" }, "lines_to_next_cell": 0 }, @@ -5281,7 +5281,7 @@ }, { "cell_type": "markdown", - "id": "fc160806", + "id": "dbee53b8", "metadata": {}, "source": [ "We see that the column `'name'` is no longer there.\n", @@ -5294,13 +5294,13 @@ { "cell_type": "code", "execution_count": 88, - "id": "7ee59fae", + "id": "c01f4095", "metadata": { "execution": { - "iopub.execute_input": "2023-08-15T18:49:01.224183Z", - "iopub.status.busy": "2023-08-15T18:49:01.224083Z", - "iopub.status.idle": "2023-08-15T18:49:01.229143Z", - "shell.execute_reply": "2023-08-15T18:49:01.228880Z" + "iopub.execute_input": "2023-08-21T03:36:08.386800Z", + "iopub.status.busy": "2023-08-21T03:36:08.386719Z", + "iopub.status.idle": "2023-08-21T03:36:08.390900Z", + "shell.execute_reply": "2023-08-21T03:36:08.390675Z" }, "lines_to_next_cell": 0 }, @@ -5398,7 +5398,7 @@ }, { "cell_type": "markdown", - "id": "232fe34c", + "id": "29688cab", "metadata": {}, "source": [ "As an alternative to using the index name, we could retrieve the 4th and 5th rows of `Auto` using the `{iloc[]`} method:" @@ -5407,13 +5407,13 @@ { "cell_type": "code", "execution_count": 89, - "id": "4b5a0e01", + "id": "a4202eb8", "metadata": { "execution": { - "iopub.execute_input": "2023-08-15T18:49:01.230515Z", - "iopub.status.busy": "2023-08-15T18:49:01.230412Z", - "iopub.status.idle": "2023-08-15T18:49:01.234647Z", - "shell.execute_reply": "2023-08-15T18:49:01.234396Z" + "iopub.execute_input": "2023-08-21T03:36:08.392405Z", + "iopub.status.busy": "2023-08-21T03:36:08.392322Z", + "iopub.status.idle": "2023-08-21T03:36:08.396509Z", + "shell.execute_reply": "2023-08-21T03:36:08.396244Z" }, "lines_to_next_cell": 0 }, @@ -5510,7 +5510,7 @@ }, { "cell_type": "markdown", - "id": "6c409a01", + "id": "5427ede0", "metadata": {}, "source": [ "We can also use it to retrieve the 1st, 3rd and and 4th columns of `Auto_re`:" @@ -5519,13 +5519,13 @@ { "cell_type": "code", "execution_count": 90, - "id": "8814803e", + "id": "948b2d07", "metadata": { "execution": { - "iopub.execute_input": "2023-08-15T18:49:01.236161Z", - "iopub.status.busy": "2023-08-15T18:49:01.236068Z", - "iopub.status.idle": "2023-08-15T18:49:01.240725Z", - "shell.execute_reply": "2023-08-15T18:49:01.240476Z" + "iopub.execute_input": "2023-08-21T03:36:08.397917Z", + "iopub.status.busy": "2023-08-21T03:36:08.397838Z", + "iopub.status.idle": "2023-08-21T03:36:08.402447Z", + "shell.execute_reply": "2023-08-21T03:36:08.402192Z" }, "lines_to_next_cell": 0 }, @@ -5663,7 +5663,7 @@ }, { "cell_type": "markdown", - "id": "f02f0d24", + "id": "b83d56eb", "metadata": {}, "source": [ "We can extract the 4th and 5th rows, as well as the 1st, 3rd and 4th columns, using\n", @@ -5673,13 +5673,13 @@ { "cell_type": "code", "execution_count": 91, - "id": "c7567dd0", + "id": "1cfdcc5c", "metadata": { "execution": { - "iopub.execute_input": "2023-08-15T18:49:01.242172Z", - "iopub.status.busy": "2023-08-15T18:49:01.242093Z", - "iopub.status.idle": "2023-08-15T18:49:01.245535Z", - "shell.execute_reply": "2023-08-15T18:49:01.245278Z" + "iopub.execute_input": "2023-08-21T03:36:08.403773Z", + "iopub.status.busy": "2023-08-21T03:36:08.403692Z", + "iopub.status.idle": "2023-08-21T03:36:08.407036Z", + "shell.execute_reply": "2023-08-21T03:36:08.406794Z" }, "lines_to_next_cell": 0 }, @@ -5751,7 +5751,7 @@ }, { "cell_type": "markdown", - "id": "3073ab09", + "id": "2bde6514", "metadata": {}, "source": [ "Index entries need not be unique: there are several cars in the data frame named `ford galaxie 500`." @@ -5760,13 +5760,13 @@ { "cell_type": "code", "execution_count": 92, - "id": "63638341", + "id": "fd9c5cda", "metadata": { "execution": { - "iopub.execute_input": "2023-08-15T18:49:01.246909Z", - "iopub.status.busy": "2023-08-15T18:49:01.246831Z", - "iopub.status.idle": "2023-08-15T18:49:01.250226Z", - "shell.execute_reply": "2023-08-15T18:49:01.249979Z" + "iopub.execute_input": "2023-08-21T03:36:08.408461Z", + "iopub.status.busy": "2023-08-21T03:36:08.408387Z", + "iopub.status.idle": "2023-08-21T03:36:08.411673Z", + "shell.execute_reply": "2023-08-21T03:36:08.411429Z" }, "lines_to_next_cell": 0 }, @@ -5840,7 +5840,7 @@ }, { "cell_type": "markdown", - "id": "2fbe4a9b", + "id": "4d097282", "metadata": {}, "source": [ "### More on Selecting Rows and Columns\n", @@ -5853,13 +5853,13 @@ { "cell_type": "code", "execution_count": 93, - "id": "57d6de11", + "id": "6d431cb5", "metadata": { "execution": { - "iopub.execute_input": "2023-08-15T18:49:01.251615Z", - "iopub.status.busy": "2023-08-15T18:49:01.251531Z", - "iopub.status.idle": "2023-08-15T18:49:01.257033Z", - "shell.execute_reply": "2023-08-15T18:49:01.256798Z" + "iopub.execute_input": "2023-08-21T03:36:08.413092Z", + "iopub.status.busy": "2023-08-21T03:36:08.413016Z", + "iopub.status.idle": "2023-08-21T03:36:08.418535Z", + "shell.execute_reply": "2023-08-21T03:36:08.418303Z" }, "lines_to_next_cell": 2 }, @@ -6264,7 +6264,7 @@ }, { "cell_type": "markdown", - "id": "a58067ce", + "id": "838a03e0", "metadata": {}, "source": [ "To do this more concisely, we can use an anonymous function called a `lambda`: " @@ -6273,13 +6273,13 @@ { "cell_type": "code", "execution_count": 94, - "id": "ed95866c", + "id": "fac41ce1", "metadata": { "execution": { - "iopub.execute_input": "2023-08-15T18:49:01.258351Z", - "iopub.status.busy": "2023-08-15T18:49:01.258278Z", - "iopub.status.idle": "2023-08-15T18:49:01.263791Z", - "shell.execute_reply": "2023-08-15T18:49:01.263537Z" + "iopub.execute_input": "2023-08-21T03:36:08.419882Z", + "iopub.status.busy": "2023-08-21T03:36:08.419806Z", + "iopub.status.idle": "2023-08-21T03:36:08.425319Z", + "shell.execute_reply": "2023-08-21T03:36:08.425073Z" }, "lines_to_next_cell": 0 }, @@ -6683,7 +6683,7 @@ }, { "cell_type": "markdown", - "id": "13bb6d1f", + "id": "08e61254", "metadata": {}, "source": [ "The `lambda` call creates a function that takes a single\n", @@ -6697,13 +6697,13 @@ { "cell_type": "code", "execution_count": 95, - "id": "e3725c98", + "id": "b0885654", "metadata": { "execution": { - "iopub.execute_input": "2023-08-15T18:49:01.265199Z", - "iopub.status.busy": "2023-08-15T18:49:01.265115Z", - "iopub.status.idle": "2023-08-15T18:49:01.269816Z", - "shell.execute_reply": "2023-08-15T18:49:01.269583Z" + "iopub.execute_input": "2023-08-21T03:36:08.426701Z", + "iopub.status.busy": "2023-08-21T03:36:08.426621Z", + "iopub.status.idle": "2023-08-21T03:36:08.431378Z", + "shell.execute_reply": "2023-08-21T03:36:08.431148Z" }, "lines_to_next_cell": 0 }, @@ -6965,7 +6965,7 @@ }, { "cell_type": "markdown", - "id": "6da7a099", + "id": "d87fc459", "metadata": {}, "source": [ "The symbol `&` computes an element-wise *and* operation.\n", @@ -6977,13 +6977,13 @@ { "cell_type": "code", "execution_count": 96, - "id": "f617c333", + "id": "213945a6", "metadata": { "execution": { - "iopub.execute_input": "2023-08-15T18:49:01.271218Z", - "iopub.status.busy": "2023-08-15T18:49:01.271142Z", - "iopub.status.idle": "2023-08-15T18:49:01.277457Z", - "shell.execute_reply": "2023-08-15T18:49:01.277189Z" + "iopub.execute_input": "2023-08-21T03:36:08.432780Z", + "iopub.status.busy": "2023-08-21T03:36:08.432696Z", + "iopub.status.idle": "2023-08-21T03:36:08.438473Z", + "shell.execute_reply": "2023-08-21T03:36:08.438250Z" }, "lines_to_next_cell": 0 }, @@ -7349,7 +7349,7 @@ }, { "cell_type": "markdown", - "id": "924428a0", + "id": "8a940fd1", "metadata": {}, "source": [ "Here, the symbol `|` computes an element-wise *or* operation.\n", @@ -7368,13 +7368,13 @@ { "cell_type": "code", "execution_count": 97, - "id": "17f13a72", + "id": "a3c4060a", "metadata": { "execution": { - "iopub.execute_input": "2023-08-15T18:49:01.278887Z", - "iopub.status.busy": "2023-08-15T18:49:01.278782Z", - "iopub.status.idle": "2023-08-15T18:49:01.280597Z", - "shell.execute_reply": "2023-08-15T18:49:01.280357Z" + "iopub.execute_input": "2023-08-21T03:36:08.439902Z", + "iopub.status.busy": "2023-08-21T03:36:08.439825Z", + "iopub.status.idle": "2023-08-21T03:36:08.441707Z", + "shell.execute_reply": "2023-08-21T03:36:08.441464Z" }, "lines_to_next_cell": 0 }, @@ -7396,7 +7396,7 @@ }, { "cell_type": "markdown", - "id": "15f0c1b1", + "id": "9117e3a1", "metadata": {}, "source": [ "The indented code beneath the line with the `for` statement is run\n", @@ -7412,13 +7412,13 @@ { "cell_type": "code", "execution_count": 98, - "id": "07e6a011", + "id": "f2bffb69", "metadata": { "execution": { - "iopub.execute_input": "2023-08-15T18:49:01.282018Z", - "iopub.status.busy": "2023-08-15T18:49:01.281918Z", - "iopub.status.idle": "2023-08-15T18:49:01.283785Z", - "shell.execute_reply": "2023-08-15T18:49:01.283534Z" + "iopub.execute_input": "2023-08-21T03:36:08.443349Z", + "iopub.status.busy": "2023-08-21T03:36:08.443241Z", + "iopub.status.idle": "2023-08-21T03:36:08.445173Z", + "shell.execute_reply": "2023-08-21T03:36:08.444935Z" }, "lines_to_next_cell": 0 }, @@ -7441,7 +7441,7 @@ }, { "cell_type": "markdown", - "id": "fd8124cb", + "id": "9f99e85b", "metadata": {}, "source": [ "Above, we summed over each combination of `value` and `weight`.\n", @@ -7464,13 +7464,13 @@ { "cell_type": "code", "execution_count": 99, - "id": "377ab16f", + "id": "ee827a53", "metadata": { "execution": { - "iopub.execute_input": "2023-08-15T18:49:01.285159Z", - "iopub.status.busy": "2023-08-15T18:49:01.285060Z", - "iopub.status.idle": "2023-08-15T18:49:01.286977Z", - "shell.execute_reply": "2023-08-15T18:49:01.286756Z" + "iopub.execute_input": "2023-08-21T03:36:08.446610Z", + "iopub.status.busy": "2023-08-21T03:36:08.446520Z", + "iopub.status.idle": "2023-08-21T03:36:08.448323Z", + "shell.execute_reply": "2023-08-21T03:36:08.448070Z" } }, "outputs": [ @@ -7492,7 +7492,7 @@ }, { "cell_type": "markdown", - "id": "345a595b", + "id": "dec18466", "metadata": {}, "source": [ "### String Formatting\n", @@ -7519,13 +7519,13 @@ { "cell_type": "code", "execution_count": 100, - "id": "91276344", + "id": "3a097fbc", "metadata": { "execution": { - "iopub.execute_input": "2023-08-15T18:49:01.288402Z", - "iopub.status.busy": "2023-08-15T18:49:01.288304Z", - "iopub.status.idle": "2023-08-15T18:49:01.293596Z", - "shell.execute_reply": "2023-08-15T18:49:01.293335Z" + "iopub.execute_input": "2023-08-21T03:36:08.449714Z", + "iopub.status.busy": "2023-08-21T03:36:08.449623Z", + "iopub.status.idle": "2023-08-21T03:36:08.454097Z", + "shell.execute_reply": "2023-08-21T03:36:08.453813Z" }, "lines_to_next_cell": 2 }, @@ -7615,13 +7615,13 @@ { "cell_type": "code", "execution_count": 101, - "id": "c655fcd1", + "id": "e064e170", "metadata": { "execution": { - "iopub.execute_input": "2023-08-15T18:49:01.294914Z", - "iopub.status.busy": "2023-08-15T18:49:01.294824Z", - "iopub.status.idle": "2023-08-15T18:49:01.297196Z", - "shell.execute_reply": "2023-08-15T18:49:01.296959Z" + "iopub.execute_input": "2023-08-21T03:36:08.455528Z", + "iopub.status.busy": "2023-08-21T03:36:08.455447Z", + "iopub.status.idle": "2023-08-21T03:36:08.457783Z", + "shell.execute_reply": "2023-08-21T03:36:08.457543Z" }, "lines_to_next_cell": 0 }, @@ -7647,7 +7647,7 @@ }, { "cell_type": "markdown", - "id": "7267a350", + "id": "7a3e4dd8", "metadata": {}, "source": [ "We see that the `template.format()` method expects two arguments `{0}`\n", @@ -7661,7 +7661,7 @@ }, { "cell_type": "markdown", - "id": "763fe84a", + "id": "d8fd496a", "metadata": {}, "source": [ "## Additional Graphical and Numerical Summaries\n", @@ -7672,13 +7672,13 @@ { "cell_type": "code", "execution_count": 102, - "id": "cd9e0046", + "id": "c915ca52", "metadata": { "execution": { - "iopub.execute_input": "2023-08-15T18:49:01.298614Z", - "iopub.status.busy": "2023-08-15T18:49:01.298525Z", - "iopub.status.idle": "2023-08-15T18:49:01.391402Z", - "shell.execute_reply": "2023-08-15T18:49:01.391128Z" + "iopub.execute_input": "2023-08-21T03:36:08.459248Z", + "iopub.status.busy": "2023-08-21T03:36:08.459155Z", + "iopub.status.idle": "2023-08-21T03:36:08.552220Z", + "shell.execute_reply": "2023-08-21T03:36:08.551914Z" }, "lines_to_next_cell": 0 }, @@ -7712,7 +7712,7 @@ }, { "cell_type": "markdown", - "id": "0f0f16b8", + "id": "63d47021", "metadata": {}, "source": [ "We can address this by accessing the columns directly:" @@ -7721,13 +7721,13 @@ { "cell_type": "code", "execution_count": 103, - "id": "49d239e5", + "id": "65cd6d02", "metadata": { "execution": { - "iopub.execute_input": "2023-08-15T18:49:01.393117Z", - "iopub.status.busy": "2023-08-15T18:49:01.393003Z", - "iopub.status.idle": "2023-08-15T18:49:01.483359Z", - "shell.execute_reply": "2023-08-15T18:49:01.483063Z" + "iopub.execute_input": "2023-08-21T03:36:08.553877Z", + "iopub.status.busy": "2023-08-21T03:36:08.553770Z", + "iopub.status.idle": "2023-08-21T03:36:08.640715Z", + "shell.execute_reply": "2023-08-21T03:36:08.640411Z" }, "lines_to_next_cell": 0 }, @@ -7750,7 +7750,7 @@ }, { "cell_type": "markdown", - "id": "154e405c", + "id": "726836f0", "metadata": {}, "source": [ "Alternatively, we can use the `plot()` method with the call `Auto.plot()`.\n", @@ -7763,13 +7763,13 @@ { "cell_type": "code", "execution_count": 104, - "id": "5c892a6a", + "id": "76b5c0b1", "metadata": { "execution": { - "iopub.execute_input": "2023-08-15T18:49:01.485105Z", - "iopub.status.busy": "2023-08-15T18:49:01.484987Z", - "iopub.status.idle": "2023-08-15T18:49:01.581202Z", - "shell.execute_reply": "2023-08-15T18:49:01.580905Z" + "iopub.execute_input": "2023-08-21T03:36:08.642311Z", + "iopub.status.busy": "2023-08-21T03:36:08.642208Z", + "iopub.status.idle": "2023-08-21T03:36:08.737860Z", + "shell.execute_reply": "2023-08-21T03:36:08.737565Z" }, "lines_to_next_cell": 0 }, @@ -7792,7 +7792,7 @@ }, { "cell_type": "markdown", - "id": "74ed42da", + "id": "69c46251", "metadata": {}, "source": [ "If we want to save\n", @@ -7803,13 +7803,13 @@ { "cell_type": "code", "execution_count": 105, - "id": "92a626b0", + "id": "183a2c2b", "metadata": { "execution": { - "iopub.execute_input": "2023-08-15T18:49:01.582802Z", - "iopub.status.busy": "2023-08-15T18:49:01.582688Z", - "iopub.status.idle": "2023-08-15T18:49:01.623968Z", - "shell.execute_reply": "2023-08-15T18:49:01.623675Z" + "iopub.execute_input": "2023-08-21T03:36:08.739490Z", + "iopub.status.busy": "2023-08-21T03:36:08.739374Z", + "iopub.status.idle": "2023-08-21T03:36:08.779690Z", + "shell.execute_reply": "2023-08-21T03:36:08.779420Z" } }, "outputs": [], @@ -7820,7 +7820,7 @@ }, { "cell_type": "markdown", - "id": "7c47c9a8", + "id": "6f10cb46", "metadata": {}, "source": [ "We can further instruct the data frame to plot to a particular axes object. In this\n", @@ -7834,13 +7834,13 @@ { "cell_type": "code", "execution_count": 106, - "id": "bf9771b9", + "id": "75fbb981", "metadata": { "execution": { - "iopub.execute_input": "2023-08-15T18:49:01.625586Z", - "iopub.status.busy": "2023-08-15T18:49:01.625474Z", - "iopub.status.idle": "2023-08-15T18:49:01.795305Z", - "shell.execute_reply": "2023-08-15T18:49:01.795005Z" + "iopub.execute_input": "2023-08-21T03:36:08.781309Z", + "iopub.status.busy": "2023-08-21T03:36:08.781225Z", + "iopub.status.idle": "2023-08-21T03:36:08.949186Z", + "shell.execute_reply": "2023-08-21T03:36:08.948871Z" } }, "outputs": [ @@ -7862,7 +7862,7 @@ }, { "cell_type": "markdown", - "id": "a27e61c6", + "id": "53ffc0da", "metadata": {}, "source": [ "Note also that the columns of a data frame can be accessed as attributes: try typing in `Auto.horsepower`. " @@ -7870,7 +7870,7 @@ }, { "cell_type": "markdown", - "id": "7d4e028a", + "id": "1c4705e0", "metadata": {}, "source": [ "We now consider the `cylinders` variable. Typing in `Auto.cylinders.dtype` reveals that it is being treated as a quantitative variable. \n", @@ -7882,13 +7882,13 @@ { "cell_type": "code", "execution_count": 107, - "id": "745d2c5f", + "id": "55b3a1cc", "metadata": { "execution": { - "iopub.execute_input": "2023-08-15T18:49:01.797116Z", - "iopub.status.busy": "2023-08-15T18:49:01.796991Z", - "iopub.status.idle": "2023-08-15T18:49:01.802339Z", - "shell.execute_reply": "2023-08-15T18:49:01.802067Z" + "iopub.execute_input": "2023-08-21T03:36:08.950967Z", + "iopub.status.busy": "2023-08-21T03:36:08.950852Z", + "iopub.status.idle": "2023-08-21T03:36:08.953871Z", + "shell.execute_reply": "2023-08-21T03:36:08.953602Z" }, "lines_to_next_cell": 0 }, @@ -7911,7 +7911,7 @@ }, { "cell_type": "markdown", - "id": "d9c6dc9e", + "id": "adc75408", "metadata": {}, "source": [ " Now that `cylinders` is qualitative, we can display it using\n", @@ -7921,13 +7921,13 @@ { "cell_type": "code", "execution_count": 108, - "id": "8b1069bc", + "id": "f3d88794", "metadata": { "execution": { - "iopub.execute_input": "2023-08-15T18:49:01.803789Z", - "iopub.status.busy": "2023-08-15T18:49:01.803689Z", - "iopub.status.idle": "2023-08-15T18:49:01.912221Z", - "shell.execute_reply": "2023-08-15T18:49:01.911925Z" + "iopub.execute_input": "2023-08-21T03:36:08.955394Z", + "iopub.status.busy": "2023-08-21T03:36:08.955297Z", + "iopub.status.idle": "2023-08-21T03:36:09.060746Z", + "shell.execute_reply": "2023-08-21T03:36:09.060425Z" } }, "outputs": [ @@ -7949,7 +7949,7 @@ }, { "cell_type": "markdown", - "id": "f96288b4", + "id": "62d6582f", "metadata": {}, "source": [ "The `hist()` method can be used to plot a *histogram*." @@ -7958,13 +7958,13 @@ { "cell_type": "code", "execution_count": 109, - "id": "d9faa85a", + "id": "eea49f5b", "metadata": { "execution": { - "iopub.execute_input": "2023-08-15T18:49:01.914205Z", - "iopub.status.busy": "2023-08-15T18:49:01.914091Z", - "iopub.status.idle": "2023-08-15T18:49:02.015255Z", - "shell.execute_reply": "2023-08-15T18:49:02.014946Z" + "iopub.execute_input": "2023-08-21T03:36:09.062393Z", + "iopub.status.busy": "2023-08-21T03:36:09.062272Z", + "iopub.status.idle": "2023-08-21T03:36:09.164120Z", + "shell.execute_reply": "2023-08-21T03:36:09.163816Z" }, "lines_to_next_cell": 0 }, @@ -7987,7 +7987,7 @@ }, { "cell_type": "markdown", - "id": "8f743bb2", + "id": "c5a5933c", "metadata": {}, "source": [ "The color of the bars and the number of bins can be changed:" @@ -7996,13 +7996,13 @@ { "cell_type": "code", "execution_count": 110, - "id": "59d4a0b6", + "id": "d5bcfff8", "metadata": { "execution": { - "iopub.execute_input": "2023-08-15T18:49:02.016993Z", - "iopub.status.busy": "2023-08-15T18:49:02.016874Z", - "iopub.status.idle": "2023-08-15T18:49:02.114274Z", - "shell.execute_reply": "2023-08-15T18:49:02.113961Z" + "iopub.execute_input": "2023-08-21T03:36:09.165860Z", + "iopub.status.busy": "2023-08-21T03:36:09.165745Z", + "iopub.status.idle": "2023-08-21T03:36:09.262378Z", + "shell.execute_reply": "2023-08-21T03:36:09.262095Z" }, "lines_to_next_cell": 0 }, @@ -8025,7 +8025,7 @@ }, { "cell_type": "markdown", - "id": "59d4f72f", + "id": "60c36b6c", "metadata": {}, "source": [ " See `Auto.hist?` for more plotting\n", @@ -8038,13 +8038,13 @@ { "cell_type": "code", "execution_count": 111, - "id": "fb5ed57d", + "id": "edb66cae", "metadata": { "execution": { - "iopub.execute_input": "2023-08-15T18:49:02.115927Z", - "iopub.status.busy": "2023-08-15T18:49:02.115815Z", - "iopub.status.idle": "2023-08-15T18:49:03.055465Z", - "shell.execute_reply": "2023-08-15T18:49:03.055199Z" + "iopub.execute_input": "2023-08-21T03:36:09.264050Z", + "iopub.status.busy": "2023-08-21T03:36:09.263936Z", + "iopub.status.idle": "2023-08-21T03:36:10.182139Z", + "shell.execute_reply": "2023-08-21T03:36:10.181842Z" }, "lines_to_next_cell": 0 }, @@ -8066,7 +8066,7 @@ }, { "cell_type": "markdown", - "id": "7f671845", + "id": "0b162bd9", "metadata": {}, "source": [ " We can also produce scatterplots\n", @@ -8076,13 +8076,13 @@ { "cell_type": "code", "execution_count": 112, - "id": "8e117e38", + "id": "4f5d25d9", "metadata": { "execution": { - "iopub.execute_input": "2023-08-15T18:49:03.057178Z", - "iopub.status.busy": "2023-08-15T18:49:03.057073Z", - "iopub.status.idle": "2023-08-15T18:49:03.291546Z", - "shell.execute_reply": "2023-08-15T18:49:03.291171Z" + "iopub.execute_input": "2023-08-21T03:36:10.183868Z", + "iopub.status.busy": "2023-08-21T03:36:10.183754Z", + "iopub.status.idle": "2023-08-21T03:36:10.401318Z", + "shell.execute_reply": "2023-08-21T03:36:10.401033Z" }, "lines_to_next_cell": 0 }, @@ -8106,7 +8106,7 @@ }, { "cell_type": "markdown", - "id": "97921078", + "id": "8cae5dfc", "metadata": {}, "source": [ "The `describe()` method produces a numerical summary of each column in a data frame." @@ -8115,13 +8115,13 @@ { "cell_type": "code", "execution_count": 113, - "id": "9e0b12f2", + "id": "ce7b23e2", "metadata": { "execution": { - "iopub.execute_input": "2023-08-15T18:49:03.293251Z", - "iopub.status.busy": "2023-08-15T18:49:03.293122Z", - "iopub.status.idle": "2023-08-15T18:49:03.299440Z", - "shell.execute_reply": "2023-08-15T18:49:03.299052Z" + "iopub.execute_input": "2023-08-21T03:36:10.403067Z", + "iopub.status.busy": "2023-08-21T03:36:10.402953Z", + "iopub.status.idle": "2023-08-21T03:36:10.408957Z", + "shell.execute_reply": "2023-08-21T03:36:10.408683Z" }, "lines_to_next_cell": 0 }, @@ -8219,7 +8219,7 @@ }, { "cell_type": "markdown", - "id": "93fc12de", + "id": "d5042294", "metadata": {}, "source": [ "We can also produce a summary of just a single column." @@ -8228,13 +8228,13 @@ { "cell_type": "code", "execution_count": 114, - "id": "ba4aa0f6", + "id": "a6545d2f", "metadata": { "execution": { - "iopub.execute_input": "2023-08-15T18:49:03.300968Z", - "iopub.status.busy": "2023-08-15T18:49:03.300854Z", - "iopub.status.idle": "2023-08-15T18:49:03.304996Z", - "shell.execute_reply": "2023-08-15T18:49:03.304715Z" + "iopub.execute_input": "2023-08-21T03:36:10.410500Z", + "iopub.status.busy": "2023-08-21T03:36:10.410393Z", + "iopub.status.idle": "2023-08-21T03:36:10.414627Z", + "shell.execute_reply": "2023-08-21T03:36:10.414350Z" }, "lines_to_next_cell": 0 }, @@ -8265,7 +8265,7 @@ }, { "cell_type": "markdown", - "id": "c029ae61", + "id": "c2ea7f81", "metadata": {}, "source": [ "To exit `Jupyter`, select `File / Close and Halt`.\n", diff --git a/Ch03-linreg-lab.Rmd b/Ch03-linreg-lab.Rmd index 4ea50d2..930176c 100644 --- a/Ch03-linreg-lab.Rmd +++ b/Ch03-linreg-lab.Rmd @@ -15,8 +15,6 @@ jupyter: # Chapter 3 - - # Lab: Linear Regression ## Importing packages @@ -277,7 +275,7 @@ value of 25.05 for `medv` when `lstat` equals 10), but the latter are substantially wider. Next we will plot `medv` and `lstat` -using `DataFrame.plot.scatter()`, +using `DataFrame.plot.scatter()`, \definelongblankMR{plot.scatter()}{plot.slashslashscatter()} and wish to add the regression line to the resulting plot. @@ -399,7 +397,7 @@ Notice how we have compacted the first line into a succinct expression describin The `Boston` data set contains 12 variables, and so it would be cumbersome to have to type all of these in order to perform a regression using all of the predictors. -Instead, we can use the following short-hand: +Instead, we can use the following short-hand:\definelongblankMR{columns.drop()}{columns.slashslashdrop()} ```{python} terms = Boston.columns.drop('medv') diff --git a/Ch03-linreg-lab.ipynb b/Ch03-linreg-lab.ipynb index 1b5c61b..f039622 100644 --- a/Ch03-linreg-lab.ipynb +++ b/Ch03-linreg-lab.ipynb @@ -2,17 +2,16 @@ "cells": [ { "cell_type": "markdown", - "id": "82bce88a", + "id": "cfd81b34", "metadata": {}, "source": [ "\n", - "# Chapter 3\n", - "\n" + "# Chapter 3" ] }, { "cell_type": "markdown", - "id": "dcffdceb", + "id": "52e6256f", "metadata": {}, "source": [ "# Lab: Linear Regression\n", @@ -25,13 +24,13 @@ { "cell_type": "code", "execution_count": 1, - "id": "ca5277a6", + "id": "b18c1628", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:29.402170Z", - "iopub.status.busy": "2023-08-07T00:18:29.401851Z", - "iopub.status.idle": "2023-08-07T00:18:29.884854Z", - "shell.execute_reply": "2023-08-07T00:18:29.884559Z" + "iopub.execute_input": "2023-08-21T02:28:52.978537Z", + "iopub.status.busy": "2023-08-21T02:28:52.978403Z", + "iopub.status.idle": "2023-08-21T02:28:53.456488Z", + "shell.execute_reply": "2023-08-21T02:28:53.456172Z" }, "lines_to_next_cell": 2 }, @@ -44,7 +43,7 @@ }, { "cell_type": "markdown", - "id": "95b0ae8c", + "id": "735a61a6", "metadata": {}, "source": [ "### New imports\n", @@ -58,13 +57,13 @@ { "cell_type": "code", "execution_count": 2, - "id": "675f24e6", + "id": "a10a1d7d", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:29.886827Z", - "iopub.status.busy": "2023-08-07T00:18:29.886604Z", - "iopub.status.idle": "2023-08-07T00:18:30.513216Z", - "shell.execute_reply": "2023-08-07T00:18:30.512918Z" + "iopub.execute_input": "2023-08-21T02:28:53.458574Z", + "iopub.status.busy": "2023-08-21T02:28:53.458356Z", + "iopub.status.idle": "2023-08-21T02:28:54.074306Z", + "shell.execute_reply": "2023-08-21T02:28:54.073950Z" }, "lines_to_next_cell": 0 }, @@ -75,7 +74,7 @@ }, { "cell_type": "markdown", - "id": "1fb0799f", + "id": "4c10ec5f", "metadata": {}, "source": [ " We will provide relevant details about the\n", @@ -91,13 +90,13 @@ { "cell_type": "code", "execution_count": 3, - "id": "a0ee23c2", + "id": "756c0524", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:30.515096Z", - "iopub.status.busy": "2023-08-07T00:18:30.514948Z", - "iopub.status.idle": "2023-08-07T00:18:30.517757Z", - "shell.execute_reply": "2023-08-07T00:18:30.517502Z" + "iopub.execute_input": "2023-08-21T02:28:54.076206Z", + "iopub.status.busy": "2023-08-21T02:28:54.076055Z", + "iopub.status.idle": "2023-08-21T02:28:54.079277Z", + "shell.execute_reply": "2023-08-21T02:28:54.079022Z" } }, "outputs": [], @@ -109,7 +108,7 @@ }, { "cell_type": "markdown", - "id": "dbfd346e", + "id": "686eb4ee", "metadata": {}, "source": [ "As one of the import statements above is quite a long line, we inserted a line break `\\` to\n", @@ -122,13 +121,13 @@ { "cell_type": "code", "execution_count": 4, - "id": "b35eb887", + "id": "2c370a6e", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:30.519241Z", - "iopub.status.busy": "2023-08-07T00:18:30.519152Z", - "iopub.status.idle": "2023-08-07T00:18:30.676458Z", - "shell.execute_reply": "2023-08-07T00:18:30.675986Z" + "iopub.execute_input": "2023-08-21T02:28:54.080812Z", + "iopub.status.busy": "2023-08-21T02:28:54.080717Z", + "iopub.status.idle": "2023-08-21T02:28:54.212489Z", + "shell.execute_reply": "2023-08-21T02:28:54.212195Z" } }, "outputs": [], @@ -141,7 +140,7 @@ }, { "cell_type": "markdown", - "id": "84a8177e", + "id": "163af4a1", "metadata": {}, "source": [ "### Inspecting Objects and Namespaces\n", @@ -154,13 +153,13 @@ { "cell_type": "code", "execution_count": 5, - "id": "961908f7", + "id": "43bcb3a9", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:30.678594Z", - "iopub.status.busy": "2023-08-07T00:18:30.678317Z", - "iopub.status.idle": "2023-08-07T00:18:30.682161Z", - "shell.execute_reply": "2023-08-07T00:18:30.681889Z" + "iopub.execute_input": "2023-08-21T02:28:54.214288Z", + "iopub.status.busy": "2023-08-21T02:28:54.214131Z", + "iopub.status.idle": "2023-08-21T02:28:54.218521Z", + "shell.execute_reply": "2023-08-21T02:28:54.217256Z" }, "lines_to_next_cell": 0 }, @@ -218,7 +217,7 @@ }, { "cell_type": "markdown", - "id": "3efc6d99", + "id": "3d936b00", "metadata": {}, "source": [ " This shows you everything that `Python` can find at the top level.\n", @@ -235,13 +234,13 @@ { "cell_type": "code", "execution_count": 6, - "id": "662caa15", + "id": "cb81bfb0", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:30.683690Z", - "iopub.status.busy": "2023-08-07T00:18:30.683590Z", - "iopub.status.idle": "2023-08-07T00:18:30.686573Z", - "shell.execute_reply": "2023-08-07T00:18:30.686323Z" + "iopub.execute_input": "2023-08-21T02:28:54.228152Z", + "iopub.status.busy": "2023-08-21T02:28:54.227968Z", + "iopub.status.idle": "2023-08-21T02:28:54.231888Z", + "shell.execute_reply": "2023-08-21T02:28:54.231418Z" }, "lines_to_next_cell": 0 }, @@ -429,7 +428,7 @@ }, { "cell_type": "markdown", - "id": "49bdd416", + "id": "c5693cc8", "metadata": {}, "source": [ " This indicates that the object `A.sum` exists. In this case it is a method\n", @@ -439,13 +438,13 @@ { "cell_type": "code", "execution_count": 7, - "id": "ebb7d126", + "id": "29e9bdab", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:30.688076Z", - "iopub.status.busy": "2023-08-07T00:18:30.687980Z", - "iopub.status.idle": "2023-08-07T00:18:30.690330Z", - "shell.execute_reply": "2023-08-07T00:18:30.690041Z" + "iopub.execute_input": "2023-08-21T02:28:54.233644Z", + "iopub.status.busy": "2023-08-21T02:28:54.233538Z", + "iopub.status.idle": "2023-08-21T02:28:54.236077Z", + "shell.execute_reply": "2023-08-21T02:28:54.235804Z" }, "lines_to_next_cell": 0 }, @@ -467,7 +466,7 @@ }, { "cell_type": "markdown", - "id": "3b9db985", + "id": "d000df26", "metadata": {}, "source": [ " " @@ -475,7 +474,7 @@ }, { "cell_type": "markdown", - "id": "9fbed3f3", + "id": "2fff2f42", "metadata": {}, "source": [ "## Simple Linear Regression\n", @@ -497,13 +496,13 @@ { "cell_type": "code", "execution_count": 8, - "id": "1ea46cee", + "id": "72a15de5", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:30.693238Z", - "iopub.status.busy": "2023-08-07T00:18:30.693135Z", - "iopub.status.idle": "2023-08-07T00:18:30.700216Z", - "shell.execute_reply": "2023-08-07T00:18:30.699965Z" + "iopub.execute_input": "2023-08-21T02:28:54.237580Z", + "iopub.status.busy": "2023-08-21T02:28:54.237492Z", + "iopub.status.idle": "2023-08-21T02:28:54.242855Z", + "shell.execute_reply": "2023-08-21T02:28:54.242574Z" } }, "outputs": [ @@ -527,7 +526,7 @@ }, { "cell_type": "markdown", - "id": "a8cceee6", + "id": "d4fefb35", "metadata": {}, "source": [ "Type `Boston?` to find out more about these data.\n", @@ -541,13 +540,13 @@ { "cell_type": "code", "execution_count": 9, - "id": "26c0ba88", + "id": "26837cfe", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:30.701638Z", - "iopub.status.busy": "2023-08-07T00:18:30.701559Z", - "iopub.status.idle": "2023-08-07T00:18:30.706894Z", - "shell.execute_reply": "2023-08-07T00:18:30.706635Z" + "iopub.execute_input": "2023-08-21T02:28:54.244219Z", + "iopub.status.busy": "2023-08-21T02:28:54.244127Z", + "iopub.status.idle": "2023-08-21T02:28:54.249714Z", + "shell.execute_reply": "2023-08-21T02:28:54.249432Z" } }, "outputs": [ @@ -622,7 +621,7 @@ }, { "cell_type": "markdown", - "id": "5ac7f183", + "id": "73cb41ca", "metadata": {}, "source": [ "We extract the response, and fit the model." @@ -631,13 +630,13 @@ { "cell_type": "code", "execution_count": 10, - "id": "d4dd511b", + "id": "c70cbdb5", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:30.708348Z", - "iopub.status.busy": "2023-08-07T00:18:30.708254Z", - "iopub.status.idle": "2023-08-07T00:18:30.710731Z", - "shell.execute_reply": "2023-08-07T00:18:30.710460Z" + "iopub.execute_input": "2023-08-21T02:28:54.251263Z", + "iopub.status.busy": "2023-08-21T02:28:54.251136Z", + "iopub.status.idle": "2023-08-21T02:28:54.253671Z", + "shell.execute_reply": "2023-08-21T02:28:54.253397Z" }, "lines_to_next_cell": 0 }, @@ -650,7 +649,7 @@ }, { "cell_type": "markdown", - "id": "ddf44723", + "id": "e87fbd51", "metadata": {}, "source": [ "Note that `sm.OLS()` does\n", @@ -666,13 +665,13 @@ { "cell_type": "code", "execution_count": 11, - "id": "eef9f8e3", + "id": "6f2d7c78", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:30.712145Z", - "iopub.status.busy": "2023-08-07T00:18:30.712039Z", - "iopub.status.idle": "2023-08-07T00:18:30.771318Z", - "shell.execute_reply": "2023-08-07T00:18:30.771048Z" + "iopub.execute_input": "2023-08-21T02:28:54.255193Z", + "iopub.status.busy": "2023-08-21T02:28:54.255089Z", + "iopub.status.idle": "2023-08-21T02:28:54.314793Z", + "shell.execute_reply": "2023-08-21T02:28:54.314504Z" }, "lines_to_next_cell": 2 }, @@ -740,7 +739,7 @@ }, { "cell_type": "markdown", - "id": "db916e19", + "id": "cf6f045c", "metadata": {}, "source": [ "Before we describe other methods for working with fitted models, we outline a more useful and general framework for constructing a model matrix~`X`.\n", @@ -777,13 +776,13 @@ { "cell_type": "code", "execution_count": 12, - "id": "557170d4", + "id": "cdec4294", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:30.772908Z", - "iopub.status.busy": "2023-08-07T00:18:30.772767Z", - "iopub.status.idle": "2023-08-07T00:18:30.777533Z", - "shell.execute_reply": "2023-08-07T00:18:30.777292Z" + "iopub.execute_input": "2023-08-21T02:28:54.316521Z", + "iopub.status.busy": "2023-08-21T02:28:54.316363Z", + "iopub.status.idle": "2023-08-21T02:28:54.323224Z", + "shell.execute_reply": "2023-08-21T02:28:54.322970Z" }, "lines_to_next_cell": 0 }, @@ -860,7 +859,7 @@ }, { "cell_type": "markdown", - "id": "86615813", + "id": "1de3a91e", "metadata": {}, "source": [ "In this simple case, the `fit()` method does very little; it simply checks that the variable `'lstat'` specified in `design` exists in `Boston`. Then `transform()` constructs the model matrix with two columns: an `intercept` and the variable `lstat`.\n", @@ -872,13 +871,13 @@ { "cell_type": "code", "execution_count": 13, - "id": "b83ec097", + "id": "edf2efcb", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:30.778980Z", - "iopub.status.busy": "2023-08-07T00:18:30.778901Z", - "iopub.status.idle": "2023-08-07T00:18:30.783086Z", - "shell.execute_reply": "2023-08-07T00:18:30.782821Z" + "iopub.execute_input": "2023-08-21T02:28:54.324750Z", + "iopub.status.busy": "2023-08-21T02:28:54.324644Z", + "iopub.status.idle": "2023-08-21T02:28:54.330945Z", + "shell.execute_reply": "2023-08-21T02:28:54.330680Z" }, "lines_to_next_cell": 0 }, @@ -954,7 +953,7 @@ }, { "cell_type": "markdown", - "id": "c6becbcb", + "id": "4eab8574", "metadata": {}, "source": [ "Note that, as in the previous code chunk when the two steps were done separately, the `design` object is changed as a result of the `fit()` operation. The power of this pipeline will become clearer when we fit more complex models that involve interactions and transformations." @@ -962,7 +961,7 @@ }, { "cell_type": "markdown", - "id": "e097120f", + "id": "7336a90b", "metadata": {}, "source": [ "Let's return to our fitted regression model.\n", @@ -976,13 +975,13 @@ { "cell_type": "code", "execution_count": 14, - "id": "d4dce5f6", + "id": "49fc8992", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:30.784600Z", - "iopub.status.busy": "2023-08-07T00:18:30.784504Z", - "iopub.status.idle": "2023-08-07T00:18:30.793701Z", - "shell.execute_reply": "2023-08-07T00:18:30.793458Z" + "iopub.execute_input": "2023-08-21T02:28:54.332402Z", + "iopub.status.busy": "2023-08-21T02:28:54.332319Z", + "iopub.status.idle": "2023-08-21T02:28:54.341724Z", + "shell.execute_reply": "2023-08-21T02:28:54.341409Z" } }, "outputs": [ @@ -1001,10 +1000,10 @@ " Method: Least Squares F-statistic: 601.6\n", "\n", "\n", - " Date: Sun, 06 Aug 2023 Prob (F-statistic): 5.08e-88\n", + " Date: Sun, 20 Aug 2023 Prob (F-statistic): 5.08e-88\n", "\n", "\n", - " Time: 17:18:30 Log-Likelihood: -1641.5\n", + " Time: 19:28:54 Log-Likelihood: -1641.5\n", "\n", "\n", " No. Observations: 506 AIC: 3287.\n", @@ -1052,8 +1051,8 @@ "\\textbf{Dep. Variable:} & medv & \\textbf{ R-squared: } & 0.544 \\\\\n", "\\textbf{Model:} & OLS & \\textbf{ Adj. R-squared: } & 0.543 \\\\\n", "\\textbf{Method:} & Least Squares & \\textbf{ F-statistic: } & 601.6 \\\\\n", - "\\textbf{Date:} & Sun, 06 Aug 2023 & \\textbf{ Prob (F-statistic):} & 5.08e-88 \\\\\n", - "\\textbf{Time:} & 17:18:30 & \\textbf{ Log-Likelihood: } & -1641.5 \\\\\n", + "\\textbf{Date:} & Sun, 20 Aug 2023 & \\textbf{ Prob (F-statistic):} & 5.08e-88 \\\\\n", + "\\textbf{Time:} & 19:28:54 & \\textbf{ Log-Likelihood: } & -1641.5 \\\\\n", "\\textbf{No. Observations:} & 506 & \\textbf{ AIC: } & 3287. \\\\\n", "\\textbf{Df Residuals:} & 504 & \\textbf{ BIC: } & 3295. \\\\\n", "\\textbf{Df Model:} & 1 & \\textbf{ } & \\\\\n", @@ -1088,8 +1087,8 @@ "Dep. Variable: medv R-squared: 0.544\n", "Model: OLS Adj. R-squared: 0.543\n", "Method: Least Squares F-statistic: 601.6\n", - "Date: Sun, 06 Aug 2023 Prob (F-statistic): 5.08e-88\n", - "Time: 17:18:30 Log-Likelihood: -1641.5\n", + "Date: Sun, 20 Aug 2023 Prob (F-statistic): 5.08e-88\n", + "Time: 19:28:54 Log-Likelihood: -1641.5\n", "No. Observations: 506 AIC: 3287.\n", "Df Residuals: 504 BIC: 3295.\n", "Df Model: 1 \n", @@ -1122,7 +1121,7 @@ }, { "cell_type": "markdown", - "id": "9a367738", + "id": "cbadf6fb", "metadata": {}, "source": [ "The fitted coefficients can also be retrieved as the\n", @@ -1132,13 +1131,13 @@ { "cell_type": "code", "execution_count": 15, - "id": "a0edf555", + "id": "6d0f4c3a", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:30.795155Z", - "iopub.status.busy": "2023-08-07T00:18:30.795070Z", - "iopub.status.idle": "2023-08-07T00:18:30.797528Z", - "shell.execute_reply": "2023-08-07T00:18:30.797283Z" + "iopub.execute_input": "2023-08-21T02:28:54.343317Z", + "iopub.status.busy": "2023-08-21T02:28:54.343206Z", + "iopub.status.idle": "2023-08-21T02:28:54.345604Z", + "shell.execute_reply": "2023-08-21T02:28:54.345339Z" }, "lines_to_next_cell": 2 }, @@ -1162,7 +1161,7 @@ }, { "cell_type": "markdown", - "id": "4472913f", + "id": "f97d477a", "metadata": {}, "source": [ "The `get_prediction()` method can be used to obtain predictions, and produce confidence intervals and\n", @@ -1175,13 +1174,13 @@ { "cell_type": "code", "execution_count": 16, - "id": "fdc5a3f3", + "id": "132ffded", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:30.798957Z", - "iopub.status.busy": "2023-08-07T00:18:30.798873Z", - "iopub.status.idle": "2023-08-07T00:18:30.802562Z", - "shell.execute_reply": "2023-08-07T00:18:30.802313Z" + "iopub.execute_input": "2023-08-21T02:28:54.347097Z", + "iopub.status.busy": "2023-08-21T02:28:54.346984Z", + "iopub.status.idle": "2023-08-21T02:28:54.350802Z", + "shell.execute_reply": "2023-08-21T02:28:54.350563Z" } }, "outputs": [ @@ -1250,7 +1249,7 @@ }, { "cell_type": "markdown", - "id": "590d6b7d", + "id": "e99b90dc", "metadata": {}, "source": [ "Next we compute the predictions at `newX`, and view them by extracting the `predicted_mean` attribute." @@ -1259,13 +1258,13 @@ { "cell_type": "code", "execution_count": 17, - "id": "2c6acbf0", + "id": "b654a050", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:30.803979Z", - "iopub.status.busy": "2023-08-07T00:18:30.803903Z", - "iopub.status.idle": "2023-08-07T00:18:30.806278Z", - "shell.execute_reply": "2023-08-07T00:18:30.806017Z" + "iopub.execute_input": "2023-08-21T02:28:54.352369Z", + "iopub.status.busy": "2023-08-21T02:28:54.352275Z", + "iopub.status.idle": "2023-08-21T02:28:54.354743Z", + "shell.execute_reply": "2023-08-21T02:28:54.354502Z" }, "lines_to_next_cell": 0 }, @@ -1288,7 +1287,7 @@ }, { "cell_type": "markdown", - "id": "f2d7e037", + "id": "cca6cef5", "metadata": {}, "source": [ "We can produce confidence intervals for the predicted values." @@ -1297,13 +1296,13 @@ { "cell_type": "code", "execution_count": 18, - "id": "c472ef33", + "id": "148ed59d", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:30.807645Z", - "iopub.status.busy": "2023-08-07T00:18:30.807570Z", - "iopub.status.idle": "2023-08-07T00:18:30.809883Z", - "shell.execute_reply": "2023-08-07T00:18:30.809646Z" + "iopub.execute_input": "2023-08-21T02:28:54.356140Z", + "iopub.status.busy": "2023-08-21T02:28:54.356063Z", + "iopub.status.idle": "2023-08-21T02:28:54.358315Z", + "shell.execute_reply": "2023-08-21T02:28:54.358059Z" }, "lines_to_next_cell": 0 }, @@ -1327,7 +1326,7 @@ }, { "cell_type": "markdown", - "id": "dfabf8a7", + "id": "c217e5e2", "metadata": {}, "source": [ "Prediction intervals are computing by setting `obs=True`:" @@ -1336,13 +1335,13 @@ { "cell_type": "code", "execution_count": 19, - "id": "3e2ffc7a", + "id": "d9d7b844", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:30.811226Z", - "iopub.status.busy": "2023-08-07T00:18:30.811154Z", - "iopub.status.idle": "2023-08-07T00:18:30.813455Z", - "shell.execute_reply": "2023-08-07T00:18:30.813210Z" + "iopub.execute_input": "2023-08-21T02:28:54.359757Z", + "iopub.status.busy": "2023-08-21T02:28:54.359678Z", + "iopub.status.idle": "2023-08-21T02:28:54.362165Z", + "shell.execute_reply": "2023-08-21T02:28:54.361908Z" }, "lines_to_next_cell": 0 }, @@ -1366,7 +1365,7 @@ }, { "cell_type": "markdown", - "id": "65463c75", + "id": "a26d3660", "metadata": {}, "source": [ " For instance, the 95% confidence interval associated with an\n", @@ -1377,14 +1376,14 @@ "10), but the latter are substantially wider.\n", "\n", "Next we will plot `medv` and `lstat` \n", - "using `DataFrame.plot.scatter()`, \n", + "using `DataFrame.plot.scatter()`, \\definelongblankMR{plot.scatter()}{plot.slashslashscatter()}\n", "and wish to\n", "add the regression line to the resulting plot." ] }, { "cell_type": "markdown", - "id": "f699e856", + "id": "50db5bf6", "metadata": {}, "source": [ "### Defining Functions\n", @@ -1396,13 +1395,13 @@ { "cell_type": "code", "execution_count": 20, - "id": "4e56a1d3", + "id": "79de2913", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:30.814985Z", - "iopub.status.busy": "2023-08-07T00:18:30.814910Z", - "iopub.status.idle": "2023-08-07T00:18:30.816725Z", - "shell.execute_reply": "2023-08-07T00:18:30.816494Z" + "iopub.execute_input": "2023-08-21T02:28:54.363741Z", + "iopub.status.busy": "2023-08-21T02:28:54.363634Z", + "iopub.status.idle": "2023-08-21T02:28:54.365531Z", + "shell.execute_reply": "2023-08-21T02:28:54.365292Z" }, "lines_to_next_cell": 0 }, @@ -1417,7 +1416,7 @@ }, { "cell_type": "markdown", - "id": "e0a0dce5", + "id": "f66dd38d", "metadata": {}, "source": [ " A few things are illustrated above. First we see the syntax for defining a function:\n", @@ -1430,13 +1429,13 @@ { "cell_type": "code", "execution_count": 21, - "id": "7f43ffe7", + "id": "a9b843c7", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:30.818143Z", - "iopub.status.busy": "2023-08-07T00:18:30.818041Z", - "iopub.status.idle": "2023-08-07T00:18:30.819998Z", - "shell.execute_reply": "2023-08-07T00:18:30.819773Z" + "iopub.execute_input": "2023-08-21T02:28:54.366874Z", + "iopub.status.busy": "2023-08-21T02:28:54.366784Z", + "iopub.status.idle": "2023-08-21T02:28:54.368713Z", + "shell.execute_reply": "2023-08-21T02:28:54.368464Z" }, "lines_to_next_cell": 0 }, @@ -1451,7 +1450,7 @@ }, { "cell_type": "markdown", - "id": "4f4981fa", + "id": "25ba4401", "metadata": {}, "source": [ "The addition of `*args` allows any number of\n", @@ -1470,13 +1469,13 @@ { "cell_type": "code", "execution_count": 22, - "id": "3f7b67c9", + "id": "7e116800", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:30.821345Z", - "iopub.status.busy": "2023-08-07T00:18:30.821254Z", - "iopub.status.idle": "2023-08-07T00:18:30.930375Z", - "shell.execute_reply": "2023-08-07T00:18:30.929550Z" + "iopub.execute_input": "2023-08-21T02:28:54.370163Z", + "iopub.status.busy": "2023-08-21T02:28:54.370073Z", + "iopub.status.idle": "2023-08-21T02:28:54.466696Z", + "shell.execute_reply": "2023-08-21T02:28:54.466338Z" }, "lines_to_next_cell": 0 }, @@ -1503,7 +1502,7 @@ }, { "cell_type": "markdown", - "id": "50d7066f", + "id": "9a3e8b26", "metadata": {}, "source": [ "Thus, the final call to `ax.plot()` is `ax.plot(xlim, ylim, 'r--', linewidth=3)`.\n", @@ -1517,7 +1516,7 @@ }, { "cell_type": "markdown", - "id": "82ab1913", + "id": "1d78b981", "metadata": {}, "source": [ "Next we examine some diagnostic plots, several of which were discussed\n", @@ -1534,13 +1533,13 @@ { "cell_type": "code", "execution_count": 23, - "id": "b35a2fd3", + "id": "b524399e", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:30.934324Z", - "iopub.status.busy": "2023-08-07T00:18:30.934035Z", - "iopub.status.idle": "2023-08-07T00:18:31.102742Z", - "shell.execute_reply": "2023-08-07T00:18:31.101921Z" + "iopub.execute_input": "2023-08-21T02:28:54.468561Z", + "iopub.status.busy": "2023-08-21T02:28:54.468356Z", + "iopub.status.idle": "2023-08-21T02:28:54.566644Z", + "shell.execute_reply": "2023-08-21T02:28:54.566337Z" }, "lines_to_next_cell": 0 }, @@ -1566,7 +1565,7 @@ }, { "cell_type": "markdown", - "id": "4deb547b", + "id": "590a8be9", "metadata": {}, "source": [ " We add a horizontal line at 0 for reference using the\n", @@ -1582,13 +1581,13 @@ { "cell_type": "code", "execution_count": 24, - "id": "82673b80", + "id": "8c95b6b0", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:31.106724Z", - "iopub.status.busy": "2023-08-07T00:18:31.106292Z", - "iopub.status.idle": "2023-08-07T00:18:31.200890Z", - "shell.execute_reply": "2023-08-07T00:18:31.200597Z" + "iopub.execute_input": "2023-08-21T02:28:54.568423Z", + "iopub.status.busy": "2023-08-21T02:28:54.568307Z", + "iopub.status.idle": "2023-08-21T02:28:54.658553Z", + "shell.execute_reply": "2023-08-21T02:28:54.658267Z" }, "lines_to_next_cell": 0 }, @@ -1625,7 +1624,7 @@ }, { "cell_type": "markdown", - "id": "7eb69d75", + "id": "7712b1e1", "metadata": {}, "source": [ " The `np.argmax()` function identifies the index of the largest element of an array, optionally computed over an axis of the array.\n", @@ -1635,7 +1634,7 @@ }, { "cell_type": "markdown", - "id": "94c0a8c1", + "id": "c17dacc1", "metadata": {}, "source": [ "## Multiple Linear Regression\n", @@ -1650,13 +1649,13 @@ { "cell_type": "code", "execution_count": 25, - "id": "54596dc4", + "id": "04ed8362", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:31.202583Z", - "iopub.status.busy": "2023-08-07T00:18:31.202480Z", - "iopub.status.idle": "2023-08-07T00:18:31.212391Z", - "shell.execute_reply": "2023-08-07T00:18:31.212135Z" + "iopub.execute_input": "2023-08-21T02:28:54.660197Z", + "iopub.status.busy": "2023-08-21T02:28:54.660075Z", + "iopub.status.idle": "2023-08-21T02:28:54.672237Z", + "shell.execute_reply": "2023-08-21T02:28:54.671994Z" }, "lines_to_next_cell": 0 }, @@ -1735,26 +1734,26 @@ }, { "cell_type": "markdown", - "id": "88450596", + "id": "3af076fd", "metadata": {}, "source": [ "Notice how we have compacted the first line into a succinct expression describing the construction of `X`.\n", "\n", "The `Boston` data set contains 12 variables, and so it would be cumbersome\n", "to have to type all of these in order to perform a regression using all of the predictors.\n", - "Instead, we can use the following short-hand:" + "Instead, we can use the following short-hand:\\definelongblankMR{columns.drop()}{columns.slashslashdrop()}" ] }, { "cell_type": "code", "execution_count": 26, - "id": "75c78238", + "id": "6483e190", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:31.214024Z", - "iopub.status.busy": "2023-08-07T00:18:31.213941Z", - "iopub.status.idle": "2023-08-07T00:18:31.216399Z", - "shell.execute_reply": "2023-08-07T00:18:31.216121Z" + "iopub.execute_input": "2023-08-21T02:28:54.673721Z", + "iopub.status.busy": "2023-08-21T02:28:54.673628Z", + "iopub.status.idle": "2023-08-21T02:28:54.676304Z", + "shell.execute_reply": "2023-08-21T02:28:54.675993Z" } }, "outputs": [ @@ -1778,7 +1777,7 @@ }, { "cell_type": "markdown", - "id": "653715b5", + "id": "b79a6810", "metadata": {}, "source": [ "We can now fit the model with all the variables in `terms` using\n", @@ -1788,13 +1787,13 @@ { "cell_type": "code", "execution_count": 27, - "id": "f14b9e1a", + "id": "99a6f9d0", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:31.217829Z", - "iopub.status.busy": "2023-08-07T00:18:31.217726Z", - "iopub.status.idle": "2023-08-07T00:18:31.232053Z", - "shell.execute_reply": "2023-08-07T00:18:31.231736Z" + "iopub.execute_input": "2023-08-21T02:28:54.677828Z", + "iopub.status.busy": "2023-08-21T02:28:54.677709Z", + "iopub.status.idle": "2023-08-21T02:28:54.696704Z", + "shell.execute_reply": "2023-08-21T02:28:54.696381Z" } }, "outputs": [ @@ -1952,7 +1951,7 @@ }, { "cell_type": "markdown", - "id": "26acd5ab", + "id": "719d42ae", "metadata": {}, "source": [ "What if we would like to perform a regression using all of the variables but one? For\n", @@ -1964,13 +1963,13 @@ { "cell_type": "code", "execution_count": 28, - "id": "0a2714b1", + "id": "78cf55d0", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:31.233879Z", - "iopub.status.busy": "2023-08-07T00:18:31.233764Z", - "iopub.status.idle": "2023-08-07T00:18:31.247573Z", - "shell.execute_reply": "2023-08-07T00:18:31.247300Z" + "iopub.execute_input": "2023-08-21T02:28:54.698261Z", + "iopub.status.busy": "2023-08-21T02:28:54.698177Z", + "iopub.status.idle": "2023-08-21T02:28:54.716362Z", + "shell.execute_reply": "2023-08-21T02:28:54.716082Z" } }, "outputs": [ @@ -2120,7 +2119,7 @@ }, { "cell_type": "markdown", - "id": "28538920", + "id": "526a80bc", "metadata": {}, "source": [ "## Multivariate Goodness of Fit\n", @@ -2152,13 +2151,13 @@ { "cell_type": "code", "execution_count": 29, - "id": "961c9128", + "id": "902f6474", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:31.249268Z", - "iopub.status.busy": "2023-08-07T00:18:31.249149Z", - "iopub.status.idle": "2023-08-07T00:18:31.256436Z", - "shell.execute_reply": "2023-08-07T00:18:31.256170Z" + "iopub.execute_input": "2023-08-21T02:28:54.718076Z", + "iopub.status.busy": "2023-08-21T02:28:54.717951Z", + "iopub.status.idle": "2023-08-21T02:28:54.725146Z", + "shell.execute_reply": "2023-08-21T02:28:54.724859Z" }, "lines_to_next_cell": 0 }, @@ -2271,7 +2270,7 @@ }, { "cell_type": "markdown", - "id": "d052f0ab", + "id": "2a1567ea", "metadata": {}, "source": [ "The function `VIF()` takes two arguments: a dataframe or array,\n", @@ -2284,13 +2283,13 @@ { "cell_type": "code", "execution_count": 30, - "id": "4886f9e9", + "id": "ea1c88e9", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:31.257965Z", - "iopub.status.busy": "2023-08-07T00:18:31.257856Z", - "iopub.status.idle": "2023-08-07T00:18:31.262942Z", - "shell.execute_reply": "2023-08-07T00:18:31.262707Z" + "iopub.execute_input": "2023-08-21T02:28:54.726658Z", + "iopub.status.busy": "2023-08-21T02:28:54.726565Z", + "iopub.status.idle": "2023-08-21T02:28:54.731850Z", + "shell.execute_reply": "2023-08-21T02:28:54.731595Z" }, "lines_to_next_cell": 0 }, @@ -2303,7 +2302,7 @@ }, { "cell_type": "markdown", - "id": "fd3732d5", + "id": "18fb24e5", "metadata": {}, "source": [ "List comprehension allows us to perform such repetitive operations in a more straightforward way.\n", @@ -2317,13 +2316,13 @@ { "cell_type": "code", "execution_count": 31, - "id": "b54d2da1", + "id": "e9ff159c", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:31.264400Z", - "iopub.status.busy": "2023-08-07T00:18:31.264319Z", - "iopub.status.idle": "2023-08-07T00:18:31.274870Z", - "shell.execute_reply": "2023-08-07T00:18:31.274588Z" + "iopub.execute_input": "2023-08-21T02:28:54.733388Z", + "iopub.status.busy": "2023-08-21T02:28:54.733294Z", + "iopub.status.idle": "2023-08-21T02:28:54.747346Z", + "shell.execute_reply": "2023-08-21T02:28:54.747067Z" }, "lines_to_next_cell": 2 }, @@ -2411,7 +2410,7 @@ }, { "cell_type": "markdown", - "id": "c72c4846", + "id": "92604d18", "metadata": {}, "source": [ "## Non-linear Transformations of the Predictors\n", @@ -2425,13 +2424,13 @@ { "cell_type": "code", "execution_count": 32, - "id": "1b71633a", + "id": "c98f54b2", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:31.276448Z", - "iopub.status.busy": "2023-08-07T00:18:31.276353Z", - "iopub.status.idle": "2023-08-07T00:18:31.287456Z", - "shell.execute_reply": "2023-08-07T00:18:31.287173Z" + "iopub.execute_input": "2023-08-21T02:28:54.748856Z", + "iopub.status.busy": "2023-08-21T02:28:54.748774Z", + "iopub.status.idle": "2023-08-21T02:28:54.763149Z", + "shell.execute_reply": "2023-08-21T02:28:54.762853Z" }, "lines_to_next_cell": 0 }, @@ -2518,7 +2517,7 @@ }, { "cell_type": "markdown", - "id": "9f32c813", + "id": "ccc11d8c", "metadata": {}, "source": [ "The effectively zero *p*-value associated with the quadratic term\n", @@ -2543,13 +2542,13 @@ { "cell_type": "code", "execution_count": 33, - "id": "6d30a306", + "id": "53065cac", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:31.289067Z", - "iopub.status.busy": "2023-08-07T00:18:31.288970Z", - "iopub.status.idle": "2023-08-07T00:18:31.294816Z", - "shell.execute_reply": "2023-08-07T00:18:31.294545Z" + "iopub.execute_input": "2023-08-21T02:28:54.764924Z", + "iopub.status.busy": "2023-08-21T02:28:54.764796Z", + "iopub.status.idle": "2023-08-21T02:28:54.770846Z", + "shell.execute_reply": "2023-08-21T02:28:54.770578Z" }, "lines_to_next_cell": 0 }, @@ -2623,7 +2622,7 @@ }, { "cell_type": "markdown", - "id": "bd0155d4", + "id": "c0696dc2", "metadata": {}, "source": [ "Here `results1` represents the linear submodel containing\n", @@ -2653,13 +2652,13 @@ { "cell_type": "code", "execution_count": 34, - "id": "9a5ec13f", + "id": "8c654809", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:31.296264Z", - "iopub.status.busy": "2023-08-07T00:18:31.296175Z", - "iopub.status.idle": "2023-08-07T00:18:31.396371Z", - "shell.execute_reply": "2023-08-07T00:18:31.396036Z" + "iopub.execute_input": "2023-08-21T02:28:54.772408Z", + "iopub.status.busy": "2023-08-21T02:28:54.772296Z", + "iopub.status.idle": "2023-08-21T02:28:54.872389Z", + "shell.execute_reply": "2023-08-21T02:28:54.872086Z" }, "lines_to_next_cell": 0 }, @@ -2667,7 +2666,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 34, @@ -2695,7 +2694,7 @@ }, { "cell_type": "markdown", - "id": "88272f6f", + "id": "f79b542d", "metadata": {}, "source": [ "We see that when the quadratic term is included in the model,\n", @@ -2706,7 +2705,7 @@ }, { "cell_type": "markdown", - "id": "e1a34084", + "id": "6123a191", "metadata": {}, "source": [ "## Qualitative Predictors\n", @@ -2719,13 +2718,13 @@ { "cell_type": "code", "execution_count": 35, - "id": "09bbc0c6", + "id": "2182f0ec", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:31.398199Z", - "iopub.status.busy": "2023-08-07T00:18:31.398079Z", - "iopub.status.idle": "2023-08-07T00:18:31.403054Z", - "shell.execute_reply": "2023-08-07T00:18:31.402775Z" + "iopub.execute_input": "2023-08-21T02:28:54.874000Z", + "iopub.status.busy": "2023-08-21T02:28:54.873893Z", + "iopub.status.idle": "2023-08-21T02:28:54.879085Z", + "shell.execute_reply": "2023-08-21T02:28:54.878817Z" }, "lines_to_next_cell": 0 }, @@ -2750,7 +2749,7 @@ }, { "cell_type": "markdown", - "id": "1a882e65", + "id": "66672403", "metadata": {}, "source": [ "The `Carseats` \n", @@ -2770,13 +2769,13 @@ { "cell_type": "code", "execution_count": 36, - "id": "2e1da1fa", + "id": "d614fdcb", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:31.404630Z", - "iopub.status.busy": "2023-08-07T00:18:31.404535Z", - "iopub.status.idle": "2023-08-07T00:18:31.424741Z", - "shell.execute_reply": "2023-08-07T00:18:31.424459Z" + "iopub.execute_input": "2023-08-21T02:28:54.880583Z", + "iopub.status.busy": "2023-08-21T02:28:54.880499Z", + "iopub.status.idle": "2023-08-21T02:28:54.907341Z", + "shell.execute_reply": "2023-08-21T02:28:54.907079Z" }, "lines_to_next_cell": 0 }, @@ -2946,7 +2945,7 @@ }, { "cell_type": "markdown", - "id": "79d9127c", + "id": "2402763b", "metadata": {}, "source": [ "In the first line above, we made `allvars` a list, so that we\n", diff --git a/Ch04-classification-lab.Rmd b/Ch04-classification-lab.Rmd index 6266d03..d3d8eec 100644 --- a/Ch04-classification-lab.Rmd +++ b/Ch04-classification-lab.Rmd @@ -807,7 +807,7 @@ feature_std.std() ``` -Notice that the standard deviations are not quite $1$ here; this is again due to some procedures using the $1/n$ convention for variances (in this case `scaler()`), while others use $1/(n-1)$ (the `std()` method). See the footnote on page 103. +Notice that the standard deviations are not quite $1$ here; this is again due to some procedures using the $1/n$ convention for variances (in this case `scaler()`), while others use $1/(n-1)$ (the `std()` method). See the footnote on page 200. In this case it does not matter, as long as the variables are all on the same scale. Using the function `train_test_split()` we now split the observations into a test set, diff --git a/Ch04-classification-lab.ipynb b/Ch04-classification-lab.ipynb index 90fb9c8..0ab61a0 100644 --- a/Ch04-classification-lab.ipynb +++ b/Ch04-classification-lab.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "cb3c07d1", + "id": "5443fa92", "metadata": {}, "source": [ "\n", @@ -13,7 +13,7 @@ }, { "cell_type": "markdown", - "id": "daef3e2e", + "id": "3fc2dfec", "metadata": {}, "source": [ "# Lab: Logistic Regression, LDA, QDA, and KNN\n" @@ -21,7 +21,7 @@ }, { "cell_type": "markdown", - "id": "3cb93478", + "id": "0c96d561", "metadata": {}, "source": [ "## The Stock Market Data\n", @@ -43,13 +43,13 @@ { "cell_type": "code", "execution_count": 1, - "id": "7b8d78b9", + "id": "95d28c33", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:32.688752Z", - "iopub.status.busy": "2023-08-07T00:18:32.688456Z", - "iopub.status.idle": "2023-08-07T00:18:33.723127Z", - "shell.execute_reply": "2023-08-07T00:18:33.722505Z" + "iopub.execute_input": "2023-08-21T02:28:56.229892Z", + "iopub.status.busy": "2023-08-21T02:28:56.229672Z", + "iopub.status.idle": "2023-08-21T02:28:57.250402Z", + "shell.execute_reply": "2023-08-21T02:28:57.249963Z" } }, "outputs": [], @@ -65,7 +65,7 @@ }, { "cell_type": "markdown", - "id": "f420141c", + "id": "0c887b44", "metadata": {}, "source": [ "We also collect together the new imports needed for this lab." @@ -74,13 +74,13 @@ { "cell_type": "code", "execution_count": 2, - "id": "b5938862", + "id": "f7fb5f2a", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:33.725437Z", - "iopub.status.busy": "2023-08-07T00:18:33.725139Z", - "iopub.status.idle": "2023-08-07T00:18:33.743611Z", - "shell.execute_reply": "2023-08-07T00:18:33.743322Z" + "iopub.execute_input": "2023-08-21T02:28:57.252390Z", + "iopub.status.busy": "2023-08-21T02:28:57.252224Z", + "iopub.status.idle": "2023-08-21T02:28:57.272851Z", + "shell.execute_reply": "2023-08-21T02:28:57.272588Z" }, "lines_to_next_cell": 2 }, @@ -100,7 +100,7 @@ }, { "cell_type": "markdown", - "id": "34413b1c", + "id": "f5fd2bfd", "metadata": {}, "source": [ "Now we are ready to load the `Smarket` data." @@ -109,13 +109,13 @@ { "cell_type": "code", "execution_count": 3, - "id": "e9fdf040", + "id": "7845390b", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:33.745195Z", - "iopub.status.busy": "2023-08-07T00:18:33.745084Z", - "iopub.status.idle": "2023-08-07T00:18:33.757813Z", - "shell.execute_reply": "2023-08-07T00:18:33.757521Z" + "iopub.execute_input": "2023-08-21T02:28:57.274355Z", + "iopub.status.busy": "2023-08-21T02:28:57.274258Z", + "iopub.status.idle": "2023-08-21T02:28:57.285160Z", + "shell.execute_reply": "2023-08-21T02:28:57.284894Z" }, "lines_to_next_cell": 0 }, @@ -319,7 +319,7 @@ }, { "cell_type": "markdown", - "id": "d3533960", + "id": "6b585d9b", "metadata": {}, "source": [ "This gives a truncated listing of the data.\n", @@ -329,13 +329,13 @@ { "cell_type": "code", "execution_count": 4, - "id": "69d5cfae", + "id": "a92e287a", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:33.759381Z", - "iopub.status.busy": "2023-08-07T00:18:33.759278Z", - "iopub.status.idle": "2023-08-07T00:18:33.761642Z", - "shell.execute_reply": "2023-08-07T00:18:33.761397Z" + "iopub.execute_input": "2023-08-21T02:28:57.286715Z", + "iopub.status.busy": "2023-08-21T02:28:57.286616Z", + "iopub.status.idle": "2023-08-21T02:28:57.288883Z", + "shell.execute_reply": "2023-08-21T02:28:57.288648Z" }, "lines_to_next_cell": 0 }, @@ -359,7 +359,7 @@ }, { "cell_type": "markdown", - "id": "c1e0cc8c", + "id": "31ec6135", "metadata": {}, "source": [ "We compute the correlation matrix using the `corr()` method\n", @@ -373,13 +373,13 @@ { "cell_type": "code", "execution_count": 5, - "id": "a4c0648e", + "id": "96bb1e00", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:33.763041Z", - "iopub.status.busy": "2023-08-07T00:18:33.762950Z", - "iopub.status.idle": "2023-08-07T00:18:33.767711Z", - "shell.execute_reply": "2023-08-07T00:18:33.767453Z" + "iopub.execute_input": "2023-08-21T02:28:57.290357Z", + "iopub.status.busy": "2023-08-21T02:28:57.290259Z", + "iopub.status.idle": "2023-08-21T02:28:57.295352Z", + "shell.execute_reply": "2023-08-21T02:28:57.295083Z" }, "lines_to_next_cell": 0 }, @@ -541,7 +541,7 @@ }, { "cell_type": "markdown", - "id": "c68bb37a", + "id": "9ff113ca", "metadata": {}, "source": [ "As one would expect, the correlations between the lagged return variables and\n", @@ -554,13 +554,13 @@ { "cell_type": "code", "execution_count": 6, - "id": "cd40274b", + "id": "4ddb96ba", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:33.769148Z", - "iopub.status.busy": "2023-08-07T00:18:33.769072Z", - "iopub.status.idle": "2023-08-07T00:18:33.882743Z", - "shell.execute_reply": "2023-08-07T00:18:33.880710Z" + "iopub.execute_input": "2023-08-21T02:28:57.296784Z", + "iopub.status.busy": "2023-08-21T02:28:57.296683Z", + "iopub.status.idle": "2023-08-21T02:28:57.392956Z", + "shell.execute_reply": "2023-08-21T02:28:57.392526Z" }, "lines_to_next_cell": 2 }, @@ -582,7 +582,7 @@ }, { "cell_type": "markdown", - "id": "685b96e8", + "id": "c2fe10a0", "metadata": {}, "source": [ "## Logistic Regression\n", @@ -601,13 +601,13 @@ { "cell_type": "code", "execution_count": 7, - "id": "35b8bffe", + "id": "df59bcac", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:33.886763Z", - "iopub.status.busy": "2023-08-07T00:18:33.886512Z", - "iopub.status.idle": "2023-08-07T00:18:34.002815Z", - "shell.execute_reply": "2023-08-07T00:18:34.002006Z" + "iopub.execute_input": "2023-08-21T02:28:57.394870Z", + "iopub.status.busy": "2023-08-21T02:28:57.394721Z", + "iopub.status.idle": "2023-08-21T02:28:57.461746Z", + "shell.execute_reply": "2023-08-21T02:28:57.461390Z" }, "lines_to_next_cell": 0 }, @@ -723,7 +723,7 @@ }, { "cell_type": "markdown", - "id": "68cca865", + "id": "cc5b69fc", "metadata": {}, "source": [ "The smallest *p*-value here is associated with `Lag1`. The\n", @@ -741,13 +741,13 @@ { "cell_type": "code", "execution_count": 8, - "id": "4f9c5324", + "id": "f45f26de", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:34.007435Z", - "iopub.status.busy": "2023-08-07T00:18:34.006910Z", - "iopub.status.idle": "2023-08-07T00:18:34.014901Z", - "shell.execute_reply": "2023-08-07T00:18:34.014079Z" + "iopub.execute_input": "2023-08-21T02:28:57.463719Z", + "iopub.status.busy": "2023-08-21T02:28:57.463515Z", + "iopub.status.idle": "2023-08-21T02:28:57.466512Z", + "shell.execute_reply": "2023-08-21T02:28:57.466227Z" }, "lines_to_next_cell": 0 }, @@ -776,7 +776,7 @@ }, { "cell_type": "markdown", - "id": "681ca0cb", + "id": "56749219", "metadata": {}, "source": [ "Likewise we can use the\n", @@ -786,13 +786,13 @@ { "cell_type": "code", "execution_count": 9, - "id": "75e44d01", + "id": "e9f38895", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:34.019225Z", - "iopub.status.busy": "2023-08-07T00:18:34.018883Z", - "iopub.status.idle": "2023-08-07T00:18:34.025804Z", - "shell.execute_reply": "2023-08-07T00:18:34.025086Z" + "iopub.execute_input": "2023-08-21T02:28:57.468254Z", + "iopub.status.busy": "2023-08-21T02:28:57.468113Z", + "iopub.status.idle": "2023-08-21T02:28:57.470717Z", + "shell.execute_reply": "2023-08-21T02:28:57.470403Z" } }, "outputs": [ @@ -820,7 +820,7 @@ }, { "cell_type": "markdown", - "id": "d4fd87bf", + "id": "b5f86e0b", "metadata": {}, "source": [ "The `predict()` method of `results` can be used to predict the\n", @@ -837,13 +837,13 @@ { "cell_type": "code", "execution_count": 10, - "id": "40164af5", + "id": "4f20356d", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:34.029989Z", - "iopub.status.busy": "2023-08-07T00:18:34.029690Z", - "iopub.status.idle": "2023-08-07T00:18:34.036791Z", - "shell.execute_reply": "2023-08-07T00:18:34.036138Z" + "iopub.execute_input": "2023-08-21T02:28:57.472719Z", + "iopub.status.busy": "2023-08-21T02:28:57.472578Z", + "iopub.status.idle": "2023-08-21T02:28:57.475369Z", + "shell.execute_reply": "2023-08-21T02:28:57.475043Z" }, "lines_to_next_cell": 0 }, @@ -867,7 +867,7 @@ }, { "cell_type": "markdown", - "id": "94607ba9", + "id": "4aab2080", "metadata": {}, "source": [ "In order to make a prediction as to whether the market will go up or\n", @@ -881,13 +881,13 @@ { "cell_type": "code", "execution_count": 11, - "id": "daf20de2", + "id": "152b3063", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:34.040976Z", - "iopub.status.busy": "2023-08-07T00:18:34.040685Z", - "iopub.status.idle": "2023-08-07T00:18:34.046531Z", - "shell.execute_reply": "2023-08-07T00:18:34.045877Z" + "iopub.execute_input": "2023-08-21T02:28:57.477166Z", + "iopub.status.busy": "2023-08-21T02:28:57.477052Z", + "iopub.status.idle": "2023-08-21T02:28:57.479161Z", + "shell.execute_reply": "2023-08-21T02:28:57.478803Z" }, "lines_to_next_cell": 0 }, @@ -899,7 +899,7 @@ }, { "cell_type": "markdown", - "id": "085aead4", + "id": "a825abf5", "metadata": {}, "source": [ "The `confusion_table()`\n", @@ -914,13 +914,13 @@ { "cell_type": "code", "execution_count": 12, - "id": "71f4a40c", + "id": "0f89f7ae", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:34.050481Z", - "iopub.status.busy": "2023-08-07T00:18:34.050167Z", - "iopub.status.idle": "2023-08-07T00:18:34.059868Z", - "shell.execute_reply": "2023-08-07T00:18:34.059588Z" + "iopub.execute_input": "2023-08-21T02:28:57.480867Z", + "iopub.status.busy": "2023-08-21T02:28:57.480737Z", + "iopub.status.idle": "2023-08-21T02:28:57.487133Z", + "shell.execute_reply": "2023-08-21T02:28:57.486778Z" } }, "outputs": [ @@ -987,7 +987,7 @@ }, { "cell_type": "markdown", - "id": "3a338f26", + "id": "9e9ff255", "metadata": {}, "source": [ "The diagonal elements of the confusion matrix indicate correct\n", @@ -1003,13 +1003,13 @@ { "cell_type": "code", "execution_count": 13, - "id": "78b2946b", + "id": "d55dd7ec", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:34.061456Z", - "iopub.status.busy": "2023-08-07T00:18:34.061336Z", - "iopub.status.idle": "2023-08-07T00:18:34.064074Z", - "shell.execute_reply": "2023-08-07T00:18:34.063814Z" + "iopub.execute_input": "2023-08-21T02:28:57.488873Z", + "iopub.status.busy": "2023-08-21T02:28:57.488756Z", + "iopub.status.idle": "2023-08-21T02:28:57.491458Z", + "shell.execute_reply": "2023-08-21T02:28:57.491162Z" }, "lines_to_next_cell": 0 }, @@ -1031,7 +1031,7 @@ }, { "cell_type": "markdown", - "id": "54962226", + "id": "d73690be", "metadata": {}, "source": [ "\n" @@ -1039,7 +1039,7 @@ }, { "cell_type": "markdown", - "id": "aa9be981", + "id": "3d8958eb", "metadata": {}, "source": [ "At first glance, it appears that the logistic regression model is\n", @@ -1066,13 +1066,13 @@ { "cell_type": "code", "execution_count": 14, - "id": "e8a4d12e", + "id": "b998a060", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:34.065518Z", - "iopub.status.busy": "2023-08-07T00:18:34.065416Z", - "iopub.status.idle": "2023-08-07T00:18:34.068254Z", - "shell.execute_reply": "2023-08-07T00:18:34.067978Z" + "iopub.execute_input": "2023-08-21T02:28:57.493306Z", + "iopub.status.busy": "2023-08-21T02:28:57.493174Z", + "iopub.status.idle": "2023-08-21T02:28:57.496464Z", + "shell.execute_reply": "2023-08-21T02:28:57.496107Z" }, "lines_to_next_cell": 2 }, @@ -1097,7 +1097,7 @@ }, { "cell_type": "markdown", - "id": "946fac68", + "id": "8c337c63", "metadata": {}, "source": [ "The object `train` is a vector of 1,250 elements, corresponding\n", @@ -1132,13 +1132,13 @@ { "cell_type": "code", "execution_count": 15, - "id": "fd16bc2c", + "id": "814e34ce", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:34.069659Z", - "iopub.status.busy": "2023-08-07T00:18:34.069561Z", - "iopub.status.idle": "2023-08-07T00:18:34.074343Z", - "shell.execute_reply": "2023-08-07T00:18:34.074055Z" + "iopub.execute_input": "2023-08-21T02:28:57.498135Z", + "iopub.status.busy": "2023-08-21T02:28:57.498043Z", + "iopub.status.idle": "2023-08-21T02:28:57.502996Z", + "shell.execute_reply": "2023-08-21T02:28:57.502676Z" } }, "outputs": [], @@ -1154,7 +1154,7 @@ }, { "cell_type": "markdown", - "id": "12382c18", + "id": "312c605a", "metadata": {}, "source": [ "Notice that we have trained and tested our model on two completely\n", @@ -1169,13 +1169,13 @@ { "cell_type": "code", "execution_count": 16, - "id": "aaa9d07c", + "id": "644823f9", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:34.075820Z", - "iopub.status.busy": "2023-08-07T00:18:34.075734Z", - "iopub.status.idle": "2023-08-07T00:18:34.077644Z", - "shell.execute_reply": "2023-08-07T00:18:34.077397Z" + "iopub.execute_input": "2023-08-21T02:28:57.504874Z", + "iopub.status.busy": "2023-08-21T02:28:57.504743Z", + "iopub.status.idle": "2023-08-21T02:28:57.506879Z", + "shell.execute_reply": "2023-08-21T02:28:57.506558Z" }, "lines_to_next_cell": 0 }, @@ -1187,7 +1187,7 @@ }, { "cell_type": "markdown", - "id": "cc0d0c3a", + "id": "4c9f0ae0", "metadata": {}, "source": [ "Now we threshold the\n", @@ -1198,13 +1198,13 @@ { "cell_type": "code", "execution_count": 17, - "id": "5f0b3282", + "id": "51217c85", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:34.079028Z", - "iopub.status.busy": "2023-08-07T00:18:34.078951Z", - "iopub.status.idle": "2023-08-07T00:18:34.083263Z", - "shell.execute_reply": "2023-08-07T00:18:34.083022Z" + "iopub.execute_input": "2023-08-21T02:28:57.508502Z", + "iopub.status.busy": "2023-08-21T02:28:57.508403Z", + "iopub.status.idle": "2023-08-21T02:28:57.512973Z", + "shell.execute_reply": "2023-08-21T02:28:57.512720Z" }, "lines_to_next_cell": 0 }, @@ -1274,7 +1274,7 @@ }, { "cell_type": "markdown", - "id": "71ca598e", + "id": "ff5f3218", "metadata": {}, "source": [ "The test accuracy is about 48% while the error rate is about 52%" @@ -1283,13 +1283,13 @@ { "cell_type": "code", "execution_count": 18, - "id": "7f4e49c0", + "id": "a73446bf", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:34.084664Z", - "iopub.status.busy": "2023-08-07T00:18:34.084577Z", - "iopub.status.idle": "2023-08-07T00:18:34.087059Z", - "shell.execute_reply": "2023-08-07T00:18:34.086816Z" + "iopub.execute_input": "2023-08-21T02:28:57.514459Z", + "iopub.status.busy": "2023-08-21T02:28:57.514377Z", + "iopub.status.idle": "2023-08-21T02:28:57.517011Z", + "shell.execute_reply": "2023-08-21T02:28:57.516758Z" }, "lines_to_next_cell": 2 }, @@ -1311,7 +1311,7 @@ }, { "cell_type": "markdown", - "id": "96d75735", + "id": "149949d9", "metadata": {}, "source": [ "The `!=` notation means *not equal to*, and so the last command\n", @@ -1341,13 +1341,13 @@ { "cell_type": "code", "execution_count": 19, - "id": "9f94de4b", + "id": "8174767d", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:34.088387Z", - "iopub.status.busy": "2023-08-07T00:18:34.088307Z", - "iopub.status.idle": "2023-08-07T00:18:34.096165Z", - "shell.execute_reply": "2023-08-07T00:18:34.095892Z" + "iopub.execute_input": "2023-08-21T02:28:57.518464Z", + "iopub.status.busy": "2023-08-21T02:28:57.518363Z", + "iopub.status.idle": "2023-08-21T02:28:57.528289Z", + "shell.execute_reply": "2023-08-21T02:28:57.527983Z" }, "lines_to_next_cell": 2 }, @@ -1425,7 +1425,7 @@ }, { "cell_type": "markdown", - "id": "1dd9ce3d", + "id": "9992d709", "metadata": {}, "source": [ "Let’s evaluate the overall accuracy as well as the accuracy within the days when\n", @@ -1435,13 +1435,13 @@ { "cell_type": "code", "execution_count": 20, - "id": "69a4dd6b", + "id": "cba7e815", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:34.097583Z", - "iopub.status.busy": "2023-08-07T00:18:34.097501Z", - "iopub.status.idle": "2023-08-07T00:18:34.099616Z", - "shell.execute_reply": "2023-08-07T00:18:34.099375Z" + "iopub.execute_input": "2023-08-21T02:28:57.529915Z", + "iopub.status.busy": "2023-08-21T02:28:57.529812Z", + "iopub.status.idle": "2023-08-21T02:28:57.532108Z", + "shell.execute_reply": "2023-08-21T02:28:57.531849Z" } }, "outputs": [ @@ -1462,7 +1462,7 @@ }, { "cell_type": "markdown", - "id": "14cf6b55", + "id": "cfe9b256", "metadata": {}, "source": [ "Now the results appear to be a little better: 56% of the daily\n", @@ -1489,13 +1489,13 @@ { "cell_type": "code", "execution_count": 21, - "id": "975fa3ca", + "id": "97993185", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:34.101046Z", - "iopub.status.busy": "2023-08-07T00:18:34.100966Z", - "iopub.status.idle": "2023-08-07T00:18:34.104502Z", - "shell.execute_reply": "2023-08-07T00:18:34.104254Z" + "iopub.execute_input": "2023-08-21T02:28:57.533565Z", + "iopub.status.busy": "2023-08-21T02:28:57.533462Z", + "iopub.status.idle": "2023-08-21T02:28:57.537458Z", + "shell.execute_reply": "2023-08-21T02:28:57.537180Z" }, "lines_to_next_cell": 2 }, @@ -1522,7 +1522,7 @@ }, { "cell_type": "markdown", - "id": "bdc2c0bb", + "id": "3b56915d", "metadata": {}, "source": [ "## Linear Discriminant Analysis" @@ -1530,7 +1530,7 @@ }, { "cell_type": "markdown", - "id": "41deab79", + "id": "5fd3e6e0", "metadata": {}, "source": [ "We begin by performing LDA on the `Smarket` data, using the function\n", @@ -1541,13 +1541,13 @@ { "cell_type": "code", "execution_count": 22, - "id": "7237ffa7", + "id": "4bc774e9", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:34.105969Z", - "iopub.status.busy": "2023-08-07T00:18:34.105892Z", - "iopub.status.idle": "2023-08-07T00:18:34.107535Z", - "shell.execute_reply": "2023-08-07T00:18:34.107296Z" + "iopub.execute_input": "2023-08-21T02:28:57.539054Z", + "iopub.status.busy": "2023-08-21T02:28:57.538952Z", + "iopub.status.idle": "2023-08-21T02:28:57.540857Z", + "shell.execute_reply": "2023-08-21T02:28:57.540537Z" } }, "outputs": [], @@ -1557,7 +1557,7 @@ }, { "cell_type": "markdown", - "id": "7289db40", + "id": "3d1a82d1", "metadata": {}, "source": [ "Since the `LDA` estimator automatically \n", @@ -1569,13 +1569,13 @@ { "cell_type": "code", "execution_count": 23, - "id": "43a850eb", + "id": "8c6c0723", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:34.108941Z", - "iopub.status.busy": "2023-08-07T00:18:34.108865Z", - "iopub.status.idle": "2023-08-07T00:18:34.114955Z", - "shell.execute_reply": "2023-08-07T00:18:34.114708Z" + "iopub.execute_input": "2023-08-21T02:28:57.542568Z", + "iopub.status.busy": "2023-08-21T02:28:57.542481Z", + "iopub.status.idle": "2023-08-21T02:28:57.548927Z", + "shell.execute_reply": "2023-08-21T02:28:57.548581Z" }, "lines_to_next_cell": 0 }, @@ -1602,7 +1602,7 @@ }, { "cell_type": "markdown", - "id": "d3e0901f", + "id": "d4db3bde", "metadata": {}, "source": [ "Here we have used the list comprehensions introduced\n", @@ -1625,13 +1625,13 @@ { "cell_type": "code", "execution_count": 24, - "id": "86b6cece", + "id": "cf8fd5ac", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:34.116386Z", - "iopub.status.busy": "2023-08-07T00:18:34.116305Z", - "iopub.status.idle": "2023-08-07T00:18:34.118455Z", - "shell.execute_reply": "2023-08-07T00:18:34.118209Z" + "iopub.execute_input": "2023-08-21T02:28:57.550601Z", + "iopub.status.busy": "2023-08-21T02:28:57.550496Z", + "iopub.status.idle": "2023-08-21T02:28:57.552737Z", + "shell.execute_reply": "2023-08-21T02:28:57.552471Z" }, "lines_to_next_cell": 2 }, @@ -1654,7 +1654,7 @@ }, { "cell_type": "markdown", - "id": "6d75a932", + "id": "bcd5c21f", "metadata": {}, "source": [ "The estimated prior probabilities are stored in the `priors_` attribute.\n", @@ -1666,13 +1666,13 @@ { "cell_type": "code", "execution_count": 25, - "id": "9362c7c6", + "id": "bfd6b3f8", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:34.119865Z", - "iopub.status.busy": "2023-08-07T00:18:34.119787Z", - "iopub.status.idle": "2023-08-07T00:18:34.121925Z", - "shell.execute_reply": "2023-08-07T00:18:34.121681Z" + "iopub.execute_input": "2023-08-21T02:28:57.554217Z", + "iopub.status.busy": "2023-08-21T02:28:57.554117Z", + "iopub.status.idle": "2023-08-21T02:28:57.556249Z", + "shell.execute_reply": "2023-08-21T02:28:57.555998Z" }, "lines_to_next_cell": 2 }, @@ -1694,7 +1694,7 @@ }, { "cell_type": "markdown", - "id": "61f77e19", + "id": "60fe91d9", "metadata": {}, "source": [ "The LDA output indicates that $\\hat\\pi_{Down}=0.492$ and\n", @@ -1704,13 +1704,13 @@ { "cell_type": "code", "execution_count": 26, - "id": "e59858dc", + "id": "a1f75de4", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:34.123314Z", - "iopub.status.busy": "2023-08-07T00:18:34.123233Z", - "iopub.status.idle": "2023-08-07T00:18:34.125369Z", - "shell.execute_reply": "2023-08-07T00:18:34.125137Z" + "iopub.execute_input": "2023-08-21T02:28:57.557716Z", + "iopub.status.busy": "2023-08-21T02:28:57.557623Z", + "iopub.status.idle": "2023-08-21T02:28:57.559886Z", + "shell.execute_reply": "2023-08-21T02:28:57.559582Z" }, "lines_to_next_cell": 2 }, @@ -1732,7 +1732,7 @@ }, { "cell_type": "markdown", - "id": "43a8fde1", + "id": "47e60686", "metadata": {}, "source": [ "The linear discriminant vectors can be found in the `scalings_` attribute:" @@ -1741,13 +1741,13 @@ { "cell_type": "code", "execution_count": 27, - "id": "9b5f74e8", + "id": "82794178", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:34.126738Z", - "iopub.status.busy": "2023-08-07T00:18:34.126660Z", - "iopub.status.idle": "2023-08-07T00:18:34.128726Z", - "shell.execute_reply": "2023-08-07T00:18:34.128484Z" + "iopub.execute_input": "2023-08-21T02:28:57.561606Z", + "iopub.status.busy": "2023-08-21T02:28:57.561489Z", + "iopub.status.idle": "2023-08-21T02:28:57.563996Z", + "shell.execute_reply": "2023-08-21T02:28:57.563652Z" } }, "outputs": [ @@ -1769,7 +1769,7 @@ }, { "cell_type": "markdown", - "id": "4655809e", + "id": "ac6ad759", "metadata": {}, "source": [ "These values provide the linear combination of `Lag1` and `Lag2` that are used to form the LDA decision rule. In other words, these are the multipliers of the elements of $X=x$ in (4.24).\n", @@ -1779,13 +1779,13 @@ { "cell_type": "code", "execution_count": 28, - "id": "fd8e6794", + "id": "9b571047", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:34.130043Z", - "iopub.status.busy": "2023-08-07T00:18:34.129971Z", - "iopub.status.idle": "2023-08-07T00:18:34.132079Z", - "shell.execute_reply": "2023-08-07T00:18:34.131833Z" + "iopub.execute_input": "2023-08-21T02:28:57.565689Z", + "iopub.status.busy": "2023-08-21T02:28:57.565573Z", + "iopub.status.idle": "2023-08-21T02:28:57.568080Z", + "shell.execute_reply": "2023-08-21T02:28:57.567748Z" } }, "outputs": [], @@ -1795,7 +1795,7 @@ }, { "cell_type": "markdown", - "id": "2d211f0a", + "id": "61522ffc", "metadata": {}, "source": [ "As we observed in our comparison of classification methods\n", @@ -1806,13 +1806,13 @@ { "cell_type": "code", "execution_count": 29, - "id": "3bb63fb1", + "id": "60f3d13a", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:34.133469Z", - "iopub.status.busy": "2023-08-07T00:18:34.133393Z", - "iopub.status.idle": "2023-08-07T00:18:34.137177Z", - "shell.execute_reply": "2023-08-07T00:18:34.136944Z" + "iopub.execute_input": "2023-08-21T02:28:57.569793Z", + "iopub.status.busy": "2023-08-21T02:28:57.569674Z", + "iopub.status.idle": "2023-08-21T02:28:57.574322Z", + "shell.execute_reply": "2023-08-21T02:28:57.573986Z" }, "lines_to_next_cell": 2 }, @@ -1880,7 +1880,7 @@ }, { "cell_type": "markdown", - "id": "8e31152b", + "id": "6b88f943", "metadata": {}, "source": [ "We can also estimate the\n", @@ -1893,13 +1893,13 @@ { "cell_type": "code", "execution_count": 30, - "id": "2b91f491", + "id": "96e680d9", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:34.138619Z", - "iopub.status.busy": "2023-08-07T00:18:34.138537Z", - "iopub.status.idle": "2023-08-07T00:18:34.141314Z", - "shell.execute_reply": "2023-08-07T00:18:34.141072Z" + "iopub.execute_input": "2023-08-21T02:28:57.576103Z", + "iopub.status.busy": "2023-08-21T02:28:57.575991Z", + "iopub.status.idle": "2023-08-21T02:28:57.579068Z", + "shell.execute_reply": "2023-08-21T02:28:57.578805Z" }, "lines_to_next_cell": 2 }, @@ -1924,7 +1924,7 @@ }, { "cell_type": "markdown", - "id": "d3a76822", + "id": "d20f6d2b", "metadata": {}, "source": [ "Above, we used the `np.where()` function that\n", @@ -1937,13 +1937,13 @@ { "cell_type": "code", "execution_count": 31, - "id": "3a085714", + "id": "b6695125", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:34.142668Z", - "iopub.status.busy": "2023-08-07T00:18:34.142591Z", - "iopub.status.idle": "2023-08-07T00:18:34.144963Z", - "shell.execute_reply": "2023-08-07T00:18:34.144712Z" + "iopub.execute_input": "2023-08-21T02:28:57.580746Z", + "iopub.status.busy": "2023-08-21T02:28:57.580639Z", + "iopub.status.idle": "2023-08-21T02:28:57.583327Z", + "shell.execute_reply": "2023-08-21T02:28:57.583073Z" }, "lines_to_next_cell": 2 }, @@ -1967,7 +1967,7 @@ }, { "cell_type": "markdown", - "id": "0aa9cbb3", + "id": "9661ed20", "metadata": {}, "source": [ "If we wanted to use a posterior probability threshold other than\n", @@ -1983,13 +1983,13 @@ { "cell_type": "code", "execution_count": 32, - "id": "345fb8c6", + "id": "3f38a14e", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:34.146325Z", - "iopub.status.busy": "2023-08-07T00:18:34.146248Z", - "iopub.status.idle": "2023-08-07T00:18:34.148323Z", - "shell.execute_reply": "2023-08-07T00:18:34.148102Z" + "iopub.execute_input": "2023-08-21T02:28:57.584834Z", + "iopub.status.busy": "2023-08-21T02:28:57.584748Z", + "iopub.status.idle": "2023-08-21T02:28:57.587140Z", + "shell.execute_reply": "2023-08-21T02:28:57.586884Z" } }, "outputs": [ @@ -2010,7 +2010,7 @@ }, { "cell_type": "markdown", - "id": "6798146c", + "id": "c12fe607", "metadata": {}, "source": [ "No days in 2005 meet that threshold! In fact, the greatest posterior\n", @@ -2034,7 +2034,7 @@ }, { "cell_type": "markdown", - "id": "58f2984f", + "id": "8a384f92", "metadata": {}, "source": [ "## Quadratic Discriminant Analysis\n", @@ -2048,13 +2048,13 @@ { "cell_type": "code", "execution_count": 33, - "id": "22c6c2a3", + "id": "9b645803", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:34.149774Z", - "iopub.status.busy": "2023-08-07T00:18:34.149693Z", - "iopub.status.idle": "2023-08-07T00:18:34.153308Z", - "shell.execute_reply": "2023-08-07T00:18:34.153071Z" + "iopub.execute_input": "2023-08-21T02:28:57.588684Z", + "iopub.status.busy": "2023-08-21T02:28:57.588575Z", + "iopub.status.idle": "2023-08-21T02:28:57.592433Z", + "shell.execute_reply": "2023-08-21T02:28:57.592165Z" } }, "outputs": [ @@ -2079,7 +2079,7 @@ }, { "cell_type": "markdown", - "id": "fba0bb3a", + "id": "0c595cd6", "metadata": {}, "source": [ "The `QDA()` function will again compute `means_` and `priors_`." @@ -2088,13 +2088,13 @@ { "cell_type": "code", "execution_count": 34, - "id": "992a790a", + "id": "abfae544", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:34.154710Z", - "iopub.status.busy": "2023-08-07T00:18:34.154631Z", - "iopub.status.idle": "2023-08-07T00:18:34.156853Z", - "shell.execute_reply": "2023-08-07T00:18:34.156611Z" + "iopub.execute_input": "2023-08-21T02:28:57.593864Z", + "iopub.status.busy": "2023-08-21T02:28:57.593784Z", + "iopub.status.idle": "2023-08-21T02:28:57.596074Z", + "shell.execute_reply": "2023-08-21T02:28:57.595807Z" } }, "outputs": [ @@ -2117,7 +2117,7 @@ }, { "cell_type": "markdown", - "id": "8bc030e2", + "id": "47c8a520", "metadata": {}, "source": [ "The `QDA()` classifier will estimate one covariance per class. Here is the\n", @@ -2127,13 +2127,13 @@ { "cell_type": "code", "execution_count": 35, - "id": "074c9d46", + "id": "2a3bb41e", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:34.158287Z", - "iopub.status.busy": "2023-08-07T00:18:34.158209Z", - "iopub.status.idle": "2023-08-07T00:18:34.160379Z", - "shell.execute_reply": "2023-08-07T00:18:34.160138Z" + "iopub.execute_input": "2023-08-21T02:28:57.597540Z", + "iopub.status.busy": "2023-08-21T02:28:57.597455Z", + "iopub.status.idle": "2023-08-21T02:28:57.599658Z", + "shell.execute_reply": "2023-08-21T02:28:57.599399Z" }, "lines_to_next_cell": 0 }, @@ -2156,7 +2156,7 @@ }, { "cell_type": "markdown", - "id": "fa5963f6", + "id": "01a6ad38", "metadata": {}, "source": [ "The output contains the group means. But it does not contain the\n", @@ -2169,13 +2169,13 @@ { "cell_type": "code", "execution_count": 36, - "id": "3c95aae1", + "id": "1c64310b", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:34.161750Z", - "iopub.status.busy": "2023-08-07T00:18:34.161677Z", - "iopub.status.idle": "2023-08-07T00:18:34.166050Z", - "shell.execute_reply": "2023-08-07T00:18:34.165798Z" + "iopub.execute_input": "2023-08-21T02:28:57.601097Z", + "iopub.status.busy": "2023-08-21T02:28:57.601019Z", + "iopub.status.idle": "2023-08-21T02:28:57.605729Z", + "shell.execute_reply": "2023-08-21T02:28:57.605444Z" }, "lines_to_next_cell": 0 }, @@ -2244,7 +2244,7 @@ }, { "cell_type": "markdown", - "id": "0a72c1b8", + "id": "7b797db4", "metadata": {}, "source": [ "Interestingly, the QDA predictions are accurate almost 60% of the\n", @@ -2254,13 +2254,13 @@ { "cell_type": "code", "execution_count": 37, - "id": "935b2079", + "id": "0c05c5a8", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:34.167439Z", - "iopub.status.busy": "2023-08-07T00:18:34.167360Z", - "iopub.status.idle": "2023-08-07T00:18:34.169654Z", - "shell.execute_reply": "2023-08-07T00:18:34.169417Z" + "iopub.execute_input": "2023-08-21T02:28:57.607207Z", + "iopub.status.busy": "2023-08-21T02:28:57.607093Z", + "iopub.status.idle": "2023-08-21T02:28:57.609626Z", + "shell.execute_reply": "2023-08-21T02:28:57.609348Z" }, "lines_to_next_cell": 2 }, @@ -2282,7 +2282,7 @@ }, { "cell_type": "markdown", - "id": "cbf4d7d1", + "id": "bb1a8707", "metadata": {}, "source": [ "This level of accuracy is quite impressive for stock market data, which is\n", @@ -2296,7 +2296,7 @@ }, { "cell_type": "markdown", - "id": "b89dfb88", + "id": "1bb713b7", "metadata": {}, "source": [ "## Naive Bayes\n", @@ -2310,13 +2310,13 @@ { "cell_type": "code", "execution_count": 38, - "id": "628b0355", + "id": "47d85305", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:34.171111Z", - "iopub.status.busy": "2023-08-07T00:18:34.171037Z", - "iopub.status.idle": "2023-08-07T00:18:34.174682Z", - "shell.execute_reply": "2023-08-07T00:18:34.174410Z" + "iopub.execute_input": "2023-08-21T02:28:57.611305Z", + "iopub.status.busy": "2023-08-21T02:28:57.611177Z", + "iopub.status.idle": "2023-08-21T02:28:57.615527Z", + "shell.execute_reply": "2023-08-21T02:28:57.615221Z" }, "lines_to_next_cell": 2 }, @@ -2342,7 +2342,7 @@ }, { "cell_type": "markdown", - "id": "66916c68", + "id": "363a04ab", "metadata": {}, "source": [ "The classes are stored as `classes_`." @@ -2351,13 +2351,13 @@ { "cell_type": "code", "execution_count": 39, - "id": "8a5fc302", + "id": "c553aadf", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:34.176064Z", - "iopub.status.busy": "2023-08-07T00:18:34.175981Z", - "iopub.status.idle": "2023-08-07T00:18:34.178020Z", - "shell.execute_reply": "2023-08-07T00:18:34.177775Z" + "iopub.execute_input": "2023-08-21T02:28:57.617346Z", + "iopub.status.busy": "2023-08-21T02:28:57.617202Z", + "iopub.status.idle": "2023-08-21T02:28:57.619612Z", + "shell.execute_reply": "2023-08-21T02:28:57.619301Z" }, "lines_to_next_cell": 2 }, @@ -2379,7 +2379,7 @@ }, { "cell_type": "markdown", - "id": "753c7d37", + "id": "88ba284a", "metadata": {}, "source": [ "The class prior probabilities are stored in the `class_prior_` attribute." @@ -2388,13 +2388,13 @@ { "cell_type": "code", "execution_count": 40, - "id": "6b1b5cc6", + "id": "4604bd3d", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:34.179469Z", - "iopub.status.busy": "2023-08-07T00:18:34.179381Z", - "iopub.status.idle": "2023-08-07T00:18:34.181492Z", - "shell.execute_reply": "2023-08-07T00:18:34.181231Z" + "iopub.execute_input": "2023-08-21T02:28:57.621294Z", + "iopub.status.busy": "2023-08-21T02:28:57.621168Z", + "iopub.status.idle": "2023-08-21T02:28:57.623355Z", + "shell.execute_reply": "2023-08-21T02:28:57.623086Z" }, "lines_to_next_cell": 2 }, @@ -2416,7 +2416,7 @@ }, { "cell_type": "markdown", - "id": "848e5d7c", + "id": "29471619", "metadata": {}, "source": [ "The parameters of the features can be found in the `theta_` and `var_` attributes. The number of rows\n", @@ -2427,13 +2427,13 @@ { "cell_type": "code", "execution_count": 41, - "id": "1a4b7cb0", + "id": "5ac2cabe", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:34.182840Z", - "iopub.status.busy": "2023-08-07T00:18:34.182768Z", - "iopub.status.idle": "2023-08-07T00:18:34.184754Z", - "shell.execute_reply": "2023-08-07T00:18:34.184502Z" + "iopub.execute_input": "2023-08-21T02:28:57.624902Z", + "iopub.status.busy": "2023-08-21T02:28:57.624775Z", + "iopub.status.idle": "2023-08-21T02:28:57.627201Z", + "shell.execute_reply": "2023-08-21T02:28:57.626911Z" } }, "outputs": [ @@ -2455,7 +2455,7 @@ }, { "cell_type": "markdown", - "id": "60efd24c", + "id": "83986c67", "metadata": {}, "source": [ "Its variance is 1.503." @@ -2464,13 +2464,13 @@ { "cell_type": "code", "execution_count": 42, - "id": "f59d7cb4", + "id": "f8623945", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:34.186100Z", - "iopub.status.busy": "2023-08-07T00:18:34.186027Z", - "iopub.status.idle": "2023-08-07T00:18:34.188103Z", - "shell.execute_reply": "2023-08-07T00:18:34.187846Z" + "iopub.execute_input": "2023-08-21T02:28:57.628781Z", + "iopub.status.busy": "2023-08-21T02:28:57.628673Z", + "iopub.status.idle": "2023-08-21T02:28:57.631185Z", + "shell.execute_reply": "2023-08-21T02:28:57.630909Z" }, "lines_to_next_cell": 0 }, @@ -2493,7 +2493,7 @@ }, { "cell_type": "markdown", - "id": "4518d5db", + "id": "735e373e", "metadata": {}, "source": [ "How do we know the names of these attributes? We use `NB?` (or `?NB`).\n", @@ -2504,13 +2504,13 @@ { "cell_type": "code", "execution_count": 43, - "id": "aa50d0b8", + "id": "0790f26e", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:34.189446Z", - "iopub.status.busy": "2023-08-07T00:18:34.189365Z", - "iopub.status.idle": "2023-08-07T00:18:34.192272Z", - "shell.execute_reply": "2023-08-07T00:18:34.192020Z" + "iopub.execute_input": "2023-08-21T02:28:57.632749Z", + "iopub.status.busy": "2023-08-21T02:28:57.632622Z", + "iopub.status.idle": "2023-08-21T02:28:57.635950Z", + "shell.execute_reply": "2023-08-21T02:28:57.635645Z" }, "lines_to_next_cell": 2 }, @@ -2534,7 +2534,7 @@ }, { "cell_type": "markdown", - "id": "3ee8e214", + "id": "d6c04b6f", "metadata": {}, "source": [ "Similarly for the variance:" @@ -2543,13 +2543,13 @@ { "cell_type": "code", "execution_count": 44, - "id": "3a2b0653", + "id": "4a8cf0ce", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:34.193606Z", - "iopub.status.busy": "2023-08-07T00:18:34.193530Z", - "iopub.status.idle": "2023-08-07T00:18:34.196330Z", - "shell.execute_reply": "2023-08-07T00:18:34.196080Z" + "iopub.execute_input": "2023-08-21T02:28:57.637431Z", + "iopub.status.busy": "2023-08-21T02:28:57.637345Z", + "iopub.status.idle": "2023-08-21T02:28:57.640679Z", + "shell.execute_reply": "2023-08-21T02:28:57.640387Z" }, "lines_to_next_cell": 0 }, @@ -2573,7 +2573,7 @@ }, { "cell_type": "markdown", - "id": "5cb3b59d", + "id": "ada40be5", "metadata": {}, "source": [ "Since `NB()` is a classifier in the `sklearn` library, making predictions\n", @@ -2583,13 +2583,13 @@ { "cell_type": "code", "execution_count": 45, - "id": "938f09ea", + "id": "94e7ff1a", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:34.197723Z", - "iopub.status.busy": "2023-08-07T00:18:34.197649Z", - "iopub.status.idle": "2023-08-07T00:18:34.201814Z", - "shell.execute_reply": "2023-08-07T00:18:34.201560Z" + "iopub.execute_input": "2023-08-21T02:28:57.642306Z", + "iopub.status.busy": "2023-08-21T02:28:57.642190Z", + "iopub.status.idle": "2023-08-21T02:28:57.646804Z", + "shell.execute_reply": "2023-08-21T02:28:57.646534Z" } }, "outputs": [ @@ -2657,7 +2657,7 @@ }, { "cell_type": "markdown", - "id": "a0ce38d6", + "id": "83ee1f52", "metadata": {}, "source": [ "Naive Bayes performs well on these data, with accurate predictions over 59% of the time. This is slightly worse than QDA, but much better than LDA.\n", @@ -2668,13 +2668,13 @@ { "cell_type": "code", "execution_count": 46, - "id": "42f0e4a2", + "id": "137e23aa", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:34.203256Z", - "iopub.status.busy": "2023-08-07T00:18:34.203171Z", - "iopub.status.idle": "2023-08-07T00:18:34.206007Z", - "shell.execute_reply": "2023-08-07T00:18:34.205785Z" + "iopub.execute_input": "2023-08-21T02:28:57.648357Z", + "iopub.status.busy": "2023-08-21T02:28:57.648246Z", + "iopub.status.idle": "2023-08-21T02:28:57.651178Z", + "shell.execute_reply": "2023-08-21T02:28:57.650935Z" }, "lines_to_next_cell": 2 }, @@ -2700,7 +2700,7 @@ }, { "cell_type": "markdown", - "id": "ede194da", + "id": "52c4905b", "metadata": {}, "source": [ "## K-Nearest Neighbors\n", @@ -2718,13 +2718,13 @@ { "cell_type": "code", "execution_count": 47, - "id": "8b833ee4", + "id": "142c5217", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:34.207393Z", - "iopub.status.busy": "2023-08-07T00:18:34.207316Z", - "iopub.status.idle": "2023-08-07T00:18:34.217410Z", - "shell.execute_reply": "2023-08-07T00:18:34.217153Z" + "iopub.execute_input": "2023-08-21T02:28:57.652781Z", + "iopub.status.busy": "2023-08-21T02:28:57.652676Z", + "iopub.status.idle": "2023-08-21T02:28:57.665013Z", + "shell.execute_reply": "2023-08-21T02:28:57.664742Z" } }, "outputs": [ @@ -2795,7 +2795,7 @@ }, { "cell_type": "markdown", - "id": "5fb57a8d", + "id": "7122ab7d", "metadata": {}, "source": [ "The results using $K=1$ are not very good, since only $50%$ of the\n", @@ -2806,13 +2806,13 @@ { "cell_type": "code", "execution_count": 48, - "id": "45410b7f", + "id": "f5a272ee", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:34.218786Z", - "iopub.status.busy": "2023-08-07T00:18:34.218710Z", - "iopub.status.idle": "2023-08-07T00:18:34.221046Z", - "shell.execute_reply": "2023-08-07T00:18:34.220711Z" + "iopub.execute_input": "2023-08-21T02:28:57.666910Z", + "iopub.status.busy": "2023-08-21T02:28:57.666782Z", + "iopub.status.idle": "2023-08-21T02:28:57.669498Z", + "shell.execute_reply": "2023-08-21T02:28:57.669179Z" } }, "outputs": [ @@ -2833,7 +2833,7 @@ }, { "cell_type": "markdown", - "id": "500e00a1", + "id": "978e8677", "metadata": {}, "source": [ "We repeat the\n", @@ -2843,13 +2843,13 @@ { "cell_type": "code", "execution_count": 49, - "id": "ae6e0156", + "id": "95e206a8", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:34.223557Z", - "iopub.status.busy": "2023-08-07T00:18:34.223449Z", - "iopub.status.idle": "2023-08-07T00:18:34.231477Z", - "shell.execute_reply": "2023-08-07T00:18:34.231224Z" + "iopub.execute_input": "2023-08-21T02:28:57.671045Z", + "iopub.status.busy": "2023-08-21T02:28:57.670939Z", + "iopub.status.idle": "2023-08-21T02:28:57.679000Z", + "shell.execute_reply": "2023-08-21T02:28:57.678715Z" }, "lines_to_next_cell": 0 }, @@ -2873,7 +2873,7 @@ }, { "cell_type": "markdown", - "id": "11a369af", + "id": "181bed9c", "metadata": {}, "source": [ "The results have improved slightly. But increasing *K* further\n", @@ -2884,7 +2884,7 @@ }, { "cell_type": "markdown", - "id": "ab3b1e64", + "id": "07a9cc30", "metadata": {}, "source": [ "KNN does not perform well on the `Smarket` data, but it often does provide impressive results. As an example we will apply the KNN approach to the `Caravan` data set, which is part of the `ISLP` library. This data set includes 85\n", @@ -2898,13 +2898,13 @@ { "cell_type": "code", "execution_count": 50, - "id": "9338564d", + "id": "422563b7", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:34.233037Z", - "iopub.status.busy": "2023-08-07T00:18:34.232954Z", - "iopub.status.idle": "2023-08-07T00:18:34.250597Z", - "shell.execute_reply": "2023-08-07T00:18:34.250317Z" + "iopub.execute_input": "2023-08-21T02:28:57.680643Z", + "iopub.status.busy": "2023-08-21T02:28:57.680560Z", + "iopub.status.idle": "2023-08-21T02:28:57.698929Z", + "shell.execute_reply": "2023-08-21T02:28:57.698652Z" }, "lines_to_next_cell": 2 }, @@ -2930,7 +2930,7 @@ }, { "cell_type": "markdown", - "id": "ba5e14a9", + "id": "1d928895", "metadata": {}, "source": [ "The method `value_counts()` takes a `pd.Series` or `pd.DataFrame` and returns\n", @@ -2942,13 +2942,13 @@ { "cell_type": "code", "execution_count": 51, - "id": "a94f2ea7", + "id": "583c860c", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:34.252089Z", - "iopub.status.busy": "2023-08-07T00:18:34.252008Z", - "iopub.status.idle": "2023-08-07T00:18:34.254154Z", - "shell.execute_reply": "2023-08-07T00:18:34.253908Z" + "iopub.execute_input": "2023-08-21T02:28:57.700534Z", + "iopub.status.busy": "2023-08-21T02:28:57.700406Z", + "iopub.status.idle": "2023-08-21T02:28:57.702790Z", + "shell.execute_reply": "2023-08-21T02:28:57.702539Z" }, "lines_to_next_cell": 2 }, @@ -2970,7 +2970,7 @@ }, { "cell_type": "markdown", - "id": "a753d948", + "id": "c4f745d5", "metadata": {}, "source": [ "Our features will include all columns except `Purchase`." @@ -2979,13 +2979,13 @@ { "cell_type": "code", "execution_count": 52, - "id": "6b6438b0", + "id": "19ee3bf2", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:34.255519Z", - "iopub.status.busy": "2023-08-07T00:18:34.255441Z", - "iopub.status.idle": "2023-08-07T00:18:34.258008Z", - "shell.execute_reply": "2023-08-07T00:18:34.257754Z" + "iopub.execute_input": "2023-08-21T02:28:57.704427Z", + "iopub.status.busy": "2023-08-21T02:28:57.704308Z", + "iopub.status.idle": "2023-08-21T02:28:57.707107Z", + "shell.execute_reply": "2023-08-21T02:28:57.706716Z" } }, "outputs": [], @@ -2995,7 +2995,7 @@ }, { "cell_type": "markdown", - "id": "52a62ab9", + "id": "3b9a30b4", "metadata": {}, "source": [ "Because the KNN classifier predicts the class of a given test\n", @@ -3028,13 +3028,13 @@ { "cell_type": "code", "execution_count": 53, - "id": "158bfb3f", + "id": "fdc0e5f1", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:34.259410Z", - "iopub.status.busy": "2023-08-07T00:18:34.259332Z", - "iopub.status.idle": "2023-08-07T00:18:34.261018Z", - "shell.execute_reply": "2023-08-07T00:18:34.260785Z" + "iopub.execute_input": "2023-08-21T02:28:57.708836Z", + "iopub.status.busy": "2023-08-21T02:28:57.708707Z", + "iopub.status.idle": "2023-08-21T02:28:57.710507Z", + "shell.execute_reply": "2023-08-21T02:28:57.710220Z" }, "lines_to_next_cell": 0 }, @@ -3047,7 +3047,7 @@ }, { "cell_type": "markdown", - "id": "45baf26c", + "id": "7613cdcd", "metadata": {}, "source": [ "The argument `with_mean` indicates whether or not\n", @@ -3067,13 +3067,13 @@ { "cell_type": "code", "execution_count": 54, - "id": "d11b04c4", + "id": "2bb9d48b", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:34.262381Z", - "iopub.status.busy": "2023-08-07T00:18:34.262309Z", - "iopub.status.idle": "2023-08-07T00:18:34.268511Z", - "shell.execute_reply": "2023-08-07T00:18:34.268240Z" + "iopub.execute_input": "2023-08-21T02:28:57.712025Z", + "iopub.status.busy": "2023-08-21T02:28:57.711919Z", + "iopub.status.idle": "2023-08-21T02:28:57.717961Z", + "shell.execute_reply": "2023-08-21T02:28:57.717623Z" }, "lines_to_next_cell": 0 }, @@ -3085,7 +3085,7 @@ }, { "cell_type": "markdown", - "id": "f388fe5b", + "id": "fb65f78c", "metadata": {}, "source": [ "Now every column of `feature_std` below has a standard deviation of\n", @@ -3095,13 +3095,13 @@ { "cell_type": "code", "execution_count": 55, - "id": "f0c65b34", + "id": "649b57b3", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:34.270915Z", - "iopub.status.busy": "2023-08-07T00:18:34.270815Z", - "iopub.status.idle": "2023-08-07T00:18:34.280162Z", - "shell.execute_reply": "2023-08-07T00:18:34.279871Z" + "iopub.execute_input": "2023-08-21T02:28:57.719733Z", + "iopub.status.busy": "2023-08-21T02:28:57.719643Z", + "iopub.status.idle": "2023-08-21T02:28:57.725788Z", + "shell.execute_reply": "2023-08-21T02:28:57.725511Z" } }, "outputs": [ @@ -3136,10 +3136,10 @@ }, { "cell_type": "markdown", - "id": "9668a83b", + "id": "758fa566", "metadata": {}, "source": [ - "Notice that the standard deviations are not quite $1$ here; this is again due to some procedures using the $1/n$ convention for variances (in this case `scaler()`), while others use $1/(n-1)$ (the `std()` method). See the footnote on page 103.\n", + "Notice that the standard deviations are not quite $1$ here; this is again due to some procedures using the $1/n$ convention for variances (in this case `scaler()`), while others use $1/(n-1)$ (the `std()` method). See the footnote on page 200.\n", "In this case it does not matter, as long as the variables are all on the same scale.\n", "\n", "Using the function `train_test_split()` we now split the observations into a test set,\n", @@ -3151,13 +3151,13 @@ { "cell_type": "code", "execution_count": 56, - "id": "3861cc4f", + "id": "d0aafd5e", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:34.281711Z", - "iopub.status.busy": "2023-08-07T00:18:34.281622Z", - "iopub.status.idle": "2023-08-07T00:18:34.285831Z", - "shell.execute_reply": "2023-08-07T00:18:34.285544Z" + "iopub.execute_input": "2023-08-21T02:28:57.727208Z", + "iopub.status.busy": "2023-08-21T02:28:57.727114Z", + "iopub.status.idle": "2023-08-21T02:28:57.730769Z", + "shell.execute_reply": "2023-08-21T02:28:57.730507Z" }, "lines_to_next_cell": 0 }, @@ -3174,7 +3174,7 @@ }, { "cell_type": "markdown", - "id": "3cd24d0a", + "id": "03b585b9", "metadata": {}, "source": [ "`?train_test_split` reveals that the non-keyword arguments can be `lists`, `arrays`, `pandas dataframes` etc that all have the same length (`shape[0]`) and hence are *indexable*. In this case they are the dataframe `feature_std` and the response variable `Purchase`.\n", @@ -3186,13 +3186,13 @@ { "cell_type": "code", "execution_count": 57, - "id": "1b9d7b32", + "id": "ad02fb42", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:34.287335Z", - "iopub.status.busy": "2023-08-07T00:18:34.287257Z", - "iopub.status.idle": "2023-08-07T00:18:34.618181Z", - "shell.execute_reply": "2023-08-07T00:18:34.617751Z" + "iopub.execute_input": "2023-08-21T02:28:57.732302Z", + "iopub.status.busy": "2023-08-21T02:28:57.732202Z", + "iopub.status.idle": "2023-08-21T02:28:58.059169Z", + "shell.execute_reply": "2023-08-21T02:28:58.058739Z" }, "lines_to_next_cell": 2 }, @@ -3216,7 +3216,7 @@ }, { "cell_type": "markdown", - "id": "0464c302", + "id": "b9dd0550", "metadata": {}, "source": [ "The KNN error rate on the 1,000 test observations is about $11%$.\n", @@ -3239,13 +3239,13 @@ { "cell_type": "code", "execution_count": 58, - "id": "d683b2f9", + "id": "901f772e", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:34.620146Z", - "iopub.status.busy": "2023-08-07T00:18:34.620027Z", - "iopub.status.idle": "2023-08-07T00:18:34.626198Z", - "shell.execute_reply": "2023-08-07T00:18:34.625901Z" + "iopub.execute_input": "2023-08-21T02:28:58.061293Z", + "iopub.status.busy": "2023-08-21T02:28:58.061165Z", + "iopub.status.idle": "2023-08-21T02:28:58.067519Z", + "shell.execute_reply": "2023-08-21T02:28:58.067152Z" } }, "outputs": [ @@ -3312,7 +3312,7 @@ }, { "cell_type": "markdown", - "id": "19ed36b1", + "id": "b6260417", "metadata": {}, "source": [ "It turns out that KNN with $K=1$ does far better than random guessing\n", @@ -3324,13 +3324,13 @@ { "cell_type": "code", "execution_count": 59, - "id": "3498856a", + "id": "684f8941", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:34.627931Z", - "iopub.status.busy": "2023-08-07T00:18:34.627821Z", - "iopub.status.idle": "2023-08-07T00:18:34.630085Z", - "shell.execute_reply": "2023-08-07T00:18:34.629798Z" + "iopub.execute_input": "2023-08-21T02:28:58.069340Z", + "iopub.status.busy": "2023-08-21T02:28:58.069223Z", + "iopub.status.idle": "2023-08-21T02:28:58.071737Z", + "shell.execute_reply": "2023-08-21T02:28:58.071247Z" }, "lines_to_next_cell": 2 }, @@ -3352,7 +3352,7 @@ }, { "cell_type": "markdown", - "id": "3ec215b9", + "id": "19dcfad2", "metadata": {}, "source": [ "### Tuning Parameters\n", @@ -3368,13 +3368,13 @@ { "cell_type": "code", "execution_count": 60, - "id": "9ed36c50", + "id": "4d984cf0", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:34.631783Z", - "iopub.status.busy": "2023-08-07T00:18:34.631676Z", - "iopub.status.idle": "2023-08-07T00:18:34.704358Z", - "shell.execute_reply": "2023-08-07T00:18:34.703933Z" + "iopub.execute_input": "2023-08-21T02:28:58.073571Z", + "iopub.status.busy": "2023-08-21T02:28:58.073457Z", + "iopub.status.idle": "2023-08-21T02:28:58.146516Z", + "shell.execute_reply": "2023-08-21T02:28:58.146020Z" }, "lines_to_next_cell": 0 }, @@ -3409,7 +3409,7 @@ }, { "cell_type": "markdown", - "id": "0718d8f0", + "id": "04c42362", "metadata": {}, "source": [ "We see some variability --- the numbers for `K=4` are very different from the rest.\n", @@ -3435,13 +3435,13 @@ { "cell_type": "code", "execution_count": 61, - "id": "8605a327", + "id": "d24f4e50", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:34.706353Z", - "iopub.status.busy": "2023-08-07T00:18:34.706235Z", - "iopub.status.idle": "2023-08-07T00:18:35.327825Z", - "shell.execute_reply": "2023-08-07T00:18:35.327057Z" + "iopub.execute_input": "2023-08-21T02:28:58.148624Z", + "iopub.status.busy": "2023-08-21T02:28:58.148360Z", + "iopub.status.idle": "2023-08-21T02:28:58.773984Z", + "shell.execute_reply": "2023-08-21T02:28:58.773325Z" } }, "outputs": [ @@ -3512,7 +3512,7 @@ }, { "cell_type": "markdown", - "id": "daf1655f", + "id": "f2d91f33", "metadata": {}, "source": [ "We used the argument `solver='liblinear'` above to\n", @@ -3532,13 +3532,13 @@ { "cell_type": "code", "execution_count": 62, - "id": "e686f675", + "id": "25152580", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:35.331998Z", - "iopub.status.busy": "2023-08-07T00:18:35.331623Z", - "iopub.status.idle": "2023-08-07T00:18:35.345291Z", - "shell.execute_reply": "2023-08-07T00:18:35.344659Z" + "iopub.execute_input": "2023-08-21T02:28:58.778052Z", + "iopub.status.busy": "2023-08-21T02:28:58.777754Z", + "iopub.status.idle": "2023-08-21T02:28:58.791505Z", + "shell.execute_reply": "2023-08-21T02:28:58.790362Z" } }, "outputs": [ @@ -3607,13 +3607,13 @@ { "cell_type": "code", "execution_count": 63, - "id": "d92cfcd4", + "id": "b8ea6e08", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:35.349220Z", - "iopub.status.busy": "2023-08-07T00:18:35.348866Z", - "iopub.status.idle": "2023-08-07T00:18:35.355490Z", - "shell.execute_reply": "2023-08-07T00:18:35.354787Z" + "iopub.execute_input": "2023-08-21T02:28:58.798441Z", + "iopub.status.busy": "2023-08-21T02:28:58.798187Z", + "iopub.status.idle": "2023-08-21T02:28:58.805015Z", + "shell.execute_reply": "2023-08-21T02:28:58.804266Z" }, "lines_to_next_cell": 0 }, @@ -3635,7 +3635,7 @@ }, { "cell_type": "markdown", - "id": "8a0c1140", + "id": "bb96ed25", "metadata": {}, "source": [ "## Linear and Poisson Regression on the Bikeshare Data\n", @@ -3647,13 +3647,13 @@ { "cell_type": "code", "execution_count": 64, - "id": "6f93060c", + "id": "def80d79", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:35.359503Z", - "iopub.status.busy": "2023-08-07T00:18:35.359134Z", - "iopub.status.idle": "2023-08-07T00:18:35.374649Z", - "shell.execute_reply": "2023-08-07T00:18:35.373898Z" + "iopub.execute_input": "2023-08-21T02:28:58.808423Z", + "iopub.status.busy": "2023-08-21T02:28:58.807929Z", + "iopub.status.idle": "2023-08-21T02:28:58.826147Z", + "shell.execute_reply": "2023-08-21T02:28:58.825308Z" }, "lines_to_next_cell": 0 }, @@ -3664,7 +3664,7 @@ }, { "cell_type": "markdown", - "id": "af82d61e", + "id": "146abe69", "metadata": {}, "source": [ "Let's have a peek at the dimensions and names of the variables in this dataframe." @@ -3673,13 +3673,13 @@ { "cell_type": "code", "execution_count": 65, - "id": "725ce173", + "id": "f899d5ab", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:35.378452Z", - "iopub.status.busy": "2023-08-07T00:18:35.378048Z", - "iopub.status.idle": "2023-08-07T00:18:35.382634Z", - "shell.execute_reply": "2023-08-07T00:18:35.382022Z" + "iopub.execute_input": "2023-08-21T02:28:58.838005Z", + "iopub.status.busy": "2023-08-21T02:28:58.837542Z", + "iopub.status.idle": "2023-08-21T02:28:58.842697Z", + "shell.execute_reply": "2023-08-21T02:28:58.841989Z" } }, "outputs": [ @@ -3704,7 +3704,7 @@ }, { "cell_type": "markdown", - "id": "9b133dc3", + "id": "b07be452", "metadata": {}, "source": [ "### Linear Regression\n", @@ -3715,13 +3715,13 @@ { "cell_type": "code", "execution_count": 66, - "id": "ee3e5e3b", + "id": "76f4cea5", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:35.386155Z", - "iopub.status.busy": "2023-08-07T00:18:35.385658Z", - "iopub.status.idle": "2023-08-07T00:18:35.457335Z", - "shell.execute_reply": "2023-08-07T00:18:35.456140Z" + "iopub.execute_input": "2023-08-21T02:28:58.846154Z", + "iopub.status.busy": "2023-08-21T02:28:58.845860Z", + "iopub.status.idle": "2023-08-21T02:28:58.936368Z", + "shell.execute_reply": "2023-08-21T02:28:58.931496Z" } }, "outputs": [ @@ -3755,86 +3755,86 @@ " \n", " \n", " intercept\n", - " -27.2068\n", - " 6.715\n", - " -4.052\n", + " -68.6317\n", + " 5.307\n", + " -12.932\n", " 0.000\n", " \n", " \n", - " mnth[Aug]\n", - " 11.8181\n", - " 4.698\n", - " 2.515\n", - " 0.012\n", - " \n", - " \n", - " mnth[Dec]\n", - " 5.0328\n", - " 4.280\n", - " 1.176\n", - " 0.240\n", - " \n", - " \n", " mnth[Feb]\n", - " -34.5797\n", - " 4.575\n", - " -7.558\n", - " 0.000\n", - " \n", - " \n", - " mnth[Jan]\n", - " -41.4249\n", - " 4.972\n", - " -8.331\n", - " 0.000\n", - " \n", - " \n", - " mnth[July]\n", - " 3.8996\n", - " 5.003\n", - " 0.779\n", - " 0.436\n", - " \n", - " \n", - " mnth[June]\n", - " 26.3938\n", - " 4.642\n", - " 5.686\n", - " 0.000\n", + " 6.8452\n", + " 4.287\n", + " 1.597\n", + " 0.110\n", " \n", " \n", " mnth[March]\n", - " -24.8735\n", - " 4.277\n", - " -5.815\n", + " 16.5514\n", + " 4.301\n", + " 3.848\n", + " 0.000\n", + " \n", + " \n", + " mnth[April]\n", + " 41.4249\n", + " 4.972\n", + " 8.331\n", " 0.000\n", " \n", " \n", " mnth[May]\n", - " 31.1322\n", - " 4.150\n", - " 7.501\n", + " 72.5571\n", + " 5.641\n", + " 12.862\n", " 0.000\n", " \n", " \n", - " mnth[Nov]\n", - " 18.8851\n", - " 4.099\n", - " 4.607\n", + " mnth[June]\n", + " 67.8187\n", + " 6.544\n", + " 10.364\n", " 0.000\n", " \n", " \n", - " mnth[Oct]\n", - " 34.4093\n", - " 4.006\n", - " 8.589\n", + " mnth[July]\n", + " 45.3245\n", + " 7.081\n", + " 6.401\n", + " 0.000\n", + " \n", + " \n", + " mnth[Aug]\n", + " 53.2430\n", + " 6.640\n", + " 8.019\n", " 0.000\n", " \n", " \n", " mnth[Sept]\n", - " 25.2534\n", - " 4.293\n", - " 5.883\n", + " 66.6783\n", + " 5.925\n", + " 11.254\n", + " 0.000\n", + " \n", + " \n", + " mnth[Oct]\n", + " 75.8343\n", + " 4.950\n", + " 15.319\n", + " 0.000\n", + " \n", + " \n", + " mnth[Nov]\n", + " 60.3100\n", + " 4.610\n", + " 13.083\n", + " 0.000\n", + " \n", + " \n", + " mnth[Dec]\n", + " 46.4577\n", + " 4.271\n", + " 10.878\n", " 0.000\n", " \n", " \n", @@ -4039,18 +4039,18 @@ ], "text/plain": [ " coef std err t P>|t|\n", - "intercept -27.2068 6.715 -4.052 0.000\n", - "mnth[Aug] 11.8181 4.698 2.515 0.012\n", - "mnth[Dec] 5.0328 4.280 1.176 0.240\n", - "mnth[Feb] -34.5797 4.575 -7.558 0.000\n", - "mnth[Jan] -41.4249 4.972 -8.331 0.000\n", - "mnth[July] 3.8996 5.003 0.779 0.436\n", - "mnth[June] 26.3938 4.642 5.686 0.000\n", - "mnth[March] -24.8735 4.277 -5.815 0.000\n", - "mnth[May] 31.1322 4.150 7.501 0.000\n", - "mnth[Nov] 18.8851 4.099 4.607 0.000\n", - "mnth[Oct] 34.4093 4.006 8.589 0.000\n", - "mnth[Sept] 25.2534 4.293 5.883 0.000\n", + "intercept -68.6317 5.307 -12.932 0.000\n", + "mnth[Feb] 6.8452 4.287 1.597 0.110\n", + "mnth[March] 16.5514 4.301 3.848 0.000\n", + "mnth[April] 41.4249 4.972 8.331 0.000\n", + "mnth[May] 72.5571 5.641 12.862 0.000\n", + "mnth[June] 67.8187 6.544 10.364 0.000\n", + "mnth[July] 45.3245 7.081 6.401 0.000\n", + "mnth[Aug] 53.2430 6.640 8.019 0.000\n", + "mnth[Sept] 66.6783 5.925 11.254 0.000\n", + "mnth[Oct] 75.8343 4.950 15.319 0.000\n", + "mnth[Nov] 60.3100 4.610 13.083 0.000\n", + "mnth[Dec] 46.4577 4.271 10.878 0.000\n", "hr[1] -14.5793 5.699 -2.558 0.011\n", "hr[2] -21.5791 5.733 -3.764 0.000\n", "hr[3] -31.1408 5.778 -5.389 0.000\n", @@ -4099,7 +4099,7 @@ }, { "cell_type": "markdown", - "id": "36f3063f", + "id": "46d55b3d", "metadata": {}, "source": [ "There are 24 levels in `hr` and 40 rows in all.\n", @@ -4119,13 +4119,13 @@ { "cell_type": "code", "execution_count": 67, - "id": "d6a047f5", + "id": "5778ada8", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:35.461563Z", - "iopub.status.busy": "2023-08-07T00:18:35.460853Z", - "iopub.status.idle": "2023-08-07T00:18:35.464618Z", - "shell.execute_reply": "2023-08-07T00:18:35.463961Z" + "iopub.execute_input": "2023-08-21T02:28:58.941746Z", + "iopub.status.busy": "2023-08-21T02:28:58.941366Z", + "iopub.status.idle": "2023-08-21T02:28:58.948890Z", + "shell.execute_reply": "2023-08-21T02:28:58.947630Z" }, "lines_to_next_cell": 0 }, @@ -4137,7 +4137,7 @@ }, { "cell_type": "markdown", - "id": "6ed435ca", + "id": "06849d92", "metadata": {}, "source": [ "Refitting again:" @@ -4146,13 +4146,13 @@ { "cell_type": "code", "execution_count": 68, - "id": "d7f6edaf", + "id": "c6da14b9", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:35.467867Z", - "iopub.status.busy": "2023-08-07T00:18:35.467482Z", - "iopub.status.idle": "2023-08-07T00:18:35.536860Z", - "shell.execute_reply": "2023-08-07T00:18:35.535938Z" + "iopub.execute_input": "2023-08-21T02:28:58.953721Z", + "iopub.status.busy": "2023-08-21T02:28:58.953330Z", + "iopub.status.idle": "2023-08-21T02:28:59.054283Z", + "shell.execute_reply": "2023-08-21T02:28:59.053564Z" } }, "outputs": [ @@ -4530,7 +4530,7 @@ }, { "cell_type": "markdown", - "id": "edea9530", + "id": "62d884bd", "metadata": {}, "source": [ "What is the difference between the two codings? In `M2_lm`, a\n", @@ -4556,20 +4556,20 @@ { "cell_type": "code", "execution_count": 69, - "id": "412ce964", + "id": "461d57c5", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:35.541020Z", - "iopub.status.busy": "2023-08-07T00:18:35.540717Z", - "iopub.status.idle": "2023-08-07T00:18:35.554132Z", - "shell.execute_reply": "2023-08-07T00:18:35.552973Z" + "iopub.execute_input": "2023-08-21T02:28:59.063565Z", + "iopub.status.busy": "2023-08-21T02:28:59.063233Z", + "iopub.status.idle": "2023-08-21T02:28:59.071787Z", + "shell.execute_reply": "2023-08-21T02:28:59.070620Z" } }, "outputs": [ { "data": { "text/plain": [ - "4.186226544780569e-19" + "1.0353919305327476e-18" ] }, "execution_count": 69, @@ -4583,7 +4583,7 @@ }, { "cell_type": "markdown", - "id": "69539d1c", + "id": "a5a50827", "metadata": {}, "source": [ "The sum of squared differences is zero. We can also see this using the\n", @@ -4593,13 +4593,13 @@ { "cell_type": "code", "execution_count": 70, - "id": "5afd0d5d", + "id": "05d33247", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:35.559035Z", - "iopub.status.busy": "2023-08-07T00:18:35.558329Z", - "iopub.status.idle": "2023-08-07T00:18:35.566101Z", - "shell.execute_reply": "2023-08-07T00:18:35.565469Z" + "iopub.execute_input": "2023-08-21T02:28:59.077767Z", + "iopub.status.busy": "2023-08-21T02:28:59.077090Z", + "iopub.status.idle": "2023-08-21T02:28:59.085265Z", + "shell.execute_reply": "2023-08-21T02:28:59.084291Z" }, "lines_to_next_cell": 2 }, @@ -4621,7 +4621,7 @@ }, { "cell_type": "markdown", - "id": "fdc83f2e", + "id": "41256e16", "metadata": {}, "source": [ "To reproduce the left-hand side of Figure 4.13\n", @@ -4636,13 +4636,13 @@ { "cell_type": "code", "execution_count": 71, - "id": "4629f2c9", + "id": "bee42b38", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:35.570679Z", - "iopub.status.busy": "2023-08-07T00:18:35.570231Z", - "iopub.status.idle": "2023-08-07T00:18:35.579784Z", - "shell.execute_reply": "2023-08-07T00:18:35.579027Z" + "iopub.execute_input": "2023-08-21T02:28:59.089190Z", + "iopub.status.busy": "2023-08-21T02:28:59.088696Z", + "iopub.status.idle": "2023-08-21T02:28:59.099445Z", + "shell.execute_reply": "2023-08-21T02:28:59.098750Z" }, "lines_to_next_cell": 0 }, @@ -4676,7 +4676,7 @@ }, { "cell_type": "markdown", - "id": "6fdd5f23", + "id": "976ff3e0", "metadata": {}, "source": [ "Next, we append `Dec` as the negative of the sum of all other months." @@ -4685,13 +4685,13 @@ { "cell_type": "code", "execution_count": 72, - "id": "b3e55833", + "id": "4aa60857", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:35.583928Z", - "iopub.status.busy": "2023-08-07T00:18:35.583623Z", - "iopub.status.idle": "2023-08-07T00:18:35.592868Z", - "shell.execute_reply": "2023-08-07T00:18:35.592219Z" + "iopub.execute_input": "2023-08-21T02:28:59.103423Z", + "iopub.status.busy": "2023-08-21T02:28:59.103057Z", + "iopub.status.idle": "2023-08-21T02:28:59.112346Z", + "shell.execute_reply": "2023-08-21T02:28:59.111002Z" }, "lines_to_next_cell": 0 }, @@ -4732,7 +4732,7 @@ }, { "cell_type": "markdown", - "id": "4d1f1d30", + "id": "39be6060", "metadata": {}, "source": [ "Finally, to make the plot neater, we’ll just use the first letter of each month, which is the $6$th entry of each of\n", @@ -4742,13 +4742,13 @@ { "cell_type": "code", "execution_count": 73, - "id": "cdbebc03", + "id": "894d3e2c", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:35.597005Z", - "iopub.status.busy": "2023-08-07T00:18:35.596605Z", - "iopub.status.idle": "2023-08-07T00:18:35.727830Z", - "shell.execute_reply": "2023-08-07T00:18:35.726982Z" + "iopub.execute_input": "2023-08-21T02:28:59.116495Z", + "iopub.status.busy": "2023-08-21T02:28:59.116193Z", + "iopub.status.idle": "2023-08-21T02:28:59.250351Z", + "shell.execute_reply": "2023-08-21T02:28:59.249608Z" } }, "outputs": [ @@ -4775,7 +4775,7 @@ }, { "cell_type": "markdown", - "id": "6f845be8", + "id": "fe1d213c", "metadata": {}, "source": [ "Reproducing the right-hand plot in Figure 4.13 follows a similar process." @@ -4784,13 +4784,13 @@ { "cell_type": "code", "execution_count": 74, - "id": "170fd6fd", + "id": "d636746e", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:35.733543Z", - "iopub.status.busy": "2023-08-07T00:18:35.731394Z", - "iopub.status.idle": "2023-08-07T00:18:35.740654Z", - "shell.execute_reply": "2023-08-07T00:18:35.740001Z" + "iopub.execute_input": "2023-08-21T02:28:59.253708Z", + "iopub.status.busy": "2023-08-21T02:28:59.253326Z", + "iopub.status.idle": "2023-08-21T02:28:59.260644Z", + "shell.execute_reply": "2023-08-21T02:28:59.259501Z" } }, "outputs": [], @@ -4804,7 +4804,7 @@ }, { "cell_type": "markdown", - "id": "100190e3", + "id": "c181f106", "metadata": {}, "source": [ "We now make the hour plot." @@ -4813,13 +4813,13 @@ { "cell_type": "code", "execution_count": 75, - "id": "1e09e126", + "id": "ce6a1623", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:35.744368Z", - "iopub.status.busy": "2023-08-07T00:18:35.744031Z", - "iopub.status.idle": "2023-08-07T00:18:35.880750Z", - "shell.execute_reply": "2023-08-07T00:18:35.880425Z" + "iopub.execute_input": "2023-08-21T02:28:59.264364Z", + "iopub.status.busy": "2023-08-21T02:28:59.264112Z", + "iopub.status.idle": "2023-08-21T02:28:59.384102Z", + "shell.execute_reply": "2023-08-21T02:28:59.383714Z" } }, "outputs": [ @@ -4846,7 +4846,7 @@ }, { "cell_type": "markdown", - "id": "bf730e5d", + "id": "8cafb6b7", "metadata": {}, "source": [ "### Poisson Regression\n", @@ -4859,13 +4859,13 @@ { "cell_type": "code", "execution_count": 76, - "id": "a6667dcf", + "id": "9fb8b759", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:35.882429Z", - "iopub.status.busy": "2023-08-07T00:18:35.882313Z", - "iopub.status.idle": "2023-08-07T00:18:35.968054Z", - "shell.execute_reply": "2023-08-07T00:18:35.967220Z" + "iopub.execute_input": "2023-08-21T02:28:59.386009Z", + "iopub.status.busy": "2023-08-21T02:28:59.385867Z", + "iopub.status.idle": "2023-08-21T02:28:59.478822Z", + "shell.execute_reply": "2023-08-21T02:28:59.477841Z" } }, "outputs": [], @@ -4875,7 +4875,7 @@ }, { "cell_type": "markdown", - "id": "8309c1fc", + "id": "9cc0ea6d", "metadata": {}, "source": [ "We can plot the coefficients associated with `mnth` and `hr`, in order to reproduce Figure 4.15. We first complete these coefficients as before." @@ -4884,13 +4884,13 @@ { "cell_type": "code", "execution_count": 77, - "id": "c20de5d8", + "id": "ee272341", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:35.973009Z", - "iopub.status.busy": "2023-08-07T00:18:35.972664Z", - "iopub.status.idle": "2023-08-07T00:18:35.996642Z", - "shell.execute_reply": "2023-08-07T00:18:35.996051Z" + "iopub.execute_input": "2023-08-21T02:28:59.482988Z", + "iopub.status.busy": "2023-08-21T02:28:59.482517Z", + "iopub.status.idle": "2023-08-21T02:28:59.506926Z", + "shell.execute_reply": "2023-08-21T02:28:59.506267Z" }, "lines_to_next_cell": 0 }, @@ -4909,7 +4909,7 @@ }, { "cell_type": "markdown", - "id": "41e58943", + "id": "4a86df8c", "metadata": {}, "source": [ "The plotting is as before." @@ -4918,13 +4918,13 @@ { "cell_type": "code", "execution_count": 78, - "id": "4a1a8488", + "id": "1f5bde07", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:36.000164Z", - "iopub.status.busy": "2023-08-07T00:18:35.999622Z", - "iopub.status.idle": "2023-08-07T00:18:36.204622Z", - "shell.execute_reply": "2023-08-07T00:18:36.203590Z" + "iopub.execute_input": "2023-08-21T02:28:59.510834Z", + "iopub.status.busy": "2023-08-21T02:28:59.510470Z", + "iopub.status.idle": "2023-08-21T02:28:59.792175Z", + "shell.execute_reply": "2023-08-21T02:28:59.791845Z" }, "lines_to_next_cell": 0 }, @@ -4933,7 +4933,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "/var/folders/16/8y65_zv174qgdp4ktlmpv12h0000gq/T/ipykernel_19145/3779905754.py:8: UserWarning: FixedFormatter should only be used together with FixedLocator\n", + "/var/folders/16/8y65_zv174qgdp4ktlmpv12h0000gq/T/ipykernel_80940/3779905754.py:8: UserWarning: FixedFormatter should only be used together with FixedLocator\n", " ax_hr.set_xticklabels(range(24)[::2], fontsize=20)\n" ] }, @@ -4963,7 +4963,7 @@ }, { "cell_type": "markdown", - "id": "5e74d13e", + "id": "ff00b931", "metadata": {}, "source": [ "We compare the fitted values of the two models.\n", @@ -4975,13 +4975,13 @@ { "cell_type": "code", "execution_count": 79, - "id": "a3158334", + "id": "b0bd66a1", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:36.209262Z", - "iopub.status.busy": "2023-08-07T00:18:36.208838Z", - "iopub.status.idle": "2023-08-07T00:18:36.338262Z", - "shell.execute_reply": "2023-08-07T00:18:36.337899Z" + "iopub.execute_input": "2023-08-21T02:28:59.793823Z", + "iopub.status.busy": "2023-08-21T02:28:59.793732Z", + "iopub.status.idle": "2023-08-21T02:28:59.904438Z", + "shell.execute_reply": "2023-08-21T02:28:59.904151Z" } }, "outputs": [ @@ -5009,7 +5009,7 @@ }, { "cell_type": "markdown", - "id": "2b03ac4f", + "id": "a3b4b06e", "metadata": {}, "source": [ "The predictions from the Poisson regression model are correlated with\n", diff --git a/Ch05-resample-lab.Rmd b/Ch05-resample-lab.Rmd index 0b606f7..34e2d1d 100644 --- a/Ch05-resample-lab.Rmd +++ b/Ch05-resample-lab.Rmd @@ -518,13 +518,13 @@ slope. Interestingly, these are somewhat different from the estimates obtained using the bootstrap. Does this indicate a problem with the bootstrap? In fact, it suggests the opposite. Recall that the standard formulas given in - {Equation 3.8 on page 80} + {Equation 3.8 on page 82} rely on certain assumptions. For example, they depend on the unknown parameter $\sigma^2$, the noise variance. We then estimate $\sigma^2$ using the RSS. Now although the formula for the standard errors do not rely on the linear model being correct, the estimate for $\sigma^2$ does. We see - {in Figure 3.8 on page 106} that there is + {in Figure 3.8 on page 108} that there is a non-linear relationship in the data, and so the residuals from a linear fit will be inflated, and so will $\hat{\sigma}^2$. Secondly, the standard formulas assume (somewhat unrealistically) that the $x_i$ diff --git a/Ch05-resample-lab.ipynb b/Ch05-resample-lab.ipynb index 3a18390..85c1f65 100644 --- a/Ch05-resample-lab.ipynb +++ b/Ch05-resample-lab.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "3a3f2f85", + "id": "85ad9863", "metadata": {}, "source": [ "\n", @@ -12,7 +12,7 @@ }, { "cell_type": "markdown", - "id": "bb22af17", + "id": "ac8b08af", "metadata": {}, "source": [ "# Lab: Cross-Validation and the Bootstrap\n", @@ -26,13 +26,13 @@ { "cell_type": "code", "execution_count": 1, - "id": "60fad148", + "id": "e7712cfe", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:37.622425Z", - "iopub.status.busy": "2023-08-07T00:18:37.621828Z", - "iopub.status.idle": "2023-08-07T00:18:38.459128Z", - "shell.execute_reply": "2023-08-07T00:18:38.458689Z" + "iopub.execute_input": "2023-08-21T02:29:01.252458Z", + "iopub.status.busy": "2023-08-21T02:29:01.251970Z", + "iopub.status.idle": "2023-08-21T02:29:02.044045Z", + "shell.execute_reply": "2023-08-21T02:29:02.043730Z" }, "lines_to_next_cell": 2 }, @@ -49,7 +49,7 @@ }, { "cell_type": "markdown", - "id": "78fcfe7a", + "id": "784a2ba3", "metadata": {}, "source": [ "There are several new imports needed for this lab." @@ -58,13 +58,13 @@ { "cell_type": "code", "execution_count": 2, - "id": "2478aeb4", + "id": "21c2ed4f", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:38.461290Z", - "iopub.status.busy": "2023-08-07T00:18:38.461070Z", - "iopub.status.idle": "2023-08-07T00:18:38.463158Z", - "shell.execute_reply": "2023-08-07T00:18:38.462899Z" + "iopub.execute_input": "2023-08-21T02:29:02.045927Z", + "iopub.status.busy": "2023-08-21T02:29:02.045761Z", + "iopub.status.idle": "2023-08-21T02:29:02.047761Z", + "shell.execute_reply": "2023-08-21T02:29:02.047491Z" }, "lines_to_next_cell": 2 }, @@ -81,7 +81,7 @@ }, { "cell_type": "markdown", - "id": "713d30db", + "id": "9ac3acd5", "metadata": {}, "source": [ "## The Validation Set Approach\n", @@ -102,13 +102,13 @@ { "cell_type": "code", "execution_count": 3, - "id": "99c95faf", + "id": "8af59641", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:38.464725Z", - "iopub.status.busy": "2023-08-07T00:18:38.464616Z", - "iopub.status.idle": "2023-08-07T00:18:38.472566Z", - "shell.execute_reply": "2023-08-07T00:18:38.472315Z" + "iopub.execute_input": "2023-08-21T02:29:02.049239Z", + "iopub.status.busy": "2023-08-21T02:29:02.049145Z", + "iopub.status.idle": "2023-08-21T02:29:02.055524Z", + "shell.execute_reply": "2023-08-21T02:29:02.055162Z" } }, "outputs": [], @@ -121,7 +121,7 @@ }, { "cell_type": "markdown", - "id": "57be35df", + "id": "e76383f0", "metadata": {}, "source": [ "Now we can fit a linear regression using only the observations corresponding to the training set `Auto_train`." @@ -130,13 +130,13 @@ { "cell_type": "code", "execution_count": 4, - "id": "41b0717d", + "id": "d9b0b7c8", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:38.474061Z", - "iopub.status.busy": "2023-08-07T00:18:38.473957Z", - "iopub.status.idle": "2023-08-07T00:18:38.477686Z", - "shell.execute_reply": "2023-08-07T00:18:38.477432Z" + "iopub.execute_input": "2023-08-21T02:29:02.057278Z", + "iopub.status.busy": "2023-08-21T02:29:02.057182Z", + "iopub.status.idle": "2023-08-21T02:29:02.062537Z", + "shell.execute_reply": "2023-08-21T02:29:02.062265Z" } }, "outputs": [], @@ -150,7 +150,7 @@ }, { "cell_type": "markdown", - "id": "7f1bef95", + "id": "d196dd08", "metadata": {}, "source": [ "We now use the `predict()` method of `results` evaluated on the model matrix for this model\n", @@ -160,13 +160,13 @@ { "cell_type": "code", "execution_count": 5, - "id": "d7ea3c0d", + "id": "3e77d831", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:38.479141Z", - "iopub.status.busy": "2023-08-07T00:18:38.479053Z", - "iopub.status.idle": "2023-08-07T00:18:38.483270Z", - "shell.execute_reply": "2023-08-07T00:18:38.483037Z" + "iopub.execute_input": "2023-08-21T02:29:02.064056Z", + "iopub.status.busy": "2023-08-21T02:29:02.063966Z", + "iopub.status.idle": "2023-08-21T02:29:02.068279Z", + "shell.execute_reply": "2023-08-21T02:29:02.068024Z" } }, "outputs": [ @@ -190,7 +190,7 @@ }, { "cell_type": "markdown", - "id": "6dba5d55", + "id": "f4369ee6", "metadata": {}, "source": [ "Hence our estimate for the validation MSE of the linear regression\n", @@ -204,13 +204,13 @@ { "cell_type": "code", "execution_count": 6, - "id": "a02a2d05", + "id": "0aa4bfcc", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:38.484782Z", - "iopub.status.busy": "2023-08-07T00:18:38.484689Z", - "iopub.status.idle": "2023-08-07T00:18:38.486891Z", - "shell.execute_reply": "2023-08-07T00:18:38.486642Z" + "iopub.execute_input": "2023-08-21T02:29:02.069789Z", + "iopub.status.busy": "2023-08-21T02:29:02.069682Z", + "iopub.status.idle": "2023-08-21T02:29:02.071953Z", + "shell.execute_reply": "2023-08-21T02:29:02.071703Z" } }, "outputs": [], @@ -235,7 +235,7 @@ }, { "cell_type": "markdown", - "id": "39ab59b1", + "id": "0271dc50", "metadata": {}, "source": [ "Let’s use this function to estimate the validation MSE\n", @@ -247,13 +247,13 @@ { "cell_type": "code", "execution_count": 7, - "id": "51d93dea", + "id": "a0dbd55f", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:38.488297Z", - "iopub.status.busy": "2023-08-07T00:18:38.488205Z", - "iopub.status.idle": "2023-08-07T00:18:38.497955Z", - "shell.execute_reply": "2023-08-07T00:18:38.497708Z" + "iopub.execute_input": "2023-08-21T02:29:02.073322Z", + "iopub.status.busy": "2023-08-21T02:29:02.073229Z", + "iopub.status.idle": "2023-08-21T02:29:02.088464Z", + "shell.execute_reply": "2023-08-21T02:29:02.088192Z" } }, "outputs": [ @@ -280,7 +280,7 @@ }, { "cell_type": "markdown", - "id": "936e168a", + "id": "a7401536", "metadata": {}, "source": [ "These error rates are $23.62, 18.76$, and $18.80$, respectively. If we\n", @@ -291,13 +291,13 @@ { "cell_type": "code", "execution_count": 8, - "id": "83432f06", + "id": "885136a4", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:38.499478Z", - "iopub.status.busy": "2023-08-07T00:18:38.499391Z", - "iopub.status.idle": "2023-08-07T00:18:38.509735Z", - "shell.execute_reply": "2023-08-07T00:18:38.509466Z" + "iopub.execute_input": "2023-08-21T02:29:02.089889Z", + "iopub.status.busy": "2023-08-21T02:29:02.089804Z", + "iopub.status.idle": "2023-08-21T02:29:02.105353Z", + "shell.execute_reply": "2023-08-21T02:29:02.105089Z" } }, "outputs": [ @@ -327,7 +327,7 @@ }, { "cell_type": "markdown", - "id": "f5ceb357", + "id": "00785402", "metadata": {}, "source": [ "Using this split of the observations into a training set and a validation set,\n", @@ -341,7 +341,7 @@ }, { "cell_type": "markdown", - "id": "6d624a5c", + "id": "21c071b8", "metadata": {}, "source": [ "## Cross-Validation\n", @@ -374,13 +374,13 @@ { "cell_type": "code", "execution_count": 9, - "id": "bcfc433f", + "id": "6d957d8c", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:38.511210Z", - "iopub.status.busy": "2023-08-07T00:18:38.511122Z", - "iopub.status.idle": "2023-08-07T00:18:39.069624Z", - "shell.execute_reply": "2023-08-07T00:18:39.069325Z" + "iopub.execute_input": "2023-08-21T02:29:02.106979Z", + "iopub.status.busy": "2023-08-21T02:29:02.106884Z", + "iopub.status.idle": "2023-08-21T02:29:03.184550Z", + "shell.execute_reply": "2023-08-21T02:29:03.184259Z" }, "lines_to_next_cell": 0 }, @@ -410,7 +410,7 @@ }, { "cell_type": "markdown", - "id": "5b0f6f30", + "id": "c17e2bc8", "metadata": {}, "source": [ "The arguments to `cross_validate()` are as follows: an\n", @@ -426,7 +426,7 @@ }, { "cell_type": "markdown", - "id": "b527f67f", + "id": "5c7901f2", "metadata": {}, "source": [ "We can repeat this procedure for increasingly complex polynomial fits.\n", @@ -442,13 +442,13 @@ { "cell_type": "code", "execution_count": 10, - "id": "f951ffc8", + "id": "e2b5ce95", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:39.071240Z", - "iopub.status.busy": "2023-08-07T00:18:39.071138Z", - "iopub.status.idle": "2023-08-07T00:18:39.674084Z", - "shell.execute_reply": "2023-08-07T00:18:39.673774Z" + "iopub.execute_input": "2023-08-21T02:29:03.186226Z", + "iopub.status.busy": "2023-08-21T02:29:03.186108Z", + "iopub.status.idle": "2023-08-21T02:29:03.782413Z", + "shell.execute_reply": "2023-08-21T02:29:03.782122Z" }, "lines_to_next_cell": 0 }, @@ -480,7 +480,7 @@ }, { "cell_type": "markdown", - "id": "792f1304", + "id": "03706248", "metadata": {}, "source": [ "As in Figure 5.4, we see a sharp drop in the estimated test MSE between the linear and\n", @@ -499,13 +499,13 @@ { "cell_type": "code", "execution_count": 11, - "id": "e3610b5a", + "id": "1dda1bd7", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:39.675725Z", - "iopub.status.busy": "2023-08-07T00:18:39.675614Z", - "iopub.status.idle": "2023-08-07T00:18:39.678046Z", - "shell.execute_reply": "2023-08-07T00:18:39.677762Z" + "iopub.execute_input": "2023-08-21T02:29:03.783997Z", + "iopub.status.busy": "2023-08-21T02:29:03.783886Z", + "iopub.status.idle": "2023-08-21T02:29:03.786132Z", + "shell.execute_reply": "2023-08-21T02:29:03.785881Z" } }, "outputs": [ @@ -530,7 +530,7 @@ }, { "cell_type": "markdown", - "id": "983625b2", + "id": "f5092f1b", "metadata": {}, "source": [ "In the CV example above, we used $K=n$, but of course we can also use $K" ] @@ -907,7 +907,7 @@ }, { "cell_type": "markdown", - "id": "baeedcf4", + "id": "62207ca5", "metadata": {}, "source": [ "The variable `lstat` measures the percentage of individuals with\n", @@ -919,7 +919,7 @@ }, { "cell_type": "markdown", - "id": "bf4867c8", + "id": "361d7f84", "metadata": {}, "source": [ "Now we use the cross-validation function to see whether pruning\n", @@ -929,13 +929,13 @@ { "cell_type": "code", "execution_count": 21, - "id": "9e563bf2", + "id": "33fb7786", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:16.498280Z", - "iopub.status.busy": "2023-08-07T00:19:16.498155Z", - "iopub.status.idle": "2023-08-07T00:19:16.543916Z", - "shell.execute_reply": "2023-08-07T00:19:16.543596Z" + "iopub.execute_input": "2023-08-21T02:29:46.706833Z", + "iopub.status.busy": "2023-08-21T02:29:46.706699Z", + "iopub.status.idle": "2023-08-21T02:29:46.756824Z", + "shell.execute_reply": "2023-08-21T02:29:46.756520Z" } }, "outputs": [], @@ -954,7 +954,7 @@ }, { "cell_type": "markdown", - "id": "de0ed389", + "id": "e7218495", "metadata": {}, "source": [ "In keeping with the cross-validation results, we use the pruned tree\n", @@ -964,13 +964,13 @@ { "cell_type": "code", "execution_count": 22, - "id": "3a635c52", + "id": "a386755b", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:16.545489Z", - "iopub.status.busy": "2023-08-07T00:19:16.545404Z", - "iopub.status.idle": "2023-08-07T00:19:16.548169Z", - "shell.execute_reply": "2023-08-07T00:19:16.547932Z" + "iopub.execute_input": "2023-08-21T02:29:46.758663Z", + "iopub.status.busy": "2023-08-21T02:29:46.758546Z", + "iopub.status.idle": "2023-08-21T02:29:46.761814Z", + "shell.execute_reply": "2023-08-21T02:29:46.761470Z" }, "lines_to_next_cell": 2 }, @@ -978,7 +978,7 @@ { "data": { "text/plain": [ - "28.069857549754044" + "28.06985754975404" ] }, "execution_count": 22, @@ -993,7 +993,7 @@ }, { "cell_type": "markdown", - "id": "41a34a36", + "id": "7fe01e33", "metadata": {}, "source": [ "In other words, the test set MSE associated with the regression tree\n", @@ -1010,20 +1010,20 @@ { "cell_type": "code", "execution_count": 23, - "id": "5542ece6", + "id": "3d646928", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:16.549690Z", - "iopub.status.busy": "2023-08-07T00:19:16.549586Z", - "iopub.status.idle": "2023-08-07T00:19:16.832898Z", - "shell.execute_reply": "2023-08-07T00:19:16.832568Z" + "iopub.execute_input": "2023-08-21T02:29:46.763419Z", + "iopub.status.busy": "2023-08-21T02:29:46.763331Z", + "iopub.status.idle": "2023-08-21T02:29:47.049615Z", + "shell.execute_reply": "2023-08-21T02:29:47.049265Z" }, "lines_to_next_cell": 0 }, "outputs": [ { "data": { - "image/png": "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T82aNUtQBgAAHAnFFgDgVP79e7Vxu63//vhpvL29dfz4cf3888+aPHmyjh49qipVqqhjx47KmjVrgnds/fz8rC/8dObMGWXOnPmpj7du3TpVrFhRadKksV4W9yJRt2/fVoMGDVSyZEnrdUFBQVqyZMlzPwcAABwRxRYAgBdgMpnk7e0tb29vxcTEaP369fr777+VNWvWBO/Y+vn5aePGjTKbzYqOjra+4vGGDRt05coV66nHc+fOVceOHeMd27dvX+3du1cpUqTQqFGjlDJlSknS4cOH5eHhobx58ybiZwsAgH0wWSwWi9EhAADO58CBAypevLj279/P+9g6AL6fAAAj8arIAAAAAAC7RrEFAAAAANg1ii0AAAAAwK5RbAEA+JfAwEAFBQUZHSNBIiMjVaVKFVWqVEnlypXTr7/+Gu/6oUOHytPT84njoqOjra+wbDab5e7ursOHD0uSfvvtN1WtWlW+vr768MMPJT16/99MmTJZb79q1aqk/+QAAEggXhUZAOA0Hj58+MTb/ST148S9RuN/vZXQy2abN2+eypcvr2HDhmnHjh0aMWKEli5dKkm6cOGCTp48+dTjUqVKpbCwMEnS+fPnVbVqVb333nuKjo5W7969tWTJknjv9ys9es/fzZs3v3BGAACSGju2AACbEBERofLly8vHx0dms1mRkZH6+++/5efnpypVqqhz587y9/eXJLVt21Y7duyQJIWFhal9+/aSpO+++06+vr4qUaKEBg8ebL3vnDlzqkuXLqpSpYpu3rypxo0by9fXVz4+Pjpx4oQkafny5SpatKhq166t/fv3PzNnTEyMOnToIF9fX3l7e2vXrl3WTJ06dVKtWrUUHBwsT09PDRo0SH5+fjp//ryaNm2qSpUqqXz58tb7//cxL6NgwYK6deuWJOn69et67bXXrNcFBgbG+zo8S1BQkFq0aCFJ2r17t9KlS6fWrVvLbDbHew/e3377TRUqVFDLli115cqVl8oLAEBSYMcWAGATQkJCVLlyZQUGBkp6tNPZs2dPtWvXTi1atNCMGTOsJfRZ2rdvr08//VQWi0XlypVThw4dlDNnTl28eFF9+vRRrly51L9/f9WvX19NmzbVkSNH1LdvXy1btkz9+/fXnj17lC5dOvn6+j7zMaZPn668efPqxx9/1JUrV1S7dm1ruc2ePbsmT54sSercubOq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V65cypIli1KnTq1y5cpp7969kh6V2H/z8PBQpkyZXiojACBpMUNfboYWLFhQt27dkiRdv35dr732mvW6581Q6f/m7+3bt1W4cGFJUt68eXX//n1ZLBZFRkZa769w4cK6cePGUx8HcAa8jy2cSkhIiCpXrqzAwEBJj1Zpe/bsqXbt2qlFixaaMWOGdYA+S/v27fXpp5/KYrGoXLly6tChg3LmzKmLFy+qT58+ypUrl/r376/69euradOmOnLkiPr27atly5apf//+2rNnj9KlSydfX99nPsb06dOVN29e/fjjj7py5Ypq165tHczZs2fX5MmTJT16D93q1avriy++0HfffacCBQpo4cKFCg8PV5s2bbR79+4njnnci7xR/fLly/XFF1/o5s2bWr9+vSSpW7duGjZsmO7fv686deqoaNGi8vHxsR5z7dq1eEU1U6ZMunbt2nO/vgAA28QMjS+hM9TLy0tDhgxRkSJFdOPGDW3btk3Sf89QSbp3754CAgJ05MgRjRo1SpKUJ08e3b17VwUKFNCNGze0cuVKSZKfn58CAgI0ffp0RUVFac+ePc/9XgCOhmILp9K4cWONHDlSLVq0UM6cORUYGKjw8HB169ZN0qPfZZk/f74kxXtD9sdPUVq6dKmmTZsmk8mks2fP6vz588qZM6eyZ8+uXLlySZIOHz6srVu36ocffrDe15UrV/Taa68pQ4YMkqQyZco8M+fhw4e1c+dObdiwQZKsK7CS5O3tbf3Y1dVV5cqVkyQdP35cDRo0kCTlz58/XoF8/JjHvcgb1derV0/16tXTwoULNXDgQC1atEhZsmSRJLm7u6tBgwbat29fvKGcJUsWRUZGWv9848YN6zEAAPvCDI0voTN0zJgxql+/vnr37q3du3erS5cuWr9+/X/OUElKnTq1tm3bpqtXr6pkyZJq3LixFi5cqOzZs2vFihWKiIhQvXr19Ouvv6pfv3763//+p4YNG2rhwoUaMGDAUws54KgotnAqLi4uGjlypCSpXbt2Cg4OVr58+fTLL78ob9681tVZScqcObPOnTsnSdbTZyVpyJAhOn78uNzc3FS+fHnrwHZ1dbXepnDhwipbtqzq1asn6dELPbi6uurvv//WrVu3lC5dOu3Zs0dFihR5as7ChQvL09NTPXv2tB4f5/HHMZlM1h8eChQooO3bt8vf31/h4eHx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LbQeii4ZMaZknRFjyflZOiPGlEpm9HhyvhZn9JjSP4weS87P4oweU3vgyaOIiIiIiIjI0LgV2eAURdF6CERUAs5PIuPgfCXSL85PKgt2bImIiIiIiMjQWNjqVGpqKmJiYhz2fnPmzEGfPn0QGhqKJ598Uj0L3ZQpUxAUFISgoCAsWLDA6nMXLlyIPn36IDw8XF1Ry8nJwciRIxEeHo7evXvjt99+AwDExcWhS5cu8PDwwOnTpx3y2YjswdFz9IcffkCHDh3g4eFh9f6IiAir194TQmDGjBkIDg5Gr169sGLFCvX2Z599FuHh4YiJiVHn44kTJxAREaFez++vv/6y34cishNHz8833ngDERERCA0Nxfjx45GbmwsASEpKQlhYGEJCQvDuu+9afe7s2bMREhICSZJw4MABAMCaNWvQp08fREZGYuDAgbhy5QoA5lByDo6en2avvfYa/P39i90+fvx4q+M5deqUxfVtq1evjrS0NADA22+/jdDQUISHhyM5ORkAkJmZieHDh0OSJAwbNgzXrl2z7weiYljYEoDCs7vt2rUL27dvx/nz57FlyxYAwMyZMxEfH48dO3ZgzZo1OH78uMXzLl68iIULFyIuLg7r1q3DzJkzUVBQgE2bNqFWrVrYtm0bfvzxR7z44osAgC5dumDnzp0ICgpy+GckMjJJkvDHH39YPXHGqlWrUL9+favPO3jwIA4ePIidO3dCURS89tprAIDffvsNly9fxrZt2/D8889j1qxZAIBPPvkEjz76KBRFwaRJk/DBBx/Y7TMROYvnnnsOW7duxfbt2wEAmzZtAgBMnz4dX3zxBeLi4qzm0H379mH37t3YsWMHli5diqeeegoAcPfddyMuLg6xsbEYOHAg/vOf/wBgDiWqqDNnzuDPP/8sdntiYiKuX79u9TmtWrWCoihQFAXz589H37594eXlhaNHj2L9+vWIi4vD559/rp4pedGiRQgMDISiKBg6dCjee+89u34mKo6FrQPNnDkTP/74I4DCy9507doVubm5ePnllxEVFYUePXrg008/Lfa8CRMmIC4uDgDUL5sAcODAAcTExCAqKgojRoxAZmZmhcdW9Dqz7u7ucHNzs7jd1dUV1apVU283S01NRceOHVG9enXUq1cP1apVQ2pqKvz8/JCdnQ0hBNLS0tC4cWMAQL169VC7du0Kj5PInvQ8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ERERERGRobGwJSIiIiIiIkNjYUtERERERESGZtPL/aSkpNjy5aiCyhoHxss5mOPIeDoHxtP5nDx5EgBj6iysxZGxNZ7bY8YYOgfmUOdU1nja5KzIp06dQocOHZCZmVnZlyIb8fT0REpKClq1alXsPsbL+bi6uqKgoEDrYZCNMJ7Ox83NTb1WMhmfOccCYD41ME9PT2zevBkxMTGMoRNhDnVOpdU2ZjYpbIHCYuny5cu2eCmygYYNG5YaeMbLuZw7dw4A1At6k7Exns4nOzsb7u7uWg+DbKRojmU+NS5zHBlD58Ic6pzuVNsANixsiYiIiIiIiLTAk0cRERERERGRobGwJSIiIiIiIkNjYUtERERERESGxsKWiIiIiIiIDI2FLRERERERERkaC1siIiIiIiIyNBa2REREREREZGgsbImIiIiIiMjQWNgSERERERGRobGwJSIiIiIiIkNjYUtERERERESGxsKWiIiIiIiIDI2FLRERERERERkaC1siIiIiIiIyNBa2REREREREZGgsbImIiIiIiMjQWNgSERERERGRobGwJSIiIiIiIkNjYUtERERERESGxsKWiIiIiIiIDI2FLRERERERERkaC1siIiIiIiIyNBa2REREREREZGgsbImIiIiIiMjQWNgSERERERGRobGwJSIiIiIiIkNjYUtERERERESGxsKWiIiIiIiIDI2FLRERERERERkaC1siIiIiIiIyNBa2REREREREZGgsbImIiIiIiMjQWNgSERERERGRobGwJSIiIiIiIkNjYUtERERERESGxsKWiIiIiIiIDI2FLRERERERERkaC1siIiIiIiIyNBa2REREREREZGgsbImIiIiIiMjQWNgSERERERGRobGwJSIiIiIiIkNjYUtERERERESGxsKWiIiIiIiIDI2FLRERERERERkaC1siIiIiIiIyNBa2REREREREZGgsbImIiIiIiMjQWNgSERERERGRobGwJSIiIiIiIkNjYUtERERERESGxsKWiIiIiIiIDI2FLRERERERERkaC1siIiIiIiIyNBa2REREREREZGgsbImIiIiIiMjQWNgSERERERGRobGwJSIiIiIiIkNjYUtERERERESGxsKWiIiIiIiIDI2FLRERERERERkaC1siIiIiIiIyNBa2REREREREZGgsbImIiIiIiMjQWNgSERERERGRobGwJSIiIiIiIkNjYUtERERERESGxsKWiIiIiIiIDI2FLRERERERERkaC1siIiIiIiIyNBa2REREREREZGgsbImIiIiIiMjQWNgSERERERGRobGwJSIiIiIiIkNjYUtERERERESGxsKWiIiIiIiIDI2FLRERERERERkaC1siIiIiIiIyNBa2REREREREZGgsbImIiIiIiMjQWNgSERERERGRobGwJSIiIiIiIkNjYUtERERERESGxsKWiIiIiIiIDI2FLRERERERERkaC1siIiIiIiIyNBa2REREREREZGgsbImIiIiIiMjQWNgSERERERGRobGwJSIiIiIiIkNjYUtERERERESGxsKWiIiIiIiIDI2FLRERERERERkaC1siIiIiIiIyNBa2REREREREZGgsbImIiIiIiMjQWNgSERERERGRobGwJSIiIiIiIkNjYUtERERERESGxsKWiIiIiIiIDI2FLRERERERERkaC1siIiIiIiIyNBa2REREREREZGgsbImIiIiIiMjQ/g/QNdsvQNw/pQAAAABJRU5ErkJggg==", + "image/png": "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T82aNUtQBgAAHAnFFgDgVP79e7Vxu63//vhpvL29dfz4cf3888+aPHmyjh49qipVqqhjx47KmjVrgnds/fz8rC/8dObMGWXOnPmpj7du3TpVrFhRadKksV4W9yJRt2/fVoMGDVSyZEnrdUFBQVqyZMlzPwcAABwRxRYAgBdgMpnk7e0tb29vxcTEaP369fr777+VNWvWBO/Y+vn5aePGjTKbzYqOjra+4vGGDRt05coV66nHc+fOVceOHeMd27dvX+3du1cpUqTQqFGjlDJlSknS4cOH5eHhobx58ybiZwsAgH0wWSwWi9EhAADO58CBAypevLj279/P+9g6AL6fAAAj8arIAAAAAAC7RrEFAAAAANg1ii0AAAAAwK5RbAEA+JfAwEAFBQUZHSNBIiMjVaVKFVWqVEnlypXTr7/+Gu/6oUOHytPT84njoqOjra+wbDab5e7ursOHD0uSfvvtN1WtWlW+vr768MMPJT16/99MmTJZb79q1aqk/+QAAEggXhUZAOA0Hj58+MTb/ST148S9RuN/vZXQy2abN2+eypcvr2HDhmnHjh0aMWKEli5dKkm6cOGCTp48+dTjUqVKpbCwMEnS+fPnVbVqVb333nuKjo5W7969tWTJknjv9ys9es/fzZs3v3BGAACSGju2AACbEBERofLly8vHx0dms1mRkZH6+++/5efnpypVqqhz587y9/eXJLVt21Y7duyQJIWFhal9+/aSpO+++06+vr4qUaKEBg8ebL3vnDlzqkuXLqpSpYpu3rypxo0by9fXVz4+Pjpx4oQkafny5SpatKhq166t/fv3PzNnTEyMOnToIF9fX3l7e2vXrl3WTJ06dVKtWrUUHBwsT09PDRo0SH5+fjp//ryaNm2qSpUqqXz58tb7//cxL6NgwYK6deuWJOn69et67bXXrNcFBgbG+zo8S1BQkFq0aCFJ2r17t9KlS6fWrVvLbDbHew/e3377TRUqVFDLli115cqVl8oLAEBSYMcWAGATQkJCVLlyZQUGBkp6tNPZs2dPtWvXTi1atNCMGTOsJfRZ2rdvr08//VQWi0XlypVThw4dlDNnTl28eFF9+vRRrly51L9/f9WvX19NmzbVkSNH1LdvXy1btkz9+/fXnj17lC5dOvn6+j7zMaZPn668efPqxx9/1JUrV1S7dm1ruc2ePbsmT54sSercubOq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V65cypIli1KnTq1y5cpp7969kh6V2H/z8PBQpkyZXiojACBpMUNfboYWLFhQt27dkiRdv35dr732mvW6581Q6f/m7+3bt1W4cGFJUt68eXX//n1ZLBZFRkZa769w4cK6cePGUx8HcAa8jy2cSkhIiCpXrqzAwEBJj1Zpe/bsqXbt2qlFixaaMWOGdYA+S/v27fXpp5/KYrGoXLly6tChg3LmzKmLFy+qT58+ypUrl/r376/69euradOmOnLkiPr27atly5apf//+2rNnj9KlSydfX99nPsb06dOVN29e/fjjj7py5Ypq165tHczZs2fX5MmTJT16D93q1avriy++0HfffacCBQpo4cKFCg8PV5s2bbR79+4njnnci7xR/fLly/XFF1/o5s2bWr9+vSSpW7duGjZsmO7fv686deqoaNGi8vHxsR5z7dq1eEU1U6ZMunbt2nO/vgAA28QMjS+hM9TLy0tDhgxRkSJFdOPGDW3btk3Sf89QSbp3754CAgJ05MgRjRo1SpKUJ08e3b17VwUKFNCNGze0cuVKSZKfn58CAgI0ffp0RUVFac+ePc/9XgCOhmILp9K4cWONHDlSLVq0UM6cORUYGKjw8HB169ZN0qPfZZk/f74kxXtD9sdPUVq6dKmmTZsmk8mks2fP6vz588qZM6eyZ8+uXLlySZIOHz6srVu36ocffrDe15UrV/Taa68pQ4YMkqQyZco8M+fhw4e1c+dObdiwQZKsK7CS5O3tbf3Y1dVV5cqVkyQdP35cDRo0kCTlz58/XoF8/JjHvcgb1derV0/16tXTwoULNXDgQC1atEhZsmSRJLm7u6tBgwbat29fvKGcJUsWRUZGWv9848YN6zEAAPvCDI0voTN0zJgxql+/vnr37q3du3erS5cuWr9+/X/OUElKnTq1tm3bpqtXr6pkyZJq3LixFi5cqOzZs2vFihWKiIhQvXr19Ouvv6pfv3763//+p4YNG2rhwoUaMGDAUws54KgotnAqLi4uGjlypCSpXbt2Cg4OVr58+fTLL78ob9681tVZScqcObPOnTsnSdbTZyVpyJAhOn78uNzc3FS+fHnrwHZ1dbXepnDhwipbtqzq1asn6dELPbi6uurvv//WrVu3lC5dOu3Zs0dFihR5as7ChQvL09NTPXv2tB4f5/HHMZlM1h8eChQooO3bt8vf31/h4eHxCuTjxzwuoavNUVFRcnd3l/Ro19XDw0PSox8WMmbMKIvFotDQUDVr1izecZ6enoqIiFBkZKQ8PDy0c+dOffnll0/NAgCwbczQ+F7krKds2bJZ/x9XtP9rhkZHRytFihRycXFRmjRp5O7ubp3FcfeXKVMm3blz57mPAzgLii2cypo1azR+/Hi5urrKzc1N3t7eKlGihJo3b66ZM2fGG5Lt27dX8+bNNX/+fOXOndt6ef369VW+fHkVKFBAadOmferjDBo0SJ988onGjx8vSQoICFC/fv305ZdfqmLFisqRI4cyZ878zJwdOnRQ165drSu3xYoV09ixY5/7uXXo0EFt27ZVxYoV9eDBA+tjP09CV5t//PFHLV26VCaTSW5ubpoyZYokqUePHgoPD5fFYlGFChVUu3Zt6+WDBg1StmzZ9PXXX6t69eqSpN69eyt9+vSSHv1Q9Msvv+j+/fv65ZdftHr1akVGRqpRo0Y6evSojhw5ooCAgHgvsgEAMA4zNL6EztBu3bqpVatWmjlzpu7du6fRo0dL+u8ZevPmTbVr106urq66f/++hg0bJjc3N7Vs2VLNmjVTpUqVdPfuXX3xxReSpMGDB6tjx45KkSKFYmJirLMacBYmS0JeBg6wQwcOHFDx4sW1f/9+eXl5JeiYiIgItW/fXps3b07idHgZL/M9BQC8OGao42GGwtGxYwsYrHXr1tbTtaRHp28tW7bMwEQAANgHZiiAOBRb4DG5cuVK9pXmOXPmJOvjAQCQFJihAIzE+9gCdsDT0zNZHmfKlCkqVaqUKlasqGbNmun+/fuSpH379qlMmTKqVKmSqlWrpps3b8Y7rmLFitb3KAQAwFYl1zwdPny4zGazzGazcuXKpc8++0yS9Oeff8rf318VKlRQ7969kyUL4CwotgCs/Pz8tHv3bm3btk05cuRQUFCQJGnUqFEaPXq0tm7dqvLly8dbIV++fLkyZsxoUGIAAGzP0KFDFRYWprCwMOXLl09NmjSRJPXr108DBw7U9u3bdfHiRYWGhhqcFHAcFFvgFURERKh8+fLy8fGR2WxWZGSktm3bJh8fH+srHN67d0+SZDab1bNnTwUEBMhsNmv+/PkKCAhQ0aJFrW9obzab1aVLF1WuXFl+fn66fPlyvMeLiYlRhw4d5OvrK29vb+sbzo8YMUKlSpWSr6/vf77y4/N4enrKxeXRPwtubm7WtzgoXLiw9W0DIiMj9dprr0mSHjx4oMmTJ6tLly4v/ZgAADjaPI1z8eJFnT9/XqVKlZL06AWcfH19JUl169al2AKJiGILvIKQkBBVrlxZoaGhCgsLU8aMGVW8eHGFhoZq+/btKliwoBYtWmS9faVKlRQcHCxPT0/t3btXwcHB6t27t2bMmGG9TenSpbVp0ya1aNFCX331VbzHmz59uvLmzauQkBAtX75cvXr1kiTNmzdPoaGhCgkJUY8ePZ7IWb9+fespUXH/Pe/U4WPHjmn9+vVq1KiRJKlevXrq1q2bihQpop07d6p+/fqSpB9++EEtW7aUm5vbS38NAQBw1Hk6b948NW/e3Prn2NhY68eZMmXStWvXXvhrBeDpePEo4BU0btxYI0eOVIsWLZQzZ04FBgbqyJEjGjx4sO7fv6+///7b+r6tklS8eHFJUvbs2ZU3b17rx1u3brXeply5ctb/L1++PN7jHT58WDt37tSGDRskybqLOmHCBHXp0kUPHjzQJ598Im9v73jHvcgrREZERKhNmzZatGiR0qRJI0nq1KmTli1bphIlSmjUqFEaO3asOnXqpBUrVmjjxo3atm1bgu8fAIB/c8R5KklBQUFauXKl9c9xZ0XFPWaWLFle6P4APBvFFngFLi4uGjlypCSpXbt2Cg4O1rRp0/T555+rbNmy6tu3rx5/q2iTyfTUjx+/ze7du+Xp6andu3crf/788R6vcOHC8vT0VM+ePSVJ0dHRkqSyZcvKz89P586dU7169bR///54x9WvX1/Xr1+Pd5mnp6emTZsW77JLly6pUaNGmj59uvLkyRPvumzZsln/f+rUKR07dky3bt1S9erVdf36df3111+aMmWKOnbsmICvHAAA/8fR5qkkHTx4UBkyZFCuXLmslxUrVkxbt25VpUqVtGrVKn344YcJ+voA+G8UW+AVrFmzRuPHj5erq6vc3Nzk7e2tO3fu6KOPPlKBAgWUPn36eCvMCXHgwAHNnj1bDx8+1IIFC+Jd16FDB3Xt2lU+Pj6SHg3IsWPHql69eoqKilJUVNRTf981oSvM/fv3199//63u3btLkpo3b66PP/5Yo0aNUpMmTeTu7i4XFxcFBQXprbfe0p49eyRJYWFhCgoKotQCAF6Ko81TSZo7d65atmwZ77JRo0apXbt2io6OVokSJayPD+DVmSyPL20BDuTAgQMqXry49u/fLy8vL6PjJIjZbFZQUJCyZ89udBSbZI/fUwCwR/b+7y3z9En2/j0F/gsvHgUAAAAAsGucigzYkLCwMKMjAABg95ingPNhxxYAAAAAYNcotkAyiIiIkL+/f7I93pIlS1SwYEG5u7vHu3zVqlUqXbq0KlSooIULFz712JCQEPn7+8vHx0cDBgyQJJ04cUJeXl5KmzatduzY8cQxQ4cOlaenZ+J/IgAAp5fcM/SLL75QxYoVVb58ebVu3VoxMTGSHv3ebtmyZWU2m9W5c+dnHh8eHq6UKVNa52VYWJjefPNN6/vexr3w4rNmNYCXw6nIgAMym8369ddfVaRIEetlsbGx6tOnj/bt2yd3d3eVL19eNWrUULp06ay3uXbtmr755hutXbtWbm5u1suzZ8+uLVu2WN8W4XEXLlzQyZMnk/YTAgAgmfTp00eDBg2SJLVu3VobN25UjRo1JEmLFy/+zxekCgwMlNlsjndZjRo1nnhLoKfNagAvjx1b4CX17t1bS5culSQ9ePBA77//vmJiYjRw4ED5+vrKy8tLkydPfuK4tm3bxlvFbd++vSTp999/l7+/v3x9fdWoUSPdvXv3pbNlzZr1iRXgq1evKlu2bEqXLp1SpkypPHnyaO/evfFus3btWmXLlk1169aVv7+/du/eLUny8PBQpkyZnvpYgYGBGjx48EtnBQA4H1ueoalSpZL0aEH4wYMH1jOSTCaTmjZtKh8fH23evPmpx27btk25cuXS22+/He/yjRs3ytvbW507d7Zme9qsBvDyKLbAS2rbtq1mz54tSQoODpavr69SpkypQYMGKSQkRLt27dK4ceOspzD9l86dO2vGjBkKCQmR2WzW1KlT410fHR1tPY3p8f8SWiqzZs2qK1eu6MKFC7p586Z27dr1xJvMX7hwQceOHdPy5cs1ffp0tWvX7rn3eejQIUmP3ugeAICEsvUZOmzYMOXLl083btxQjhw5JD3ard2xY4eCgoLUtWtX3bx5M94xFotFI0eOVL9+/eJdXrx4cZ04cUI7duxQ1qxZNXr06AR9TgBeDKciAy+pSJEiunLlii5fvqzZs2dbfx918uTJWrFihVxdXXX58mVdvnw53nEmk8n68eNvI33kyBG1bt1aknT//v0nTmNKlSrVK73Ko4uLi6ZMmaKWLVsqXbp0Klq0qN566614t8mcObN8fHzk7u6unDlzKn369Lp+/boyZ8781PscOnSoJkyY8NKZAADOydZn6Oeff67AwEB16dJFs2bNUufOnZU1a1ZJ0ttvvy0vLy+dOHFCJUuWtB6zcOFC+fv7K2PGjPHu6/Ff+WnZsuVTf60HwKuj2AKvoEWLFpo4caIiIiJUrFgxRUZGaubMmTp06JBiYmKUP3/+eINXelQez507J0nxTgUuUqSIFixYoDfffFPSo9Xlx0VHR6tKlSpPZPD29taIESMSlDduhfr27dtq0KBBvIEsST4+Plq6dKksFotu3rypyMjIZ56CLEmnT5+2ngb2119/qUuXLpo4cWKCsgAAnJutztCoqCi5u7vLZDIpQ4YM8vDwkMVi0e3bt5U+fXrduXNHv/32m3LlyhXvuIMHD2rfvn3avHmzDh8+rOPHj2v+/PnKkiWLMmTIIOnRCzTmz5//5b5gAJ6LYgu8gubNmytHjhwaPny4JCljxowqVKiQvL29VahQIWXJkuWJY9q3b6/mzZtr/vz5yp07t/XyiRMnqm3bttbTrvr27auqVatar3+R1eawsDCNGDFCFy9elL+/vzp27KhGjRqpb9++2rt3r1KkSKFRo0YpZcqUkh79cDFv3jzly5dP1apVU6VKlXT//n2NHTtWJpNJkZGRatSokY4ePaojR44oICBAI0aM0OHDh62P6enpSakFACSYrc7Qzp0768yZM3r48KHy5cun4cOH68GDB/Lx8VHq1KkVHR2twYMHK1u2bJL+b4Y+fopx27Zt1b59e+XJk0eTJk3SzJkzlTp1amXOnFkzZsyQ9OxZDeDlmCz/XgoDHMSBAwdUvHhx7d+/X15eXkbHQSLgewoAyYN/bx0P31M4Ol48CgAAAABg1yi2AAAAAAC7RrEFAAAAANg1XjwKDu/YsWNGR0Ai4XsJAMmLf3cdB99LODqKLRxW1qxZ5eHhoZYtWxodBYnIw8PD+l6CAICkwQx1TMxQODJeFRkO7dy5c7p69arRMRLswYMHatiwoXLlyqVvv/02yR6nR48e+uOPP7R48WKlSGFf61tZs2bVO++8Y3QMAHB4zNCnY4YCtoliC9iQOXPmqE2bNtq3b5+KFy+eZI+zb98+lSxZUnPmzFGrVq2S7HEAAEguzFDAuVFsARvx4MEDFSxYUIUKFdLKlSuT/PFq166t48eP6+jRo3a34gwAwOOYoQB4VWTARsybN0+nTp1SYGBgsjxeYGCgTp48qfnz5yfL4wEAkFSYoQDYsQVswIMHD1SgQAG99957Wr58ebI9bt26dXXkyBEdO3aMFWcAgF1ihgKQ2LEFbMLcuXN1+vTpZFtpjhMYGKhTp04pKCgoWR8XAIDEwgwFILFjCxguJiZG+fPnV7FixbR06dJkf/z69evrt99+0/Hjx5UyZcpkf3wAAF4WMxRAHHZsAYPNmTNHZ8+e1bBhwwx5/GHDhunMmTOaO3euIY8PAMDLYoYCiMOOLWCgmJgY5cuXT8WLF9eSJUsMy9GgQQP9+uuvCg8PZ8UZAGAXmKEAHseOLWCg2bNnKyIiwrCV5jjDhg3T2bNnNWfOHENzAACQUMxQAI9jxxYwSHR0tPLly6dSpUpp0aJFRsdRo0aNtG/fPoWHhytVqlRGxwEA4JmYoQD+jR1bwCCzZs3SuXPnDF9pjjNs2DD98ccfmj17ttFRAAB4LmYogH9jxxYwQHR0tN59912VLVtWCxcuNDqOVZMmTbR7926dPHmSFWcAgE1ihgJ4GnZsAQPMmDFDf/75p4YOHWp0lHiGDh2qP//8U7NmzTI6CgAATzVz5kxmKIAnsGMLJLP79+/r3XffVfny5bVgwQKj4zyhadOm2rVrFyvOAACbwwwF8Czs2ALJbMaMGTp//rzNrTTHiVtxnjFjhtFRAACIhxkK4FnYsQWS0f379+Xp6amKFStq3rx5Rsd5pubNm2v79u06deqU3NzcjI4DAAAzFMBzsWMLJKNp06bp4sWLNrvSHGfo0KG6ePGipk+fbnQUAAAkMUMBPB87tkAyiYqKUt68eeXr66u5c+caHec/tWzZUmFhYTp16pTc3d2NjgMAcGLMUAD/hR1bIJn8+OOPunTpkoYMGWJ0lAQZMmSI/vrrL1acAQCGmzZtGjMUwHOxYwskg6ioKOXJk0f+/v6aM2eO0XESrFWrVgoJCdHp06dZcQYAGCJut9bPz48ZCuCZ2LEFksHUqVN1+fJlu1lpjjNkyBBdunRJP/74o9FRAABOaurUqfr777+ZoQCeix1bIIndu3dPefLkUUBAgF2+aXubNm20adMmnT59WqlTpzY6DgDAiTBDASQUO7ZAEpsyZYquXLlidyvNcYYMGaLLly9r6tSpRkcBADgZZiiAhGLHFkhCd+/eVZ48eVS9enW7frP2Dz/8UBs2bNCZM2dYcQYAJAtmKIAXwY4tkIR++OEHXb16VYMGDTI6yisZPHiwrly5oilTphgdBQDgJKZMmaKrV69q8ODBRkd5JcxQIHmwYwskkbt37yp37tyqWbOmQ7zcf7t27bRu3TqdOXNGHh4eRscBADiwuN3aGjVqMEMBJAg7tkASmTx5sq5fv273K81xBg8erGvXrumHH34wOgoAwMFNnjxZ165dY4YCSDB2bIEk8M8//yh37tyqU6eOQ73Mf/v27bV69WqdOXNGadKkMToOAMABMUMBvAx2bIEkMGnSJEVGRtr979b+2+DBg3X9+nVNnjzZ6CgAAAfFDAXwMtixBRLZnTt3lDt3btWvX98hXyji448/1ooVK3T27FlWnAEAiYoZCuBlsWMLJLKJEyfq5s2bGjhwoNFRksSgQYMUGRmpSZMmGR0FAOBgJk2axAwF8FLYsQUS0Z07d5QrVy41bNjQoV8gomPHjlq2bJnOnj2rtGnTGh0HAOAA4nZrGzRowAwF8MLYsQUS0YQJE3Tr1i2HXWmOM2jQIN28eVMTJ040OgoAwEFMmDDBoXdr4zBDgaTBji2QSG7fvq1cuXKpSZMmTnGKUadOnbR48WKdPXtW6dKlMzoOAMCOMUMBvCp2bIFEMn78eN25c8fhV5rjDBw4ULdv39aECROMjgIAsHPMUACvih1bIBHcunVLuXLlUvPmzZ1qSHXp0kULFy5UREQEK84AgJdy69Yt5c6dW82aNWOGAnhp7NgCiWD8+PH6559/1L9/f6OjJKsBAwbozp07Gj9+vNFRAAB2Km63dsCAAUZHSVbMUCBxsWMLvKKbN28qd+7catGihVMOp65du2r+/PmKiIhQ+vTpjY4DALAjzFBmKJBY2LEFXtH333+vu3fvOt1Kc5wBAwbo7t27+v77742OAgCwM8xQZiiQWNixBV7BjRs3lDt3brVu3Vrfffed0XEM0717d82dO1cRERHKkCGD0XEAAHaAGfoIMxRIHOzYAq/gu+++U1RUlNP9bu2/9e/fX1FRUU79gwkA4MUwQx9hhgKJgx1b4CXduHFDuXLl0ocffqhx48YZHcdwPXr00OzZs3X27FllzJjR6DgAABvGDI2PGQq8OnZsgZf07bff6v79++rbt6/RUWxCv379WHEGACRI3Azt16+f0VFsAjMUeHUUW+AlREZGaty4cerUqZPefPNNo+PYhDfffFOffPKJxo0bpxs3bhgdBwBgox6foW+88YbRcWwCMxR4dRRb4CWMGzdOMTExrDT/S79+/RQdHc1pZQCAZ2KGPh0zFHg1FFvgBV2/fl3ffvutOnfurNdff93oODbljTfeUKdOnfTtt98qMjLS6DgAABvDDH02Zijwaii2wAsaO3asHj58yO/WPkPfvn0VExOjsWPHGh0FAGBjmKHPxwwFXh7FFngB165d03fffacuXbrotddeMzqOTXr99dfVpUsXfffdd7p+/brRcQAANuLatWv6/vvvmaHPwQwFXh7FFngBY8eOVWxsrHr37m10FJvWp08fPXz4kBVnAIBV3G5tnz59jI5i05ihwMuh2AIJdPXqVX3//ffq2rUrK83/4bXXXrOuOF+7ds3oOAAAgz0+Q7Nly2Z0HJvGDAVeDsUWSKBvvvlGFouFleYE6tOnjywWi7755hujowAADMYMfTHMUODFUWyBBLhy5YrGjx+vbt26KWvWrEbHsQvZsmVT165dNX78eF29etXoOAAAgzBDXxwzFHhxFFsgAb7++muZTCZ+t/YFxX29vv76a4OTAACMwgx9OcxQ4MVQbIH/cPnyZU2YMEHdu3dXlixZjI5jV7Jmzapu3bppwoQJunLlitFxAADJ7MqVK8zQl8QMBV4MxRb4D19//bVcXV3Vq1cvo6PYpc8++0wmk4kVZwBwQl999RUz9BUwQ4GEo9gCz3H58mVNnDiRleZXkCVLFnXv3l0TJkzQ5cuXjY4DAEgmzNBXxwwFEo5iCzzHmDFjlCJFClaaX9Fnn30mV1dXffXVV0ZHAQAkE2Zo4mCGAglDsQWe4dKlS5o0aZI+/fRTZc6c2eg4di1z5sz69NNPNXHiRP39999GxwEAJDFmaOJhhgIJQ7EFnmHMmDFKlSqVevbsaXQUh9CrVy+lTJmSFWcAcAJfffUVMzQRMUOB/0axBZ7ir7/+0uTJk9WjRw9lypTJ6DgOIVOmTOrRo4cmTZqkS5cuGR0HAJBELl26xAxNZMxQ4L9RbIGnGDNmjNzc3NSjRw+joziUnj17KlWqVBozZozRUQAASWT06NFKlSoVMzSRMUOB56PYAv/y119/6YcfflDPnj2VMWNGo+M4lIwZM6pHjx6aPHmy/vrrL6PjAAASGTM06TBDgeej2AL/MmrUKLm7u7PSnER69OghNzc3jR492ugoAIBExgxNWsxQ4NkotsBjLly4oClTpqhXr17KkCGD0XEcUsaMGdWrVy/98MMPunjxotFxAACJhBma9JihwLNRbIHHjBo1Sh4eHvr000+NjuLQPv30U6VOnZoVZwBwIKNHj2aGJgNmKPB0FFvg/7tw4YKmTp2qzz77TOnTpzc6jkPLkCGDPvvsM02ZMkUXLlwwOg4A4BUxQ5MPMxR4Ooot8P99+eWXSps2rbp162Z0FKfQvXt3eXh4aNSoUUZHAQC8oi+//FJp0qRhhiYTZijwJIotIOnPP//Ujz/+yEpzMkqfPr0+++wzTZ06VefPnzc6DgDgJTFDkx8zFHiSyWKxWIwOARitc+fOWrRokc6ePat06dIZHcdp3Lp1S7lz51bTpk01ceJEo+MAAF4CM9QYzFAgPnZs4fTOnTunadOmqXfv3gzkZJY+fXr17t1b06ZN059//ml0HADAC2KGGocZCsTHji2c3ieffKKlS5fq7NmzSps2rdFxnM7t27eVO3duNW7cWJMmTTI6DgDgBXTq1ElLlixhhhqEGQr8H3Zs4dT++OMPzZgxQ3369GEgGyRdunTq06ePpk2bpnPnzhkdBwCQQH/88YemT5/ODDUQMxT4P+zYwql17NhRy5YtY6XZYHfu3FHu3LnVoEED/fDDD0bHAQAkQNwMjYiIUJo0aYyO47SYocAj7NjCaUVERGjGjBnq27cvpdZgadOmVZ8+fTRjxgz98ccfRscBAPyHx2copdZYzFDgEXZs4bQ6dOigVatW6cyZMwxlG/DPP/8od+7cqlu3rqZOnWp0HADAczBDbQszFGDHFk7q7NmzmjVrFivNNiRNmjTq27evZs6cqYiICKPjAACegRlqe5ihADu2cFIfffSR1q5dqzNnzsjDw8PoOPj//vnnH+XJk0e1a9fWjz/+aHQcAMBTtG/fXmvWrGGG2hhmKJwdO7ZwOmfOnNHs2bPVr18/BrKNSZMmjfr166dZs2bpzJkzRscBAPwLM9R2MUPh7NixhdNp166d1q1bx0qzjbp7967y5MmjGjVqaPr06UbHAQA8pl27dlq/fr3OnDmj1KlTGx0H/8IMhTNjxxZO5dSpU5ozZ4769+9PqbVRHh4e6tevn2bPnq3Tp08bHQcA8P/FzdB+/fpRam0UMxTOjB1bOJW2bdtq48aNOn36NEPZht27d0958uRR1apVNXPmTKPjAADEDLUXzFA4K3Zs4TROnjypuXPnqn///gxkG5c6dWr1799fc+fO1alTp4yOAwBO79SpUwoKCmKG2gFmKJwVO7ZwGq1bt9aWLVt0+vRpubu7Gx0H/+HevXvKmzevqlSpolmzZhkdBwCcWps2bbR582ZmqJ1ghsIZsWMLp3DixAnNmzdPAwYMYCDbidSpU2vAgAGaO3euTp48aXQcAHBaJ06cUFBQEDPUjjBD4YzYsYVTaNWqlUJDQ3Xq1CmGsh2JiopS3rx55efnpzlz5hgdBwCcEjPUPjFD4WzYsYXDCw8P1/z581lptkPu7u4aMGCA5s2bp/DwcKPjAIDTYYbaL2YonA07tnB4LVq00LZt23Tq1Cm5ubkZHQcvKCoqSp6enjKbzQoKCjI6DgA4FWaofWOGwpmwYwuHduzYMS1YsEADBw5kINspd3d3DRw4UAsWLNDx48eNjgMATuP48ePMUDvHDIUzYccWDq1Zs2b6+eefdfLkSYayHbt//77effddVahQQfPmzTM6DgA4hebNm2vHjh3MUDvHDIWzYMcWDuvo0aP66aefNGjQIAaynXNzc7OuOB87dszoOADg8I4ePaqFCxcyQx0AMxTOgh1bOKymTZtq165dOnnypFKlSmV0HLyi6OhoeXp6qnz58lqwYIHRcQDAoTFDHQszFM6AHVs4pCNHjmjRokUaNGgQA9lBpEqVSoMGDdJPP/2kI0eOGB0HABwWM9TxMEPhDNixhUNq3Lix9uzZoxMnTjCUHUh0dLTy5cun0qVL66effjI6DgA4JGaoY2KGwtGxYwuHc/jwYS1evFiDBw9mIDuYuBXnxYsX6/fffzc6DgA4nN9//50Z6qCYoXB07NjC4TRs2FAHDhxQeHi4UqZMaXQcJLKYmBjly5dPJUuW1KJFi4yOAwAOpVGjRtq/fz8z1EExQ+HI2LGFQzl06JCWLl2qwYMHM5AdVMqUKTV48GAtXrxYhw8fNjoOADiMQ4cOacmSJcxQB8YMhSNjxxYOpUGDBjp48KCOHz/OUHZgMTExyp8/v7y8vLRkyRKj4wCAQ2CGOgdmKBwVO7ZwGAcPHtSyZctYaXYCcSvOS5cu1W+//WZ0HACwe8xQ58EMhaNixxYOo169ejp8+LCOHz+uFClSGB0HSSwmJkYFChTQBx98oGXLlhkdBwDsGjPUuTBD4YjYsYVD+PXXX7VixQoNGTKEgewkUqZMqSFDhmj58uU6ePCg0XEAwG4xQ50PMxSOiB1bOIS6devq6NGjOnr0KEPZiTx48EAFCxZUkSJFtHz5cqPjAIBdYoY6J2YoHA07trB7Bw4c0MqVK1lpdkIpUqTQkCFDtGLFCv36669GxwEAu8MMdV7MUDgadmxh92rXrq3jx4+z0uykHjx4oEKFCqlgwYJauXKl0XEAwK7Url1b4eHhOnLkCDPUCTFD4UjYsYVd27dvn1avXq2hQ4cykJ1U3IrzqlWrtH//fqPjAIDdiJuh7NY6L2YoHAk7trBrNWvW1KlTp3TkyBG5uroaHQcGefDggQoXLqx8+fJp9erVRscBALvADIXEDIXjYMcWdmvPnj1au3athg4dykB2cilSpNDQoUO1Zs0a7du3z+g4AGDz9u7dywyFJGYoHAc7trBbNWrU0NmzZ3X48GGGMvTw4UMVKVJEefPm1Zo1a4yOAwA2jRmKxzFD4QjYsYVd+uWXX7Ru3TpWmmHl6uqqoUOHau3atdqzZ4/RcQDAZjFD8W/MUDgCdmxhl6pVq6Y//viDlWbE8/DhQ7333nvKlSuX1q1bZ3QcALBJ1apV07lz53To0CFmKKyYobB37NjC7uzatUsbNmzQsGHDGMiIJ27Fef369dq9e7fRcQDA5sTNUHZr8W/MUNg7dmxhdwICAnThwgUdOnRILi6szSC+hw8f6v3331eOHDm0YcMGo+MAgE1hhuJ5mKGwZ/yLBruyc+dObdy4UcOGDWMg46lcXV01bNgwBQcHa9euXUbHAQCbwQzFf2GGwp6xYwu7UqVKFV26dEkHDx5kKOOZYmNj9cEHH+itt95ScHCw0XEAwCYwQ5EQzFDYK/5Vg934+eeftWnTJlaa8Z9cXFw0bNgwbdy4UTt37jQ6DgAYjhmKhGKGwl6xYwu74e/vrytXrujXX39lKOM/xcbGqmjRonr99de1adMmo+MAgKGYoXgRzFDYI/5lg13Yvn27tmzZwkozEixuxXnz5s3asWOH0XEAwDDMULwoZijsETu2sAu+vr66fv26Dhw4wFBGgsXGxqpYsWLKmjWrtmzZYnQcADAEMxQvgxkKe8O/brB5W7duVWhoqAIDAxnIeCEuLi4KDAxUSEiItm3bZnQcAEh2zFC8LGYo7A07trB5Pj4+unnzpvbv3y+TyWR0HNgZi8UiLy8vZcqUSSEhIUbHAYBkxQzFq2CGwp6wdAebFhYWprCwMAUGBjKQ8VJMJpMCAwMVGhqqrVu3Gh0HAJINMxSvihkKe8KOLWyWxWKR2WzWnTt3tG/fPoYyXprFYlHx4sWVPn16hYWFGR0HAJIcMxSJhRkKe8GOLWxWaGiotm3bxkozXlncinPc75oBgKNjhiKxMENhL9ixhU2yWCyqWLGioqKitGfPHoYyXpnFYlHJkiXl4eGhrVu38ncKgMNihiKxMUNhD9ixhU3asmWLduzYwUozEk3civP27dtZcQbg0EJCQpihSFTMUNgDdmxhcywWiypUqKCYmBjt3r2boYxEY7FYVLp0abm5uWnbtm383QLgcJihSCrMUNg6dmxhczZv3qyff/6ZlWYkurgV5x07dvBm8wAcEjMUSYUZClvHji1sisViUfny5RUbG6tdu3YxlJHoLBaLypQpoxQpUmjHjh38HQPgMJihSGrMUNgydmxhUzZu3Khdu3ax0owkE7fivHPnTm3atMnoOACQaJihSGrMUNgydmxhMywWi8qWLSuTyaSdO3cylJFk+LsGwNHw7xqSC3/XYKvYsYXN2LBhg3755Rd9/vnn/COJJGUymfT5559r9+7d2rhxo9FxAOCVBQcHM0ORLJihsFXs2MIm8DsbSG78LhoAR8EMRXJjhsIWsWMLm7B+/Xrt2bOHlWYkm7gV519++UUbNmwwOg4AvDRmKJIbMxS2iB1bGM5isahUqVJyc3PT9u3bGcpINnHv9xgdHa1ffvmFv3sA7E7cDHV3d+e9RZGsmKGwNezYwnBr167Vvn37WGlGsot7dce9e/dq3bp1RscBgBcWN0N5JWQkN2YobA07tjCUxWJRyZIl5eHhoa1btzKUkewsFosqVqyoqKgo7dmzh7+DAOwGMxRGY4bClrBjC0OtWbNG+/fvZ7cWhon7PaF9+/Zp7dq1RscBgARjhsJozFDYEnZsYRiLxaISJUooXbp0CgsLMzoOnJjFYpHZbNY///yjvXv38gMiAJvHDIWtYIbCVrBjC8OsWrVKBw4cUGBgoNFR4OTiVpz379+v1atXGx0HAP5T3Az9/PPPjY4CJ8cMha1gxxaGsFgs8vLyUsaMGRUaGmp0HECS5OPjo5s3b2r//v2sOAOwWXEzNFOmTAoJCTE6DiCJGQrjsWMLQ6xYsUIHDx5kpRk2JTAwUL/++qtWrlxpdBQAeKa4GcoZT7AlzFAYjR1bJLvY2FgVK1ZMWbNm1ZYtW4yOA8Tj6+ur69ev68CBA3JxYe0PgG1hhsKWMUNhJP7GIdmtWLFChw4dYrcWNunzzz/Xb7/9xoozAJvEDIUtY4bCSOzYIlnFxsaqaNGiev3117Vp0yaj4wBP5e/vrytXrujXX39lxRmAzWCGwh4wQ2EU/rYhWS1btkyHDx/m94Jg0wIDA3Xo0CEtX77c6CgAYMUMhT1ghsIo7Ngi2cTGxuqDDz7Qm2++qY0bNxodB3iuypUr69KlS/rtt99YcQZgOGYo7AkzFEbgbxqSzZIlS/T777/ze0GwC59//rl+//13LV261OgoAMAMhV1hhsII7NgiWTx8+FDvv/++cuTIoQ0bNhgdB0iQgIAAXbhwQYcOHWLFGYBhmKGwR8xQJDf+liFZLFmyREePHmWlGXbl888/15EjR7RkyRKjowBwYsxQ2CNmKJIbO7ZIcg8fPtR7772nXLlyad26dUbHAV5ItWrVdO7cOR06dEiurq5GxwHgZJihsGfMUCQndmyR5BYtWqRjx47xKo6wS4GBgTp69KgWL15sdBQATogZCnvGDEVyYscWSerhw4cqUqSI8uTJo7Vr1xodB3gp1atX19mzZ/X777+z4gwg2TBD4QiYoUgu7NgiSS1cuFDHjx9npRl2LTAwUMePH9dPP/1kdBQAToQZCkfADEVyYccWSebBgwcqXLiw8uXLp9WrVxsdB3glNWvW1KlTp3TkyBFWnAEkuYcPH6pQoULMUDgEZiiSAzu2SDILFy7UiRMnWGmGQwgMDFR4eLgWLlxodBQATmDBggXMUDgMZiiSAzu2SBIPHjxQoUKFVLBgQa1cudLoOECiqF27tsLDw3XkyBGlSJHC6DgAHBQzFI6IGYqkxo4tksT8+fN18uRJVprhUAIDA3XixAktWLDA6CgAHBgzFI6IGYqkxo4tEt2DBw9UsGBBFS5cWCtWrDA6DpCo6tSpo6NHj+rYsWOsOANIdMxQODJmKJISO7ZIdEFBQTp16hQrzXBIgYGBOnXqlObNm2d0FAAOiBkKR8YMRVJixxaJKiYmRgUKFNAHH3ygZcuWGR0HSBL16tXT4cOHdfz4cVacASSaBw8eqECBAnr//feZoXBYzFAkFXZskaiCgoJ05swZVprh0AIDA3X69GkFBQUZHQWAA5k7d65Onz7NDIVDY4YiqbBji0QTExOj/Pnzy8vLS0uWLDE6DpCkGjRooIMHD+r48eNKmTKl0XEA2DlmKJwJMxRJgR1bJJo5c+bo7NmzGjZsmNFRgCQ3bNgwnTlzRnPnzjU6CgAHwAyFM2GGIimwY4tEER0drfz586tEiRJavHix0XGAZNGwYUMdOHBA4eHhrDgDeGnMUDgjZigSGzu2SBSzZ8/WH3/8wUoznMqwYcN09uxZzZ492+goAOwYMxTOiBmKxMaOLV5ZdHS03n33XZUpU0Y//fST0XGAZNW4cWPt3btX4eHhSpUqldFxANiZ6Oho5cuXT6VLl2aGwukwQ5GY2LHFK5s1a5b+/PNPVprhlIYNG6Y//viDFWcAL2XWrFk6d+4cMxROiRmKxMSOLV5J3G5tuXLltGDBAqPjAIZo2rSpdu3apZMnT7LiDCDBmKEAMxSJhx1bvJIZM2bozz//1NChQ42OAhhm6NCh+vPPPzVz5kyjowCwI8xQgBmKxMOOLV7a/fv35enpqQoVKmj+/PlGxwEM1axZM/388886efKk3NzcjI4DwMYxQ4H/wwxFYmDHFi9t+vTpunjxIivNgB6tOJ8/f14zZswwOgoAO8AMBf4PMxSJgR1bvJT79+8rb968MpvNCgoKMjoOYBNatGihbdu26dSpU6w4A3gmZijwJGYoXhU7tngp06ZN019//cVKM/CYoUOH6uLFi5o+fbrRUQDYMGYo8CRmKF4VO7ZIsIcPH2r79u0qU6aM8ubNKz8/P82ZM8foWIBNadWqlUJDQ3Xq1Cnt3r1bFSpUkKurq9GxABiMGQr8N2YoXgU7tkiwsLAw+fj4aOzYsbp06ZKGDBlidCTA5gwZMkR//fWXxo0bJx8fH4WFhRkdCYANYIYC/40ZildBsUWC3b9/X5L03XffqW7duho5cqTOnDljcCrAdpw+fVpffvml6tSpo++++07So/epBABmKPB8zFC8KootEizurPUrV65o8+bNCg0Nlbu7u8GpANuROnVqhYaGasuWLbp8+bKk/3veAHBuzFDg+ZiheFUUWyRY3GqzxWKRr6+vfv31V7311lsGpwJsx1tvvaVff/1Vvr6+1mEc97wB4NyYocDzMUPxqii2eGFDhgzRsmXLlClTJqOjADYnU6ZMWrZsmfX351htBvA4ZijwbMxQvApeFRkv5MGDB0qRIoXRMQC7wPMFwOP4NwFIOJ4veFEUWwAAAACAXeNUZAAAAACAXWN//1/OnTunq1evGh0DiShr1qx65513jI6BRMDz0/Hw/HQsPEcdD89Rx8Hz0/Hw/IyPYvuYc+fOqWDBgrp7967RUZCIPDw8dOzYMZ74do7np2Pi+ek4eI46Jp6jjoHnp2Pi+RkfxfYxV69e1d27dxUUFKSCBQsaHQeJ4NixY2rZsqWuXr3Kk97O8fx0PDw/HQvPUcfDc9Rx8Px0PDw/n0SxfYqCBQvKy8vL6BgAnoLnJ2DbeI4CtovnJxwZLx5lYzw9PSVJBw8e1FdffZWsjz1w4EDlzJlT/v7+z71deHi4UqZMqR07dkiSpk6dKrPZLLPZrAIFCqhBgwbxbj906FDr5wU4AiOen/8WGBioggULWp970dHR8a4/d+6c9Tqz2ayUKVMqMjJS0dHRaty4sSpUqKBSpUpp06ZNkqQpU6aoVKlSqlixopo1a6b79+8b8WkBicIWnqOdO3e2Pv/eeOMNjR8//onblCtXTpUqVVLJkiW1YMECSY/et7NDhw6qWLGiqlatqgsXLkiSZsyYIW9vb1WsWFG1atXSrVu3kvXzAV5GRESEVq1a9ULH3LhxQ3PmzLH+edasWdZZlVxu3rypMmXKKGPGjAoKCrJefubMGVWsWNH63P7jjz+eOLZBgwaqVKmSSpQooXHjxiVnbFhgtX//fosky/79+w3LkDdv3kS5n9u3b7/wMRcuXLCcPn3a4ufn99zbNW3a1OLv72/Zvn37E9d16NDB8tNPP1n/fP78eUvTpk0T7fN6UbbwPUXisJXv5YMHDxL9Pu/evWt5+PDhCx0zbNgwy9y5cxN0259//tlSrVo1i8VisaxevdrStm1bi8VisZw7d87i5eVlsVgslpMnT1oz9OnTxzJt2rQXyvMybOV7isRhK99PW3mOPq5gwYKWixcvPnH5/fv3LRaLxXLz5k1Lrly5LBaLxbJ8+XJLx44dLRaLxbJ9+3ZL69at493WYrFYhgwZYpkwYcJL50koW/me4tUZ9b0MDQ21fPTRR0+97lnP1bNnz/7nz6Iv6kV/Lo6OjrZcunTpiVn72WefWWbNmmWxWCyWuXPnWnr16vXEsXHP1ZiYGIunp6fl1q1br5D82Xh+PokdW4PFxsbqww8/VIUKFdS+fXvFxMRIksLCwtS+fXtJ0ogRI1SqVCn5+vpq7Nixz7yvO3fuKCgoSLVq1VLv3r1fOMtbb70lF5fn/5XYtm2bcuXKpbfffvuJ66KiorRx40bVrl3bellgYKAGDx78wlkAIw0aNEhly5aVj4+Pli5dqoiICJUsWVKtW7dWy5Yt4z0/27Ztq48//lg1a9ZUiRIltGzZMlWrVk2FCxfWzp07n/kYDx8+1KZNm9S2bVtVrVr1pXZIx4wZI29v7/9cEZ4zZ45atWolScqbN6/u378vi8WiyMhIvfbaa5IenS0S9/x3c3OTq6vrC+cBkou9PEclaffu3cqRI4fefPPNJ65LlSqVJOn27dsqXLiwJOnEiRMqUaKEJKlEiRIKDQ2Nd1vp0byPuz1gCyIiIlS8eHE1adJEpUuX1tChQyVJY8eO1dq1a2U2m7Vjxw61bdtWnTp1Uq1atRQcHKyBAwfK19dXXl5emjx5svWY/fv3y2w2a8mSJQoMDLTums6cOVOlS5dWmTJlNGrUqOdmOnXqlIYPHy5vb2+FhYW90OeTMmVKvf76609cXrhwYd24cUOSdP36desMfVzcc/Xu3bt655135OHh8UKPjZfH79gabNWqVUqRIoW2b9+ukydPau7cuU/cZt68edq3b5/SpEmj2NjYJ67fuHGj5syZo6tXr6p27dqaMWOGsmXLJknas2eP+vbt+8QxXbt2VcOGDV8oq8Vi0ciRI7Vw4UL16NHjietXr14tf39/ubu7S5IOHTokSQxf2JX169fr9OnT2rlzp0wmkx4+fKg///xTERER2rx5szJkyPDEgCxUqJCmTp2qESNGaO7cuVq/fr127Nih77//XuXKlYt326NHj2ratGk6cOCAzGazBgwYoPz580uSoqOjVaVKlScyeXt7a8SIEfEu69atm4YNG6b79++rTp06Klq0qHx8fJ44Njo6WuvXr7eW3zx58uju3bsqUKCAbty4oZUrV8a7/bFjx7R+/Xpt3br1hb92QHKwl+donLlz51oXlv7t3r17CggI0JEjR6w/pBcpUkQzZ87URx99pA0bNuj69evW20+ePFkTJ06Uh4eHBgwYkOCvGZAcIiIitGXLFqVPn15+fn76/fff1atXLwUFBWnatGmSpGnTpil79uzWElupUiWlSZNG9+/f13vvvaf27durV69eOnr0qDZv3ixJ+v333yVJV65c0bhx47R3716lSJFCvr6+qlWrVryfM+/cuaNZs2Zp9erVeuONN9S0aVMNHDhQKVI8qjzDhw9XSEjIE9nXrFmjtGnT/ufn6Ofnp4CAAE2fPl1RUVHas2fPU29Xp04d7dq1S506dWKhOBlRbA0WHh6uMmXKSJLeffddayF93IQJE9SlSxc9ePBAn3zyiby9veNdP2/ePJ0+fVrdunVT7dq14z0xS5Uq9cKrVM+ycOFC+fv7K2PGjE+9fs6cOfF2iocOHaoJEyYkymMDyeXw4cPy8/OTyWSSJOtAKlKkiDJkyPDUY4oXLy5Jyp49uywWi/Xja9euPXHbkJAQrVu3Th07dlSTJk301ltvWa9LlSpVgp+vWbJkkSS5u7urQYMG2rdv31OL7erVq+Xr66vUqVNLevS7StmzZ9eKFSsUERGhevXq6ddff5X06IeSNm3aaNGiRUqTJk2CcgDJzV6eo9KjIrx27VqNGTPmqdenTp1a27Zt09WrV1WyZEk1btxY1atX186dO2U2m1WyZEkVKFDAevtOnTqpU6dOGjVqlL766qtn3i9ghIIFC1p/RixdurTCw8Ots+pxj/8cO3nyZK1YsUKurq66fPmyLl++/Mz7P3PmjN5//325ublJksqUKaPw8PB4xfbixYuaOnWqSpcurXbt2qls2bLx7mPo0KHW3eSX0a9fP/3vf/9Tw4YNtXDhQg0YMMBa0h+3cuVK/fPPP6pYsaKaNGmiQoUKvfRjIuEotgbLly+f1q9fr48++kinT5/WlStXnrhN2bJl5efnp3PnzqlevXrav39/vOtnz56ta9eu6aefflK9evWUNWtWtW3bVgEBAYm6Y3vw4EHt27dPmzdv1uHDh3X8+HHNnz9fefLk0ZUrV3Ts2DFVrFjRevvTp09bTwX766+/1KVLF02cOPGFHhNIbkWKFFFQUJDat29v3Q2S9NwV17gfsP/9cdwP0I/r2rWrOnTooDVr1qh79+76559/VL9+fbVr104PHz5M8G7QjRs3lDFjRlksFoWGhqpZs2ZPzTZ37lx179493mVxC2iZMmXSnTt3JEmXLl1So0aNNH36dOXJk+eZnytgNHt5jkrSunXrVLFixacuFEVHRytFihRycXFRmjRp5O7ubj3jKe6+goODrac1RkVFWa/PlCmToqKinvn5AkY4duyYbt68qfTp02vPnj1q0aKFbt++rQcPHsS7XdxzNTIyUjNnztShQ4f+X3t3Hh/T2fYB/JcEiVgTuyIhEbtaguw5kwQtStVSS6kqquj66kpLParebs/TvVWeKlrdUUqpOicEsSQlQVBLqvYtQUT2+/0j75xmZBJZZuacM/l9P59+yqz35HLnmuu+7nMOcnNz0a5dOwghUKNGjWLPAQp3HO3fvx/Z2dmoXr064uPjMX78eIvHBAQEICkpCfv27cOKFSvw3HPPITw8HFOnToWPj0+lO7bAPzm0UaNG6rZks4KCAuTn56N69eqoWbOm+h85BgtbjQ0ZMgSrV69GeHg4OnfubPUYnKFDhyIrKwtZWVmYPn261ddp0KABpk2bhmnTpuHkyZPqGYvL07F977338P333yMlJQUxMTH4+OOPERAQgLFjx+Krr77C//7v/6qPnTBhAiZNmqR+Af7mm28wcuRIiy8MycnJ6p/9/f1Z1JIhDBgwALGxsQgODoanpyemT5+udntsxd3dHcOGDcOwYcOQnp6O77//Hjk5OahZs2aZ5+vTTz+NI0eOQAiB8PBw9dj2p59+GrNmzUKjRo1w5coVJCUlQZIk9XkPPfQQRo8ejcjISGRmZuL1118HALz44ou4cOGCWgSPGTMGU6ZMsennJrIFo8xRoHBh6bHHHrO4zTxHr127hokTJ8LNzQ3Z2dmYM2cO3N3dkZaWhqFDh8LNzQ0+Pj7qzqd58+apxwR7e3vjv//9r80+L5EttGnTBo8//jiOHz+OmJgYdOnSBTdu3MDx48cxfPhwvPDCCxaPr1+/Pjp27IiwsDB07NhR7e42bdoUNWvWxLBhwzBx4kT18Y0aNcJTTz2F8PBwuLi4YPDgwSUe7tatWzd069YNBQUFkGUZZ8+ehY+PT7k6tgMGDMDhw4fh6emJ2NhYfP7555g9ezYee+wxVKtWDbm5ufjss88AAAsXLsTAgQPh6+uL++67DwCQnZ2NUaNGoXXr1uX+WVLFuAhry5VVVGJiInr27ImEhARe48tJMKbOg7F0Poypc2E8nQ9j6jzsHcvU1FRMmjRJPS6W7I/zszieFZmIiIiIiIgMjYUtERERERFVmK+vL7u1pDkWtkRERERERGRoLGwNoujFqfVuzZo16NOnDyIjIzFw4ED1cgrZ2dkYP348wsPDcf/99+PatWvFnvvAAw9AkiRIkoT69etj7dq1OHXqlHqbJEmoXr060tLSABReliEmJgYmk4nX9CNNGWmOHj16FD169EDt2rXVE80BQH5+Pl566SXExMRAkiSr17JNSkpCWFgYQkJC8M4771jcl5OTA39/f4uzw86ZMwchISGQJEm9FiGRoxlpfppt2bIFLi4uOH36tMXtS5YsQfXq1a0+54MPPkBAQAD8/f2L3Xf7/Ny9e7eaV4OCgqxeloXIUZxhjn722Wfo3bs3IiIiMHr0aGRnZxd7zt9//42YmBiEh4dbXCJz2LBhiIyMRGBgoHrdeQCIiYlBo0aNSrxONlliYasx82UKHPk+Qgirlzgo7TnlcffddyMuLg6xsbEYOHAg/vOf/wAovCyRr68vtm3bhgEDBuDdd98t9tyffvoJiqLg119/Rf369dGvXz+0atUKiqJAURQsWLAAffv2hZeXF65cuYJ33nkHv/zyC2RZxhtvvFGh8RKVxhnnaIsWLfD7778Xu+TX4sWL0bJlS2zevBmKoiAyMrLYc6dPn44vvvgCcXFxWLNmDY4fP67e99FHH1lcq2/fvn3YvXs3duzYgaVLl+Kpp56q0HiJSuKM8xMovGTI22+/jcDAQIvbMzMz8dNPP6FVq1ZWnzdy5EgcPHjQ6n23z0/zVRMURcGTTz6JBx98sMLjJSpJVZqj0dHRiI+Px9atW9GyZUurhfoLL7yAl19+Gdu2bcPZs2chyzIAYOXKlYiNjUV8fDw+/vhj3LhxA0DhteffeuutCo+zqmFhW4rU1FSEhobCZDJBkiSkpaXhwoULiI6ORr9+/TBt2jTExMQAKLz8jbnzoSiKev3W9957D1FRUQgMDMTs2bPV1/bx8cH06dPRr18/XLt2DSNHjkRUVBRMJhOOHj0KAFi1ahW6deuGwYMHF7t2bVG5ubmYPHkyoqKiEBYWhp07d6pjevzxx3Hfffdh48aN8Pf3x6xZsxAdHY3Tp09j1KhRiIyMRGhoqPr6tz+nInx9fdXVZHd3d/V6ZbIsY+jQoQCA+++/X53M1qxevRr9+/dXL8JttmzZMowbNw4A8Msvv6BRo0a4//77ERMTg/j4+AqNl4yLc7Ric9TT0xNeXl7Fbv/2229x7tw5REVFYeLEiWpiNcvOzsb169fRtm1buLq6YtCgQWpXNz09HZs3b8YDDzygPv7o0aPqZVh8fX2RkpJi9dqE5Jw4Pys2PwFgxYoVGDx4cLHr37799tt44oknLC6tV1STJk2sdnOtzc+iiuZWqjo4R207R/39/eHqWlhaFf3+W1RiYiKioqIAWH4XNl+vOjMzE61atYKnpyeAwoVoKjsWtqXYsmUL+vbtC1mWoSgK6tevjzfeeAMTJ07Epk2biq2kWjNp0iRs2bIFe/bswe+//46//voLAHD27Fk899xz+P333/HGG2/ggQcewJYtW/Dhhx/i+eefR0FBAV588UXExsZi9erVxb5gFrVkyRL4+flhy5YtWLVqFZ599ln1vhYtWmDt2rUYMGAA8vLyMGDAAGzZsgU//fQT2rdvj9jYWPz3v/+1uD5u0ecUNW3aNIstwZIkYdCgQSWO6/z58/jwww/Va2FeuXJF/TJt7riWZPny5cWSbE5ODjZs2ID7778fAHDmzBmkpKRg1apVWLJkicW1zqhq4Byt3By93ZkzZ+Dt7Y0tW7agY8eOxVaJi85hwHIev/7668WuUdipUyfIsoycnBwkJibi/PnzxS5mT86L87Ni8/PWrVtYtmyZWjiYnT9/HgkJCbjnnnvu+HO7nbX5WfR1U1NTERwcXO7XJWPjHLXtHDVLSUnBhg0bMGLEiGL3FRQUqH++/bvwkCFD4O/vj7CwMKtFMd1ZNa0HoGcjR47EggULMHbsWPj4+GDu3Lk4cuQInnjiCQBASEgIvv76awCwWD0tuv3hxx9/xOLFi+Hi4oKTJ0/i9OnT8PHxQYsWLeDr6wsASE5ORmxsLD799FP1tS5duoTGjRujXr16AICgoKASx5mcnIwdO3bg119/BQCLL45hYWHqn93c3BASEgIAOHz4MIYNGwYAaNeuncXEKvqcoj7++ONSflqW0tLSMGzYMCxatAjNmzcHADRo0ABpaWnw9fVFenp6icfzXLhwAX/++SdCQ0Mtbl+7di2ioqJQs2ZNAIUXqDeZTPDw8ICPjw/q1q2Lq1evwtvbu8zjJGPjHLVUnjlqjbe3N+69914AwKBBg/D8888Xu7/o2M3zODU1FSdPnkRERAROnDih3t+pUyeMHj0aMTExCAgIQJcuXXgcXxXC+WmprPPzP//5D6ZOnYpq1Sy/os2dO9eiI1ZWJc1Ps6+++gqjR48u9+uS8XGOWqrsHAUK59vDDz+M7777rtiOCwBqR9f8OYrmxDVr1uDmzZuIiIjAgw8+aHHoAJUNC9tSuLq6YsGCBQCAiRMnYuPGjQgICMCuXbvg5+dnsfXV29sbp06dAgDs2bNHvf2VV17B4cOH4e7ujtDQUPWXQdGVmE6dOiE4OFjdppuTkwM3NzdcuHAB169fR506dbB792507tzZ6jg7deoEf39/PPPMM+rzzYq+j4uLi/qLqX379ti2bRtiYmJw5MgRi4lV0irRtGnTcOjQIYvbateujXXr1lnclpGRgSFDhuC1115Dr1691NslScLPP/+M7t274+eff4YkSVbfZ+XKlRg1alSxrVbLly/Hk08+qf7dZDLhxx9/hBAC165dQ1pamtXtleS8OEctlXWOliQ6Ohp79+5F+/btsWvXLgQEBFjc7+HhgTp16uDEiRNo3bo11q9fj88//xyJiYk4e/Ys7rnnHpw5cwbZ2dno3Lkz7r//fsyYMQMzZszAgQMH8NZbb5W4hZKcD+enpbLOz4MHDyI2NhaLFy9GUlISxo0bh3Xr1uHYsWN45ZVXAADnzp3D8OHD8cMPP1h9r6JKm59A4ZbKsrwOOR/OUUuVnaM3btzAiBEjsGTJErRp08bqe3Tv3h2xsbGIjIzEzz//jEceeQQFBQXIz89H9erVUbNmTfU/Kj8WtqVYt24dPvjgA7i5ucHd3R1hYWEIDAzEmDFj8MUXX1hMwEmTJmHMmDH4+uuv0bp1a/X2Bx54AKGhoWjfvj1q165t9X1mzZqFqVOn4oMPPgAA9O/fHy+88ALeeOMNREREoGXLlqV2ISdPnowZM2bAZDIBKJw01k7MdPtzJkyYgIiICOTl5anvXZqyrmS9/fbbOHz4MObPn4/58+cjKioKr776KiZMmIBJkyYhIiICXl5e+PLLLwEUHhh/1113oW/fvgAKC9iVK1davOaVK1eQlJRkUQwHBATg3nvvRWRkJLKzs/Huu+/yS3MVwzlqqaxzNC0tDSNGjMChQ4dw8OBB9O/fH/Pnz8fMmTPx6KOPYsmSJfDw8MCyZcsAAAsXLsTAgQPRpUsXvP/++xg/fjwKCgowdOhQ+Pv7w9/fXz12b+nSpTh9+rT6pblfv37Iy8tDw4YN8dFHH5VpfOQcOD8tlXV+Fj3hjCRJWL58OWrVqmVxjVB/f3+1GC2aQ7/55hssXrwYZ8+eRUxMDObMmYMHHnigxPmZnJwMT09P+Pn5lWls5Fw4Ry1Vdo5Onz4dFy5cUJswY8aMwZQpUyzm6MKFCzFx4kTk5OQgMDAQJpMJGRkZuO+++wAUnsti1KhR6s944sSJ2LVrF7Kzs7Fr1y6sXbu2TGOsqlxEWU4bVkUkJiaiZ8+eSEhIQI8ePe74+NTUVEyaNIkXpNax8saU9KsiseQc1TfOT+fCHOp8OEedB3Oo8+H8LI4dW4MZP368uhUEKNwa8tNPP2k4IiIqinOUSL84P4n0jXOUKoOFbSX4+vo6fBXLvDWQiO6Mc5RIvzg/ifSNc5SMhpf7cVL+/v4OeZ+4uDh06dIFHh4eOH36tHr7rVu3MHXqVMTExECSJBw5cgQ5OTkWp1D38PBAcnKyQ8ZJpCdaz88PPvgAAQEBFuM4deqUxfysXr060tLSHDJOIj1z1Hw1W7JkicW1aItegqRp06ZlOlaQqKpw1Pz87LPP0Lt3b0RERGD06NHIzs4GUHgprYiICISGhmL8+PHIzc11yHjIOha2VCldunTBzp07i52mfd68eRg8eDA2b94MRVHQrl071KhRA4qiQFEUrFixAv7+/ujSpYtGIydyfiXNz5EjR+LgwYMWt7Vq1UqdnwsWLEDfvn15lnEiB8vMzMRPP/2EVq1aqbd9/PHH6tz09vbG8OHDNRwhUdUUHR2N+Ph4bN26FS1btlRPIPXcc89h69at2L59OwBg06ZNWg6zyuNWZAdLTU3F2LFjUaNGDQghsGrVKiQnJ2POnDnIy8uDl5cXvv32W9SsWROSJKF79+44dOgQsrOzMWXKFHz55Ze4cOECvvvuOwQEBECSJHTq1AlHjx5FQUEBVq5cicaNG6vvl5ubi2nTpuH48ePIycnBW2+9heDgYMyfPx8///wzateujUGDBllc7Lo8zNcfu92mTZuQl5eHN998Ez169MCbb75pcb2vFStWYOzYsRV6TyJ7qSrzs0mTJqU+b9myZRg3blyF3pPIUZxtvgKFVxV44oknMGPGjGL3xcfHo2XLlmjWrFmFX5/IUZxtfhbtDLu7u6uXDKpRowYAoKCgAHl5eQ7f4UGW2LF1sC1btqBv376QZRmKoqB+/fro2bMnZFnGtm3b0KFDB3z33Xfq4yMjI7Fx40b4+/tjz5492LhxI2bOnIn//ve/6mP69OmD3377DWPHjsVbb71l8X5LliyBn58ftmzZglWrVqkT+quvvoIsy9iyZQuefvrpYuN84IEHLLYlSpKESZMmlflzHjhwACEhIVAUBbm5ucWOmfjqq69Y2JLuVJX5WZqcnBxs2LBBvRwIkV4523w9f/48EhIScM8991j9vMuXL+eCExmGs81Ps5SUFGzYsAEjRoxQb5szZw4CAgKQnp6Oli1bVvRHRjbAjq2DjRw5EgsWLMDYsWPh4+ODuXPn4uDBg5g9ezays7Nx4cIF1K1bV318z549AQAtWrRQrzPXokULxMbGqo8JCQlR/79q1SqL90tOTsaOHTvw66+/AgDS09MBAB9++CGmT5+OvLw8TJ06FWFhYRbPq+wZ6Ly9vXHvvfcCAAYOHIj169er9yUkJKBhw4YWW62I9KCqzM/SrF27FlFRUbw4POmes83XuXPnYvbs2Vbvy8nJwS+//II333yzTK9FpDVnm59AYRf64YcfxnfffYdatWqpt7/22muYO3cupk+fjqVLl2LatGllfk2yLRa2Dubq6ooFCxYAKLzo8saNG7F48WK89tprCA4OxvPPP4+ilxZ2cXGx+ueij4mPj4e/vz/i4+PRrl07i/fr1KkT/P398cwzzwAoTI4AEBwcjOjoaJw6dQpDhw5FQkKCxfMeeOABXL161eI2f39/LF68uEyfMzo6Gnv37kVYWBh27dqFgIAA9T6uOpNeVZX5WZrly5erF5cn0jNnm6/Hjh3DK6+8AgA4d+4chg8fjh9++AEAsH79ekRERFh8mSbSM2ebn+fPn8eIESOwZMkStGnTRr09KysLHh4ecHFxQb169eDp6Vn2HxLZHAtbB1u3bh0++OADuLm5wd3dHWFhYcjIyMCjjz6K9u3bo27duhYrWGWRmJiIL7/8Evn5+Vi5cqXFfZMnT8aMGTNgMpkAAN27d8e7776LoUOHIisrC1lZWZg+fXqx1yzrClZKSgqeeOIJ7N+/H6NHj8aDDz6IGTNmYOHChZg0aRKysrLQuHFjdStyXl4eVq9ejXnz5pXrMxI5QlWZn9988w0WL16Ms2fPIiYmBnPmzEF4eDiuXLmCpKQkSJJUrs9IpAVnm69FL6vi7++vFrVA4YLTY489Vq7PQqQlZ5ufL774Ii5cuKAu/I4ZMwZTpkzBtGnTcOLECeTn5yMgIIDfbzXmIoouhVRxiYmJ6NmzJxISEtCjRw+th1MmkiRhxYoVaNGihdZD0SUjxpSsM2IsOT9LZ8SYUsmMHk/O1+KMHlP6h9FjyflZnNFjag88eRQREREREREZGrciG5yiKFoPgYhKwPlJZBycr0T6xflJZcGOLRERERERERkaC1udSk1NRUxMjMPeb+7cuejTpw9CQ0Px5JNPqmehmzJlCoKCghAUFISFCxdafe5nn32GPn36IDw8XF1Ry8nJwciRIxEeHo7evXvjt99+AwDExcWhS5cu8PDwwOnTpx3y2YjswdFz9IcffkCHDh3g4eFh9f6IiAir194TQmDGjBkIDg5Gr169sGLFCvX2Z599FuHh4YiJiVHn44kTJxAREaFez++vv/6y34cishNHz8/XX38dERERCA0Nxfjx45GbmwsASEpKQlhYGEJCQvDOO+9Yfe6cOXMQEhICSZJw4MABAMCaNWvQp08fREZGYuDAgbhy5QoA5lByDo6en2avvvoq/P39i90+fvx4q+M5deqUxfVtq1evjrS0NADAW2+9hdDQUISHhyM5ORkAkJmZieHDh0OSJAwbNgzXrl2z7weiYljYEoDCs7vt2rUL27dvx/nz57FlyxYAwMyZMxEfH48dO3ZgzZo1OH78uMXzLl68iM8++wxxcXFYt24dZs6ciYKCAmzatAm1atXCtm3b8OOPP+LFF18EAHTp0gU7d+5EUFCQwz8jkZFJkoQ//vjD6okzVq1ahfr161t93sGDB3Hw4EHs3LkTiqLg1VdfBQD89ttvuHz5MrZt24bnn38es2bNAgB8/PHHePTRR6EoCiZNmoT333/fbp+JyFk899xz2Lp1K7Zv3w4A2LRpEwBg+vTp+OKLLxAXF2c1h+7btw+7d+/Gjh07sHTpUjz11FMAgLvvvhtxcXGIjY3FwIED8Z///AcAcyhRRZ05cwZ//vlnsdsTExNx/fp1q89p1aoVFEWBoihYsGAB+vbtCy8vLxw9ehTr169HXFwcPv/8c/VMyYsWLUJgYCAURcHQoUPx7rvv2vUzUXEsbB1o5syZ+PHHHwEUXvama9euyM3Nxcsvv4yoqCj06NEDn3zySbHnTZgwAXFxcQCgftkEgAMHDiAmJgZRUVEYMWIEMjMzKzy2oteZdXd3h5ubm8Xtrq6uqFatmnq7WWpqKjp27Ijq1aujXr16qFatGlJTU+Hn54fs7GwIIZCWlobGjRsDAOrVq4fatWtXeJxE9qTnOdqwYUOr3dq8vDx88sknVi9jAADNmzdHjRo1kJubixs3bsDb2xsAIMsyhg4dCgDo27cvdu/eDaDwWoDmC9tfvXpVnbtEWtPz/KxRowYAoKCgAHl5efD390d2djauX7+Otm3bwtXVFYMGDUJsbKzF844ePYqePXsCAHx9fZGSkoK8vDz4+vqievXqACxzMnMo6ZWe5ydQuDNx9uzZxW6fN2+eurBbmmXLlmHcuHEACvPn4MGD4eLigvbt2+PSpUvIy8vD0aNHERgYCAAIDAyELMuVGjOVH08e5UATJkzAyy+/jGHDhmHjxo2IiopC9erVMWvWLNSqVQvZ2dno0qWL1e2E1kybNg0rVqxAq1at8NFHH2HRokV4+umn1ftzcnLQr1+/Ys8LCwvD/Pnzrb6moig4ffo0IiIiLG5fsWIFWrZsCV9fX4vb/fz88Mcff+D69eu4fv06Dh48iKtXr6JLly7IzMxE+/btkZ6ejjVr1pTpMxFpyQhz9HaffvopHnroIbi7u1u938vLC35+fggICMDNmzfx2WefAQCuXLkCLy8vAICLiwvy8/MBANHR0ejfvz+WLFmCrKwsteAl0pre5+ecOXPw1VdfISAgAC1btrSYY0DhXDRvKTbr1KkT3nvvPeTk5ODAgQM4f/480tPT0bBhQwDA+fPn8eGHH+KXX34p02ci0oqe52dSUhKAwvlW1Lp169CjRw80atSo1LHk5ORgw4YN+Pe//w2gMH82b95cvb9evXpIS0tD586d8euvvyImJga//vorrl69WqbPSrbDwtaBOnfujEuXLuHixYv48ssv8dJLLwEAPvnkE6xevRpubm64ePEiLl68aPE8FxcX9c9FLzt88OBBjB8/HgCQnZ0NSZIsnlejRo1ynUUuMTERL730EtatWwdX13+a+Rs2bMCyZcvw888/F3tOgwYNMHfuXAwaNAjNmjVDt27d0Lx5cyxduhQtWrTA6tWrkZqaiqFDh+KPP/4o81iItKD3OXq769evY/Xq1di0aRO2bt1q9TGbNm3CmTNncOzYMVy7dg1hYWEYMGAAGjRooB4rJIRAtWqF6eCFF17Av/71LwwfPhzffPMNXnrpJaur7ESOpvf5+dprr2Hu3LmYPn06li5diokTJ6q7HwAgPT0dDRo0sHhOp06dMHr0aMTExCAgIABdunRRH5OWloZhw4Zh0aJFFl+iifRIz/Pz1VdfxYcffmhxW35+Pt59912sXbsWly5dKvX5a9euRVRUFGrWrAkAFvkTKMzFXl5eePTRR/HMM8/AZDIhODiY81YDLGwdbOzYsfjoo4+QmpqK7t27Iy0tDV988QWSkpKQm5uLdu3aWUxsAPD29sapU6cAAHv27FFv79y5M1auXIlmzZoBKFxRKqo8q1kpKSmYMmUKVq9ebZF4t27divnz52P9+vUlnrRmxIgRGDFiBM6dO4dJkyapE9m8Aubl5YWMjIwy/XyItKbXOWpNSkoKrl+/jgEDBuDq1as4d+4cPvvsMzz22GPFxufm5oY6deogNzcX+fn5kCQJ33zzDYYOHYotW7ao26eAf+Zuo0aNLL6YE2lNr/MzKysLHh4ecHFxQb169eDp6QkPDw/UqVMHJ06cQOvWrbF+/Xp8/vnnxV5vxowZmDFjBg4cOIC33noLLi4uyMjIwJAhQ/Daa6+hV69eFfthETmYXufn8ePH1U7xuXPnMH36dLz88svq4tGtW7dw8OBBzJs3Tz0PRVHLly9Xj6MFCs95MX36dDz99NM4duwYGjRogGrVqqFatWr4+OOPARSeWPX2XY7kAIJUCQkJAoBISEiw23tcuXJFeHp6irffflsIIURBQYEYPny4CAoKEhMnThTdu3cXf//9tzh58qSIjo4WQghx6NAh0a1bNzFw4EAxY8YM8eijjwohhEhOThb9+vUTJpNJmEwmsWHDhgqPKzIyUrRt21ZERkaKyMhIsWbNGiGEED4+PqJLly7q7bt27RJCCPHUU0+JixcvCiGEGDdunJAkSQwcOFAcP35cCCFERkaGuO+++0RERIQIDAwU3377rfpZoqOjRf369UVYWJj44IMPKjzmsnBETMkxHBVLvc5RWZZFdHS0qFmzpoiOjhbfffddsfvN7yuEEGPGjBFCCJGXlycefvhhERISIgIDA8V7772nfq6nnnpKhIWFiejoaHHq1CkhhBAHDhwQoaGhIjIyUoSEhIjk5OQKj/lOOD+dS1XOoY888oiIjIwUYWFhYuLEiSInJ0cIIURiYqIIDQ0VwcHB4s0331Qfb56fQgjRt29fYTKZxIgRI9S8OmfOHNGoUSM197722mvqZ2EOpYqoyvOzKD8/v2K3FR2PEJbfcS9fvixat24t8vPzLZ6zcOFCERISIkJDQ8W+ffuEEEIcPHhQREZGiqioKPHss8+KvLw8m4y5JJyfxbkIcdvSSRWWmJiInj17IiEhAT169NB6OGQDjKnzYCydD2PqXBhP58OYOg/G0vkwpsXxrMhERERERERkaCxsiYiIiIiIyNBY2BIREREREZGh8azIVqSkpGg9BLIRxtL5MKbOg7F0Toyr82AsnQ9j6jwYy+JY2BbRsGFDeHp64qGHHtJ6KGRDnp6e6sXuybg4P50T56fz4Bx1TpyjzoHz0zlxflriWZFvc+rUKVy+fFnrYdjEo48+Ci8vL7z99ttlevyff/6JUaNG4dNPP3Wq6+Y1bNgQrVq10noYZAPOND93796Nxx9/HN9++y38/f3L9JyZM2ciPT0dixcvtvPoHIfz07k40xydNGkSvLy88NZbb5Xp8cyhpHfOND+ZQwtxflpiYeukMjMzUb9+fbz77ruYMWNGmZ5TUFCAxo0bY9q0aZg3b56dR0hUtb3yyiv49NNPceHCBbi6lu10Bx988IGamGvWrGnnERJVXcyhRPrGHErW8ORRTmrnzp3Izc2FJEllfo6rqysiIyOhKIrdxkVEhRRFQWRkZJkTMgBIkoScnBzs3LnTjiMjIuZQIn1jDiVrWNg6KVmW0bBhQ3Tq1KlczzOZTIiPj0dmZqadRkZEmZmZ2LVrF0wmU7me16lTJzRs2BCyLNtpZEQEMIcS6RlzKJWEha2TUhQFkiTBxcWlXM+TJAm5ublczSKyox07dpS7GwSwI0TkKMyhRPrFHEolYWHrhG7evIndu3eXeyUL+Gc1i5OeyH4URUGjRo3QsWPHcj/XZDJh165d7AgR2QlzKJG+MYdSSVjYOqGKrmQBgIuLCyRJ4jYNIjuSZblC3SDgn47Qjh077DAyImIOJdI35lAqCQtbJ6QoCho3bowOHTpU6PmSJGH37t24efOmjUdGROZuUEW+NANAx44d0ahRI3aEiOyEOZRIv5hDqTQsbJ1QZVaygMJtGlzNIrKP7du3Iy8vr0LbHAF2hIjsjTmUSL+YQ6k0LGydTEZGBvbs2VPhlSwA6NChAxo3bszVLCI7UBQFTZo0Qfv27Sv8GuwIEdkHcyiRvjGHUmlY2DqZyq5kAVzNIrKnynaDgMKOUF5eHrZv327DkRERcyiRvjGHUmlY2DoZ80pWu3btKvU6kiRhz549yMjIsNHIiMgW3SAAaN++PZo0acKOEJGNKYqCpk2bMocS6RBzKN0JC1snY4uVLOCf1SweI0RkO9u3b0d+fn6lukHAPx0hJmUi26ro9WtvxxxKZHvMoXQnLGydyI0bN7B3795KT3gAaNeuHZo0acKtVEQ2JMsymjZtioCAgEq/FjtCRLZ148YNm3SDAOZQIntgDqU7YWHrRMwrWbZIylzNIrI9W3WDgMKkzGOEiGyHOZRI35hD6U5Y2DoRWZbRrFkzm6xkAYVbqfbs2YMbN27Y5PWIqjJb7qgACjtCTZs2ZUeIyEaYQ4n0izmUyoKFrROx5UoWULialZ+fz9UsIhuIi4uzWTcIYEeIyNaYQ4n0izmUyoKFrZO4fv06EhISbLaSBQABAQFo1qwZJz2RDSiKgubNm6Nt27Y2e02TyYS9e/eyI0RUScyhRPrGHEplwcLWSdh6JQvgtfiIbMlWZywvytwRiouLs9lrElVFzKFE+sYcSmXBwtZJyLKM5s2bw9/f36avK0kSEhIScP36dZu+LlFVYu4G2fJLMwC0bduWHSEiGzB3g5hDifSHOZTKioWtk1AUBSaTyaYrWUDhNg2uZhFVzrZt21BQUGDTbY5AYUfIZDKxI0RUSbIsM4cS6RRzKJUVC1sncO3aNSQmJtp8JQsA/P390bx5c65mEVWCoii466674OfnZ/PXZkeIqHKYQ4n0jTmUyoqFrROw10oW8M9qFpMyUcXZa0cFUNgRKigoYEeIqILi4uKYQ4l0jDmUyoqFrRNQFAUtWrRAmzZt7PL65tWsa9eu2eX1iZyZPbtBAODn54e77rqLW6mIKkiWZeZQIp1iDqXyYGHrBOxxpriiuJpFVHH23FEBsCNEVFn27AYBzKFElcEcSuXBwtbg0tPT8ccff9htwgNAmzZt0KJFC65mEVWALMto2bIlWrdubbf3kCQJiYmJ7AgRlZM5h9qrGwQwhxJVBnMolQcLW4Pbtm0bhBB2Tcrma/FxNYuo/BRFseuOCqAwKRcUFGDbtm12ew8iZ2TuBjGHEukTcyiVBwtbg5NlGa1atbLrShZQuJXqjz/+QHp6ul3fh8iZpKWl2X1HBVDYEWrZsiU7QkTlxBxKpF/MoVReLGwNzhErWQBXs4gqwhE7KgB2hIgqijmUSL+YQ6m8WNga2NWrV7Fv3z67r2QBQOvWrdGqVStOeqJyUBQFPj4+du8GAewIEZVXWloacyiRjjGHUnmxsDUwR61kAf+sZnGbBlHZmc9Y7giSJEEIga1btzrk/YiMbuvWrcyhRDrGHErlxcLWwGRZho+PD3x9fR3yfpIkYd++fUhLS3PI+xEZ2dWrV7F//36HJWVfX192hIjKwdwNYg4l0h/mUKoIFrYGZr72nqOYTCauZhGVkSO7QcA/1+JjR4iobGRZZg4l0inmUKoIFrYGdfXqVSQlJTlswgOFq1k+Pj5czSIqA0VR4Ovr67BuEFDYEdq/fz+uXr3qsPckMiLmUCJ9Yw6limBha1CxsbEOXckyM5lMTMpEZeDoHRXAP8cI8cyrRKVzdDfIjDmUqGyYQ6kiWNgalKIoaN26NXx8fBz6vlzNIrqzK1euOPTYIDPz6ja3UhGVTpZl5lAinWIOpYpiYWtQjjxTXFE8axzRnZnnhxZzlB0hojvTohsEMIcSlQVzKFUUC1sDunz5MpKTkzVJyubriXE1i6hksiyjTZs2aNWqlcPf29wRunLlisPfm8gILl++7PDja82YQ4nujDmUKoqFrQFpuZJlfl+uZhGVTFEUTecnAHaEiErAHEqkb8yhVFEsbA1IlmX4+fmhZcuWmry/yWRCUlISV7OIrNByRwUAtGrVCm3atOEXZ6ISKIrCHEqkU8yhVBksbA1Iy5Us4J/VrNjYWM3GQKRX5nmh9RzlVkci67Q6R4UZcyhRyZhDqTJY2BrMpUuXcODAAc1WsgCgZcuW8PPz42oWkRWKosDf3x8tWrTQbAwmkwnJycm4fPmyZmMg0iPmUCJ9Yw6lymBhazDmlazIyEhNx8HVLCLrtO4GAewIEZVED90g8/szhxIVxxxKlcHC1mBkWdZ8JQsoXM06cOAALl26pOk4iPTk4sWLOHjwoKbdIABo0aIF/P392REiuo2iKGjbti3uuusuTcfBHEpUHHMoVRYLW4PR6tp7tzN3jHnWOKJ/mOeD1jsqAJ55lcgarc9RYcYcSlQccyhVFgtbA7l48SIOHTqki6RsXs3iViqif8iyrItuEFCYlNkRIvqHuRvEHEqkT8yhVFksbA3EvHKkh6QMFG6l4moW0T/0sqMC4DFCRLfTy/G1ZsyhRJaYQ6myWNgaiKIoCAgIQPPmzbUeCoDCSX/w4EFcvHhR66EQae7ChQu62VEBAHfddRfatm3LjhDR/5NlmTmUSKeYQ8kWWNgaiB7OFFcUV7OI/qG3bhDAjhBRUXrqBgHMoURFMYeSLbCwNYjz58/j8OHDukrKzZs3R0BAAFeziFC48NSuXTs0a9ZM66GoJEnCoUOHcOHCBa2HQqSp8+fPIyUlRVdfmplDif7BHEq2wMLWIPRy/drb8axxRIX0crbVotgRIirEHEqkb8yhZAssbA1ClmW0b99eVytZQOE2jZSUFK5mUZWmxx0VANCsWTO0a9eOX5ypylMUhTmUSKeYQ8lWWNgahB5XsoB/Vr856akqM//711s3CChcceZWR6rq9HaOCjPmUCLmULIdFrYGcPbsWRw5ckR3K1lA4WpW+/btmZSpSlMUBR06dEDTpk21HkoxJpMJhw8fxvnz57UeCpEmzp07xxxKpGPMoWQrLGwNQK/HBplxNYuqOr12gwB2hIj03A0CmEOJmEPJVljYGoAsy+jQoQOaNGmi9VCsMplMOHLkCM6dO6f1UIgc7uzZszh69Kguu0EA0LRpU3To0IFJmaosRVHQsWNH5lAiHWIOJVtiYWsAerv23u3Mq1k8axxVRXrfUQHwzKtUten1HBVmzKFUlTGHki2xsNW5M2fO4M8//9R1Um7SpAk6dOjArVRUJcmyjI4dO6Jx48ZaD6VEkiThyJEjOHv2rNZDIXIoczeIOZRIn5hDyZZY2Oqc3o8NMjOZTFzNoipJ7zsqAF6Lj6ou5lAifWMOJVtiYatziqKgU6dOul7JAgon/dGjR7maRVWKEXZUAEDjxo3RsWNHdoSoypFlmTmUSKeYQ8nWWNjqnJ7PFFcUzxpHVZFRukEAO0JUNRmhGwQwh1LVxBxKtsbCVsf+/vtvHD9+3BBJuXHjxujUqRMnPVUpiqKgc+fOaNSokdZDuSNJkvDnn3/izJkzWg+FyCFOnz6NY8eOGWJxmDmUqiLmULI1FrY6ZoQzxRXFa/FRVWOUHRUAO0JU9RipGwQwh1LVwxxKtsbCVsdkWUaXLl3QsGFDrYdSJiaTCceOHcPp06e1HgqR3RlpRwUANGrUCJ07d2ZSpipDURTmUCKdYg4le2Bhq2N6v/be7biaRVWJ+d95RESEtgMpB3aEqCoxUjcIYA6lqoU5lOyBha1OnTp1CidOnDDMShYANGzYEF26dGFSpipBURR07drVMN0goLAjdPz4cfz9999aD4XIrphDifSNOZTsgYWtThlxJQvgahZVHUbrBgH//D7hF2dydoqiwMXFhTmUSKeYQ8keWNjqlCzL6Nq1Kxo0aKD1UMrFZDLhxIkTOHXqlNZDIbKbv/76CydPnjRUNwgo7Ah17dqVSZmcnrkbxBxKpD/MoWQvLGx1yijX3rudeTXLfEZnImcUGxtryG4QUNgRYlImZ2e0c1SYMYdSVcAcSvbCwlaHUlNTkZqaasik3KBBA3Tt2pVbqcipmXdUeHt7az2UcpMkiR0hcmrmbhBzKJE+MYeSvbCw1SGjHhtkZjKZuJpFTs2oOyqAwjOvuri4cI6S02IOJdI35lCyFxa2OqQoCu6++25DrmQBhatZJ0+exF9//aX1UIhszsg7KgDA29ubHSFyarIsM4cS6RRzKNkTC1udEUIY8kxxRUVERHA1i5yW0btBADtC5NyM3A0CmEPJuTGHkj2xsNWZ1NRUnDp1ytBJ2dvbG3fffTcnPTklRVHQrVs3eHl5aT2UCpMkSV01J3Imqamp+Ouvvwy9OMwcSs6MOZTsiYWtzphXssLDw7UeSqXwWnzkjJxhRwXAjhA5L1mWmUOJdIo5lOyNha3OyLKM7t27G3olCyjcpvHXX39xNYucijPsqAAALy8vdOvWjUmZnI6iKMyhRDrFHEr2xsJWR4QQhr323u3Cw8Ph4uLCFWdyKrIsw9XV1fDdIOCfjpAQQuuhENmEs3SDAOZQck7MoWRvLGx15MSJE/j7778Nv5IFFK5mde/enatZ5FTM3aD69etrPZRKM5lMOHXqFDtC5DROnjzJHEqkY8yhZG8sbHVEURS4uroiLCxM66HYhCRJUBSFq1nkFJxpRwVQ2BFydXXlF2dyGuYc6gzdIIA5lJwLcyg5AgtbHTEfX+sMK1nAP6tZJ0+e1HooRJXmTDsqAKB+/fro3r07tzqS05BlGT169EC9evW0HopNMIeSM2EOJUdgYasT5pUsZ5nwABAWFgZXV1dOenIKzrajAuAxQuQ8nK0bBDCHknNhDiVHYGGrE8ePH8eZM2ecKimbV7O4TYOcgbN1g4DCpHz69GmcOHFC66EQVcrx48dx+vRp5lAinWIOJUdgYasTznSmuKJMJhOPESLDc8YdFQCPESLn4WzH15oxh5IzYA4lR2FhqxOKoqBnz56oW7eu1kOxKfNq1vHjx7UeClGFHTt2zOl2VABAvXr10KNHD251JMOTZZk5lEinmEPJUVjY6oAzXXvvdlzNImegKArc3Nyc6tggM3aEyOictRsEMIeSc2AOJUdhYasDf/75J86dO+eUSblu3bro2bMnkzIZmrPuqAAKO0JnzpxhR4gM69ixYzh79qxTLg4zh5IzYA4lR2FhqwPOvJIF8KxxZGzOvKMCKDzzqpubG7dSkWHJsswcSqRTzKHkSCxsdUCWZQQGBqJOnTpaD8UuTCYTzp49i2PHjmk9FKJyc+YdFQA7QmR8iqIwhxLpFHMoORILW40547X3bsfVLDIyczcoNDRU66HYDTtCZFTO3g0CmEPJ2JhDyZFY2GrsyJEjOH/+vFMn5Tp16iAwMJCrWWRIiqKgV69eTtsNAgo7QufOncOff/6p9VCIyuXo0aM4f/6803aDAOZQMjbmUHIkFrYac/bja824mkVGVBW6QQAQGhrKjhAZkizLqFatmlN3gwDmUDIm5lByNBa2GpNlGb169ULt2rW1HopdmUwmnD9/HkePHtV6KERlduTIEVy4cMGpu0FAYUeoV69e7AiR4Zi7QcyhRPrDHEqOxsJWQ8587b3bmVezOOnJSBRFQbVq1RASEqL1UOxOkiRei48MpSqco8KMOZSMiDmUHI2FrYYOHz6MixcvVomkXLt2bfTq1YvbNMhQqsqOCqAwKZ8/fx5HjhzReihEZXL48GFcuHCBOZRIp5hDydFY2GqoqhwbZGYymbiaRYZRlXZUAIUdoWrVqrEjRIZh7gYxhxLpD3MoaYGFrYYURUHv3r1Rq1YtrYfiEJIk4cKFCzh8+LDWQyG6o5SUlCqzowJgR4iMR5Zl5lAinWIOJS2wsNVIVTo2yIyrWWQkiqKgevXqVeLYIDN2hMgoqlo3CGAOJWNhDiUtsLDVyKFDh3Dp0qUqlZRr1aqF3r17MymTIVS1HRVAYUfo4sWL7AiR7qWkpODSpUtVanGYOZSMhDmUtMDCViNVcSUL4FnjyBiq4o4KAAgJCUH16tW5lYp0T5Zl5lAinWIOZQ7VCgtbjciyjD59+sDT01ProTiUyWTCxYsXkZKSovVQiEpUFXdUAOwIkXEoisIcSqRTzKGK1kOpsljYaqCgoACxsbFVbiUL4GoWGYO5GxQcHKz1UByOHSHSu4KCgirZDQKYQ8kYmEOZQ7XCwlYDBw8exOXLl6tkUvb09ESfPn24mkW6pigKgoKCqlw3CCjsCF26dAmHDh3SeihEVh06dAiXL1+uct0ggDmUjIE5lDlUKyxsNaAoCmrUqFElV7KAf1azCgoKtB4KUTFVuRsEAMHBwewIka7JsowaNWogKChI66FogjmU9Iw5lDlUSyxsNVBVj681kyQJly9f5moW6dLBgwdx5cqVKpuU2REivauqx9eaMYeSnjGHModqiYWtg5mPr62KW6jMgoODUaNGDU560qWqvqMCKNxKFRsby44Q6Q5zKHMo6RtzKHOolljYOtiBAwdw9erVKruSBfyzmsVtGqRHsiwjKCgINWvW1HoomjF3hA4ePKj1UIgsHDhwoEp3gwDmUNI35lDmUC2xsHUwWZbh7u5epVeyAK5mkT6xG1SIHSHSK0VRmEPBHEr6xBxaiDlUOyxsHcx8pjgPDw+th6IpSZJw5coVHDhwQOuhEKmSk5Or/I4KAKhZsyaCgoLYESLdMXeDmEOZQ0l/mEMLMYdqh4WtA1Xl69feLjg4GO7u7lzNIl0xd4Oq6tlWi2JHiPSG3aB/MIeSHjGH/oM5VBssbB0oKSkJaWlpTMoAPDw8uJpFuiPLMoKDg6t8Nwgo7AhdvXoVycnJWg+FCMA/OZSLw8yhpE/Mof9gDtUGC1sHMq9k9enTR+uh6IIkSVzNIt0oKCjA1q1b+aX5/wUFBbEjRLrCHGqJOZT0hDnUEnOoNljYOpAsywgJCeFK1v8zmUxIS0vjahbpAndUWPLw8EBwcDCTMumGoijMoUUwh5KeMIdaYg7VBgtbB8nPz+dK1m369OkDd3d3bqUiXZBlGR4eHuwGFcGOEOlFfn4+z1FxG+ZQ0hPm0OKYQx2Pha2D7N+/H+np6UzKRXh4eCAkJISrWaQL5m6Qu7u71kPRDXNHKCkpSeuhUBWXlJSE9PR0doOKYA4lPWEOLY451PFY2DqIoihcybLCvJqVn5+v9VCoCmM3yLrevXvDw8ODHSHSnLkb1Lt3b62HoivMoaQHzKHWMYc6HgtbBzEfX8uVLEuSJCE9PZ2rWaSp/fv349q1a0zKt+ExQqQX7AZZxxxKesAcah1zqOOxsHUA8/G13EJVXJ8+fbiaRZqTZRk1a9ZkN8gK87X42BEirTCHlow5lPSAObRkzKGOxcLWAfbt24fr169zJcsKd3d3HiNEmmM3qGSSJOHatWvYv3+/1kOhKmrfvn3sBpWAOZT0gDm0ZMyhjsXC1gG4klU6k8mErVu3cjWLNMFuUOl69+6NmjVr8oszaUZRFObQUjCHkpaYQ0vHHOpYLGwdQFEUhIaGokaNGloPRZfMq1n79u3TeihUBf3xxx/cUVEKc0eIWx1JK7IsM4eWgjmUtMQcWjrmUMdiYWtneXl5vH7tHXA1i7SkKAo8PT3Rq1cvrYeiW+wIkVby8vKwbds2doNKwRxKWmIOvTPmUMdhYWtnf/zxB27cuMGkXIoaNWogNDSUq1mkCXaD7kySJFy/fh1//PGH1kOhKobdoDtjDiUtMYfeGXOo47CwtTPzSlZgYKDWQ9E1SZKwbds25OXlaT0UqkLM3SB+aS5dr1694OnpyY4QORxzaNkwh5IWmEPLhjnUcVjY2pksywgLC+NK1h2YTCZcv36dxwiRQ3FHRdmYO0JMyuRoiqIwh5YBcyhpgTm0bJhDHYeFrR1xJavsAgMD4enpya1U5FCyLKNWrVrsBpWBJEnYunUrO0LkMMyhZcccSlpgDi075lDHYGFrRwkJCcjIyGBSLoMaNWogLCyMq1nkUOZuUPXq1bUeiu6ZTCbcuHGDxwiRwyQmJrIbVEbMoaQF5tCyYw51DBa2dqQoCleyyoHHCJEj5ebmshtUDuwIkaOZu0E9e/bUeiiGwBxKjsQcWj7MoY7BwtaOzMfXciWrbCRJwo0bN5CYmKj1UKgKSExM5I6KcqhevTo7QuRQ7AaVD3MoORJzaPkwhzoGC1s7yc3NRVxcHLdQlUNgYCBq1arF1SxyCFmWUbt2bXaDysFkMmHbtm3Izc3Veijk5MzdIObQsmMOJUdiDi0/5lD7Y2FrJwkJCbh58yZXssqBq1nkSOwGlZ8kScjIyGBHiOyOObT8mEPJkZhDy4851P5Y2NoJV7IqxmQyIS4ujqtZZFfcUVExPXv2RO3atfnFmexOURTm0ApgDiVHYA6tGOZQ+2NhayeKoiA8PBzVqlXTeiiGYl7NSkhI0Hoo5MT27t3LblAFmDtC3OpI9ibLMnNoBTCHkiMwh1YMc6j9sbC1g5ycHMTFxXHCV0CPHj24mkV2pygK6tSpgx49emg9FMORJIkdIbIrczeIObT8mEPJEZhDK4451L5Y2NrB3r17kZmZyS0aFVC9enWEh4dzNYvsit2gijOZTLh58yb27t2r9VDISe3Zs4c5tIKYQ8kRmEMrjjnUvljY2oF5Jat79+5aD8WQuJpF9pSTk4Pt27ezG1RBPXr0QJ06ddgRIrthDq0c5lCyJ+bQymEOtS8WtnYgyzIiIiK4klVBJpMJmZmZ2LNnj9ZDISfEblDlVKtWjR0hsivm0MphDiV7Yg6tHOZQ+2Jha2Ncyaq87t27czWL7EZRFNStWxfdunXTeiiGJUkStm/fjpycHK2HQk6GObTymEPJnphDK4851H5Y2NrY7t27cevWLSblSqhWrRoiIiKYlMkuFEVhN6iSzB0hHiNEtrZnzx7cunWL3aBKYA4le2IOrTzmUPthYWtj5pUsHhtUOVzNInvIzs5mN8gGunXrhrp163IrFdmcLMvsBtkAcyjZA3OobTCH2g8LWxszHxvk5uam9VAMTZIkHiNENmfuBjEpV475GCF2hMjWzN0g5tDKYQ4le2AOtQ3mUPthYWtD2dnZ2LFjB7dQ2UD37t25mkU2J8sy6tWrx26QDZhMJmzfvh3Z2dlaD4WchLkbxBxaecyhZA/MobbDHGofLGxtaPfu3cjKyuJKlg24ubnxGCGyOXaDbEeSJNy6dYsdIbIZ5lDbYQ4le2AOtR3mUPtgYWtDsiyjfv36uPvuu7UeilPgahbZEndU2Fa3bt1Qr149doTIZphDbYs5lGyJOdS2mEPtg4WtDXEly7YkSUJWVhZ2796t9VDICezatYvdIBtiR4hsjTnUtphDyZaYQ22LOdQ+WNjaSFZWFnbs2MEJb0N333036tevz0lPNqEoCurXr4+uXbtqPRSnIUkSduzYwY4QVVpWVhZ27tzJHGpDzKFkS8yhtsccanssbG1k165dyM7O5hYNGzKvZnGbBtmCLMuIjIxkN8iGTCYTsrKysGvXLq2HQgZn7gYxh9oOcyjZEnOo7TGH2h4LWxtRFAVeXl5cybIxSZKwc+dOZGVlaT0UMjB2g+yja9eu7AiRTTCH2gdzKNkCc6h9MIfaHgtbGzGvZLm68kdqS1zNIluIj4/njgo7cHNzQ2RkJDtCVGnMofbBHEq2wBxqH8yhtscMYgNZWVmIj4/nSpYddO3aFV5eXlzNokpRFAXe3t7o0qWL1kNxOuwIUWUxh9oPcyjZAnOo/TCH2hYLWxvYuXMnsrOzmZTtwNXVFZGRkUzKVCmKorAbZCcmkwnZ2dnsCFGFsRtkP8yhZAvMofbDHGpb/BdqA1zJsi+uZlFl3Lp1i8cG2VGXLl3g5eXFrVRUYbIsw9vbG507d9Z6KE6JOZQqgznUvphDbYuFrQ3w2CD7kiQJ2dnZiI+P13ooZEDx8fHIyclhUrYTdoSostgNsi/mUKoM5lD7Yg61LWaRSsrMzMSuXbu4hcqOunTpAm9vb65mUYXIsowGDRqwG2RHJpMJO3fuxK1bt7QeChnMrVu3EB8fzxxqR8yhVBnMofbHHGo7LGwriStZ9sfVLKoMdoPsT5Ik5OTksCNE5bZz507mUDtjDqXKYA61P+ZQ2+G/0kqSZRkNGzZEp06dtB6KUzOZTIiPj+dqFpVLZmYmu0EO0LlzZzRo0IAdISo35lDHYA6limAOdQzmUNthYVtJXMlyDPNq1s6dO7UeChnIzp07kZuby26QnbEjRBXFHOoYzKFUEcyhjsEcajvMJJVgPr6WE97+OnXqhAYNGnDSU7koioKGDRuiY8eOWg/F6UmShF27diEzM1ProZBBMIc6DnMoVQRzqOMwh9oGC9tK2LFjB3Jzc7lFwwFcXV0hSRK3aVC5yLIMSZLYDXIAk8nEjhCVC3Oo4zCHUkUwhzoOc6ht8F9qJSiKgkaNGnEly0G4mkXlcfPmTezevZvdIAfp2LEjGjZsyI4QlRlzqGMxh1J5MIc6FnOobbCwrQTzSpaLi4vWQ6kSTCYTcnNzsWPHDq2HQgbAbpBjsSNE5cUc6ljMoVQezKGOxRxqGyxsK4grWY7H1SwqD3M3qEOHDloPpcqQJAm7d+/GzZs3tR4K6RxzqOMxh1J5MIc6HnNo5bGwraDt27cjLy+PSdmBXFxcuJpFZcZukONJksSOEJUJc6jjMYdSeTCHOh5zaOWxsK0gRVHQuHFjrmQ5mMlk4moW3VFGRgb27NnDLVQO1rFjRzRq1IgdIboj5lBtMIdSWTCHaoM5tPJY2FYQV7K0IUkS8vLyuJpFpdqxYwe7QRowd4SYlOlOFEVhDtUAcyiVBXOoNphDK4+FbQVwJUs7HTp0QOPGjbmVikolyzKaNGmC9u3baz2UKsfcEcrIyNB6KKRTzKHaYQ6lsmAO1Q5zaOWwsK2A7du3Iz8/nytZGuBqFpUFu0HaYUeI7oTH12qHOZTKgjlUO8yhlcPCtgJkWUbTpk3Rrl07rYdSJZlMJuzZs4erWWTVjRs32A3SUPv27dGkSRN2hKhEzKHaYg6l0jCHaos5tHJY2FYAV7K0ZV7N2r59u9ZDIR3ijgptsSNEd8Icqi3mUCoNc6i2mEMrh4VtOd24cQN79+7lhNdQu3bt0LRpU65mkVXmblBAQIDWQ6myJEnCnj17cOPGDa2HQjrDHKo95lAqDXOo9phDK46FbTnFxcUhPz+fWzQ0xNUsKo2iKDCZTOwGachkMiE/P58dISqGOVR7zKFUGuZQ7TGHVhwL23JSFAXNmjVD27ZttR5KlSZJEvbu3cvVLLJw/fp1JCQksBuksYCAADRt2pRfnKkY5lB9YA4la5hD9YE5tOJY2JaTLMtcydIB82pWXFyc1kMhHWE3SB9cXFxgMpm41ZGKYQ7VB+ZQsoY5VB+YQyuOhW05cCVLP9q2bYtmzZpxNYssKIqC5s2bw9/fX+uhVHmSJCEhIQHXr1/XeiikE8yh+sEcStYwh+oHc2jFsLAth23btqGgoIBJWQfMxwhxNYuKkmWZZ1vVCUmS2BEiC8yh+sEcStYwh+oHc2jFsLAtB0VRcNddd3ElSydMJhNXs0h17do1JCYmcguVTrRt2xbNmzdnR4hUzKH6whxKRTGH6gtzaMWwsC0HrmTpiyRJKCgowLZt27QeCukAu0H6wo4Q3Y45VF+YQ6ko5lB9YQ6tGBa2ZZSeno4//viDK1k64u/vj7vuuourWQSgsBvUokUL+Pn5aT0U+n8mkwmJiYm4du2a1kMhjTGH6g9zKBXFHKo/zKHlx8K2jOLi4riSpTO8Fh8VpSgKu0E6Y+4I8RghYg7VH+ZQKoo5VH+YQ8uPhe0d/PXXX9i3bx9kWUaLFi3Qpk0brYdERZhXsy5fvowNGzZoPRzSwIYNG3Dp0iV2g3TIz88PLVq0gCzL2LdvH06dOqX1kMjBiubQli1bMofqDHMoMYfqF3No+bGwvYNFixZhxIgRUBQFkZGR+Pzzz7klQCc2bNiAJk2aoKCgAG+88QYGDhyI7OxsrYdFDpSdnY2BAwdi4cKFKCgoQJMmTfjlTCeuXbuGzz//HBEREVAUBcOHD8eiRYu0HhY5WNEcGhERwRyqI8yhxByqX8yhFcPC9g66dOmCY8eOITExEWfPnsW0adNw4cIFrYdFAFauXInx48ejSZMm+P3339GuXTu4u7trPSxyIHd3dwQEBOD3339H06ZNMW7cOKxcuVLrYRGACxcuYNq0aTh37hwSExNx/PhxdOnSRethkYMxh+oXcygxh+oXc2jFsLC9g6CgIPXPsizjk08+QUBAgIYjIrP3338fTZs2RWZmJg4fPmwRK6o6goKCcPjwYWRkZKBp06Z4//33tR4SAQgICMDHH38MWZYhhAAAztEqiDlUv5hDCWAO1Svm0IphYXsHPj4+8PT0BAA899xzmDx5ssYjIrP69evjl19+AVC4nebuu+/WeESkhbvvvhvZ2dlwdXXFL7/8gvr162s9JPp/U6ZMwcyZMwEAtWrVQqtWrTQeETkac6h+MYcSwByqZ8yh5ecizMsAVKLw8HDcunULu3fvhqsr1wL0Zt26dRg5ciS2bduGnj17aj0ccrCEhASEh4fj+++/x8CBA7UeDt2moKAAvXr1gqenJ6+XWUUxh+obc2jVxhyqb8yh5cPCloiIiIiIiAyNS6dERERERERkaCxsiYiIiIiIyNCq2eqFTp06hcuXL9vq5aiSGjZsWOpB5oyXczl37hwAoFmzZhqPhGyB8XQ+2dnZvJSKEymaY5lPjcscR8bQuTCHOp871TVmNilsT506hQ4dOiAzM9MWL0c24OnpiZSUFKv/CBgv5+Pq6oqCggKth0E2wng6Hzc3N+Tn52s9DLIRc44FwHxqYJ6enti8eTNiYmIYQyfCHOp8SqtrirJJYXv58mVkZmZixYoV6NChgy1ekiohJSUFDz30EC5fvmz1HwDj5VzM8WY8nQPj6XzWr1+PV155hTF1EkVzLADmU4Myx/HEiROMoRNhDnU+d6prirLZVmSgcNWyR48etnxJsiPGy7kwns6F8XQeRTt7jKlzYmyNjzF0Loxn1cSTRxEREREREZGhVYnCdu7cuVixYoXWwygTIQSeffZZhIeHIyYmBqdPny72mPT0dAwZMgTh4eGYMGECcnJyNBip/RgpXkePHkWPHj1Qu3ZtxMXFqbfPnTsXffr0QWhoKJ588klYu1x0UlISwsLCEBISgnfeeQdA4fHPkiSp/1WvXh1paWnYuXMnQkJCEBkZiaioKJw4ccJhn7GynCGeZZlzw4YNQ2RkJAIDA/Hvf//b4r4rV67Ay8tL/TmkpqbCy8tLjfPPP/9s3w9mQ1U5nhcuXEBISAgkSUKfPn3w+++/Wzxny5YtcHFxsfp7W6+cIZ5Hjx6FJEkwmUx47rnnrD63devW6nybN28egMJ8O3nyZEREROCee+7BmTNnAADz5s1TH+vr64v/+Z//sf+HsxMjxRcAvvnmG0RHR8NkMuG9994rdn9Jsf7555/Rp08fhIeH45tvvgEA7N69W41jUFAQGjRo4LDPYUtGimFJc9Ts1Vdfhb+/v9XnSpKE4OBgSJKEadOmASicozNmzEBwcDB69eql/hwWLVqkxrZ9+/YYNmyY/T6UjRkpnmYl5bYlS5agevXqVp8zZcoUBAUFISgoCAsXLlRvHzRoEEJDQ9GnTx98+eWX6u3m77i9evXCypUrKzxWQxe2jjoRR9H3EUJYLVJKe055/Pbbb7h8+TK2bduG559/HrNmzSr2mDfffBNDhgzBtm3b0Lx5c3z11VcVei9Hc8Z4tWjRAr///juGDx9ucfuYMWOwa9cubN++HefPn8eWLVuKPXf69On44osvEBcXhzVr1uD48eNo1aoVFEWBoihYsGAB+vbtCy8vL/j4+OC3335DbGwsZs6ciTlz5lRovLZUleJZljm3cuVKxMbGIj4+Hh9//DFu3Lih3jd//nyEhYVZPL5nz55qrAcPHlyh8doS42nJWjwbNmyIbdu2QVEUrFy5Ei+++KL6+IKCArz99tsIDAys0FhtrSrF8/nnn8fChQshyzLS0tIgy3Kx57q5uanz7dVXXwUArFmzBm5ubti6dStmz56Nl19+GUDhl2/zYwMCAvDggw9WaLz25IzxTUlJwdq1a/Hbb79BlmU89dRTxR5jLdYFBQV47rnnsHnzZmzZsgXvvvsubty4gd69e6txfPLJJ3UXR2eMYUlzFADOnDmDP//8s9Tnf//991AUBR9//DEA4ODBgzh48CB27txpMXenTJmixjYiIkIXsXXGeAIl57bMzEz89NNPJR7zOnPmTMTHx2PHjh3qd1wAePfdd7F9+3bExsbiX//6F7KysgAAiqIgNjYWv//+u/q7uCLsVtimpqYiNDQUJpMJkiQhLS0NFy5cQHR0NPr164dp06YhJiYGADBhwgR1ZUdRFEyaNAkA8N577yEqKgqBgYGYPXu2+to+Pj6YPn06+vXrh2vXrmHkyJGIioqCyWTC0aNHAQCrVq1Ct27dMHjwYCQkJJQ4ztzcXEyePBlRUVEICwvDzp071TE9/vjjuO+++7Bx40b4+/tj1qxZiI6OxunTpzFq1ChERkYiNDRUff3bn1MRsixj6NChAIC+ffti9+7dpT7m/vvvt5rEy4vxqli8PD094eXlVez2gIAA9c/u7u5wc3OzuD87OxvXr19H27Zt4erqikGDBiE2NtbiMcuWLcO4ceMAAM2bN0etWrVKfL3bMZ62jWdZ5lyNGjUAFP6yb9WqFTw9PQEAx44dw5UrV9CzZ0+Lx+/fvx/h4eF46KGHcOnSpVLHxXjqI55ubm7q3EtPT0fXrl3Vx69YsQKDBw9W52lpGE/bxvPo0aPql67AwECr8RRCwGQyoX///khMTCzT886ePYvTp0+jd+/e5Ron41ux+H7//feoV68e7rnnHgwcOBBHjhwp9hhrMbt8+TIaNWqEOnXqoHr16mjTpg327Nlj8byi+bQsGEPbzlGgsFNZ9OdwOxcXF4waNQomkwmbN28GUPjdp0aNGsjNzcWNGzfg7e1t8ZysrCxs2rTpjovDjGfF4gmUnNvefvttPPHEE3BxcbH6PPP3YFdXV1SrVk3Nnebba9SoAVdXV/X55px748YNdOrUqcLjhbCBhIQEAUAkJCSoty1ZskTMmTNH/XtBQYF46qmnxIoVK9T7o6OjhRBCPPzww2Lbtm1CCCFkWRaPPvqoEEKIjIwM9blBQUEiNTVVCCFEtWrVxMmTJ4UQQrzwwgti5cqVQgghDhw4IIYMGSLy8/NFQECASE9PF/n5+SIyMlIsX77c6tg/+eQT8cYbbwghhLh48aIICgpSxzR//nz1cT4+PiIuLk4IIcR//vMf9bMdPnxY9OnTx+pzinr88cdFZGSkxX8DBw4s9rjJkycLWZbVv7dt27bYYwICAkRBQYEQQoijR4+KAQMGWNxvLR53up/xslTWeJkV/ZkUJcuykCRJ5OfnW9x+5swZERkZqf590aJF4s0331T/np2dLVq1aiUyMzMtnpeRkSGCg4PFvn371NsYT/vH805zzmzw4MGiUaNG4tVXX1VvGz16tDh27JiYM2eO+nPIysoS169fF0IUxmL8+PHq4xlPfcfzxIkTIjQ0VDRs2FCsXbtWCCFEZmamiI6OFrm5uSIyMlL8/fffFq+zYsUKi5gynpYqG88RI0aItWvXioKCAjF06FAxffr0Ys+5dOmSEEKI5ORk0aFDByGEEL/88osYPny4KCgoEKtWrRK1atWyeM6bb74p/vWvfxV7raJzlPPVdvGdMmWKuP/++0V+fr7YvXu3RY40sxZr82c+ffq0SE9PF61atRLff/+9+pxz586Jdu3aFXstc+xun59CMIa3q+wc3b9/v5g0aZIQQgg/Pz+rzzHP0dOnT4t27dqJ9PR0UVBQIB5//HHh6+srGjVqJH766SeL53z33Xfqz9uMc9J28Swpt507d04MHjxYCFFyPM2WL18uRo8eXez2+fPni5deesnivcLDw4W3t7dYtGiRxWPvVNcUZdOzIhc1cuRILFiwAGPHjoWPjw/mzp2LI0eO4IknngBQuJf666+/BgCLal8Uaan/+OOPWLx4MVxcXHDy5EmcPn0aPj4+aNGiBXx9fQEAycnJiI2Nxaeffqq+1qVLl9C4cWPUq1cPABAUFFTiOJOTk7Fjxw78+uuvAApX4c2Kbh10c3NDSEgIAODw4cPqfv527drhypUrVp9TlHlbxZ00aNAAaWlp6s+iWrXiIfL29kZ6ejq8vLyQnp5uk+NGGC9LZY1XaRITE/HSSy9h3bp1cHW13BxhjqHZ7XFcu3YtoqKiULNmTfW27OxsDBs2DC+99BLuvvvuUt+b8bRU2XiWdc6tWbMGN2/eVLdGmR/r5+dn8Th3d3e4u7sDAMaOHYt333231PdnPC1pFc+OHTuidevWiIuLw4kTJxAVFYVBgwbhP//5D6ZOnWr197U1jKelysbznXfewYwZM/Dee++hTZs2aN68ebHHNGzYEADQuXNn1K9fH5cuXcKAAQOwY8cOSJKEXr16oX379hbPWbFiBdasWVPu8TC+lsoaX29vb3Tv3h2urq7o1auXesxzUdZi7erqis8++wwPPfQQ6tSpg27duln8G/jqq68wevToMo3BjDG0VNk5+uqrr+LDDz8s9THmOXrXXXehR48eOHr0KK5evYozZ87g2LFjuHbtGsLCwjBgwAA1fy5btgwzZ8684/sznpbKGs+Sctuduu9mGzZswLJly4qdR2Tx4sU4ePCgxbHGNWvWxNatW3H58mX06tULI0eOVH9m5WG3wtbV1RULFiwAAEycOBEbN25EQEAAdu3aBT8/P8THx6uP9fb2xqlTpwDAYvvIK6+8gsOHD8Pd3R2hoaHqP7Ci2zA7deqE4OBgdVtZTk4O3NzccOHCBVy/fh116tTB7t270blzZ6vj7NSpE/z9/fHMM8+ozzcr+j4uLi7qP/b27dtj27ZtiImJwZEjRyy+FJW0RXTatGk4dOiQxW21a9fGunXrLG6TJAnffPMNhg4dii1btlg9Xst8spmHH34YP//8MyRJsvqe5cF4WSprvEqSkpKCKVOmYPXq1Va/NHt4eKBOnTo4ceIEWrdujfXr1+Pzzz9X71++fDmefPJJ9e95eXkYNWoURo8ejfvuu++O7894WqpsPO805woKCpCfn4/q1aujZs2a6n+bN29GUlIS7rnnHhw7dgy1atWCn58fOnbsqP7ClmXZYuu6NYynJa3imZ2drX6hqlu3LmrXrg2g8Diw2NhYLF68GElJSRg3bhzWrVtX4rZkxtNSZePZsmVLrFmzBkIIjB8/Xv28ZtnZ2RBCwMPDA+fOncOlS5fUcc2fPx8AsHHjRnUrHADs27cP9erVU7+wlgfja6ms8Y2OjlZP/HTixIli206BkmNtPpHQjRs3MGzYMPTq1Ut9zooVK/DDDz9YHVtJGENLlZ2jx48fV7f0njt3DtOnT8dHH32k3i+EwI0bN1C3bl1kZGRg//798PX1xdWrV+Ht7Q03NzfUqVMHubm56vGily5dQkpKCiIiIu74/oynpbLGs6TcduzYMbzyyisACuM5fPjwYnNs69atmD9/PtavXw8PDw/19m+//RarVq3C6tWr1aZPTk4OqlWrBldXV9SqVQseHh4WzykPuxW269atwwcffAA3Nze4u7sjLCwMgYGBGDNmDL744guLoE6aNAljxozB119/jdatW6u3P/DAAwgNDUX79u3VLxC3mzVrFqZOnYoPPvgAANC/f3+88MILeOONNxAREYGWLVta/eVoNnnyZMyYMQMmkwkA0L179zt2TyZPnowJEyYgIiICeXl56nuXpqyrI/369cOGDRsQHh4Od3d3fPHFFwCAX3/9FZcuXcK4cePw/PPP4+GHH8aSJUvg6+ur/uOqDMbLUlnjlZaWhhEjRuDQoUM4ePAg+vfvj/nz5+Pxxx/H9evX8dBDDwEAnn32WQwePBgLFy7EwIED0aVLF7z//vsYP348CgoKMHToUPVMgVeuXEFSUpLFl+0VK1bg999/R1paGr744gt07Nix1DEynpYqG8+S5pw5nr6+vuqCQ3Z2NkaNGoXWrVvjySefVBco5s6dC39/fwQHB2P16tWYN28e6tSpA3d3dyxatKjUcTGelrSKZ1xcHF5++WW4ubkhNzdXPWtr0VVnSZKwfPnyUo+1ZTwtVTaeX3/9tbowOGHCBHTo0AEA8PTTT2PWrFnIysrCkCFDUKtWLeTl5eGTTz6Bq6sr0tLSMHToULi5ucHHx8eio7R8+XL193d5Mb6Wyhrf6OhobNq0CZIkIScnR33tot9/Sor1888/jz179qBatWpYuHCheqbW5ORkeHp6Fts1cyeMoaXKztHk5GT1Mf7+/mpRa/6d2759e5hMJtSsWRM5OTmYPXs2GjVqhJiYGKxcuRKhoaHIycnBE088oZ6/4ptvvsHIkSNLPMazKMbTUlnjWVJuMx8DDRTG01zULl26FHfddRf69u2L8ePHo27duhgyZAiAwpM2duvWDePGjUO3bt3Qt29fAIVd95ycHEycOBFubm7Izs7GnDlz1EXkcrvjZuUyKM/eZ7OTJ0+q+9nJtipyjO2dMF76xXg6F8bT+Vg7hq80jKe+3ekY2zthfPWhtGNs74Qx1C/OSeeji2Ns9Wj8+PHq9gKgcLvBTz/9pOGIqDSMl3NhPJ0L4+lcGE/nxvgaH2PoXBhP+9CssPX19bVoZTvCsmXLHPp+zoTxci6Mp3NhPJ0L4+ncGF/jYwydC+PpPOx2HVsjMR/baG+fffYZevfujYiICIwePRrZ2dkOeV9n5qjYxcXFoUuXLvDw8MDp06fV22/duoWpU6ciJiYGkiSp192TJAnBwcGQJAnTpk1zyBidjaNiCwD//ve/ERMTA5PJhG+//RZA4ckVzCckadq0aZmOW6GSOSqeS5cuRevWrdXYmVfE//77b8TExCA8PLxMZ9GkO3PkHAWAJUuWqMdOAsDrr7+OiIgIhIaGYvz48cjNzXXoeJyZ1rGlytP6u+0PP/yADh06VPgkQFQyrWOrZyxsHSg6Ohrx8fHYunUrWrZsaXFQNulbly5dsHPnzmKnaZ83bx4GDx6MzZs3Q1EUtGvXTr3v+++/h6IoNrl0ENnPxo0bcf78eWzevBmyLOPBBx8EUHhyBUVRoCgKvL29MXz4cI1HSmX16KOPqrFr1aoVAOCFF17Ayy+/jG3btuHs2bOQZVnjUVJ5ZGZm4qefflLjCQDPPfcctm7diu3btwMANm3apNXwqBKsxZaMo6TvtpIk4Y8//kCLFi00HiFVlBHrFl0XtqmpqQgNDYXJZIIkSUhLS8PWrVthMpkQHh6OwYMH49atWwAKJ9AzzzyD/v37Q5IkfP311+jfvz+6deuGo0ePqo+ZPn06+vbti+joaFy8eNHi/XJzczF58mRERUUhLCwMO3fuBFB4OYDevXsjKirqjmcnK42/v796amt3d/cST8PtDJwtdvXq1bN6FrxNmzZBlmVIkoRnn30WeXl5AApPxT5q1CiYTCaHb2+xN2eL7bfffov8/HzExMRgxIgROH/+vMX98fHxaNmyJZo1a1bh99AzZ4snULjFKywsDLNmzUJBQQGAwutKR0VFAQDuv/9+py5snTGmb7/9Np544gmLM6CaL89TUFCAvLw8h3cZtVBVYuvMnC2GJX23bdiwYZXr1laV2Oqao89WVR5LliwRc+bMUf9eUFAgMjIy1L8///zzYunSpUIIISIjI8WqVauEEEI8+uij4umnnxZCCLF8+XLxwgsvqI/58ssv1deeOXOmEEIIPz8/IYQQn3zyiXjjjTeEEEJcvHhRBAUFCSGEaN++vfq++fn5xcY5dOhQERkZafHfo48+WuLnOnTokOjZs6fFZ7Ele5wVubycNXaRkZHi77//Vv9eo0YN8dNPPwkhhJgxY4ZYsmSJEEKIS5cuCSGEOH36tGjXrp1IT08v/QdWCY6IZ1HOFtt+/fqJJ598UgghxPfffy/GjRtncf+0adPE8uXLy/rjqTTGs3LxvHr1qsjLyxN5eXliwoQJ4r///a8QQoi2bduqj9m0aZOYNm1aeX5MlVKRs65WhrPF9Ny5c2Lw4MEW72n26quvCj8/P3HvvfeKmzdvlvVHVCmVPStyZVSl2NpbZc6KXBnOFkOzkr7bahVXR8WzqKoWW0dxmrMijxw5EgsWLMDYsWPh4+ODuXPn4uDBg5g9ezays7Nx4cIF1K1bV318z549AQAtWrRQr1nWokULxMbGqo8JCQlR/79q1SqL90tOTsaOHTvw66+/AgDS09MBAB9++CGmT5+OvLw8TJ06FWFhYRbPK89ZzFJTU/Hwww/ju+++K/U6h0bnjLGzxtvbG/feey8AYODAgVi/fj2AwpVKALjrrrvQo0cPHD161OKC8UbmbLEtGsNBgwZh3rx56n05OTn45Zdf8Oabb5bptYzI2eLp5eWl/nn06NFYs2YNHnnkEXXV2fyeRS9i72ycLaZz587F7Nmzrd732muvYe7cuZg+fTqWLl3q9Oc0qEqxdVbOFkOg6ny3vRPGVnu6LmxdXV2xYMECAMDEiROxceNGLF68GK+99hqCg4Px/PPPQwihPr7oNpaify76mPj4ePj7+yM+Pt7ieEgA6NSpE/z9/fHMM88AKPxSCwDBwcGIjo7GqVOnMHToUCQkJFg874EHHsDVq1ctbvP398fixYstbjt//jxGjBiBJUuWoE2bNuX+eRiJs8WuJNHR0di7dy/CwsKwa9cuBAQEQAiBGzduoG7dusjIyMD+/fvh6+tbptczAmeLrTmG99xzjxpDs/Xr1yMiIsIQv8wrytnimZ6ejvr16wMAtmzZor5/9+7dERsbi8jISPz888945JFHyv5DMhhni+mxY8fwyiuvAADOnTuH4cOH44cffkBWVhY8PDzg4uKCevXqwdPTs3w/KAOqKrF1Zs4Ww6r03fZOGFvt6bqwXbduHT744AO4ubnB3d0dYWFhyMjIwKOPPor27dujbt26FisfZZGYmIgvv/wS+fn5WLlypcV9kydPxowZM2AymQAUfhF69913MXToUGRlZSErKwvTp08v9pplXfl48cUXceHCBTz55JMAgDFjxmDKlCnlGr9ROFvsUlJS8MQTT2D//v0YPXo0HnzwQcyYMQMLFy7EpEmTkJWVhcaNG2PZsmXIy8uDyWRCzZo1kZOTg9mzZ6NRo0bl+qx65myxHT9+PKZOnQqTyQQhhMUv9uXLl+Oxxx4r12cxGmeL51tvvYXNmzejWrVqaNu2rdqBX7hwISZOnIicnBwEBgaq7++MnC2mRc9T4O/vrxY+06ZNw4kTJ5Cfn4+AgACL3RbOqqrE1pk5WwxL+m6rKArmz5+Ps2fPIiYmBo899hhGjBhRrs9lNFUltrrm6L3PWrr9+EhnpYdjbG2tqsSuIowYz6IYW0uMp/Nx9DF8tsaYWtLyGFtbq8qx1eoYW1uryjG0xuhzsijGtlB5YqrrsyITERERERER3YmutyLbmqIoWg+BKoixc16MrXNhPJ0PY+q8GFvjYwydF2Nbfk7TsU1NTUVMTIzD3m/u3Lno0KEDJEmCJEnqAdtJSUkICwtDSEgI3nnnHavPXbFiBYKDgxEcHOzU11IsCy3i1qdPH4SGhuLJJ59UD9CfMmUKgoKCEBQUhIULF1p97l9//YX7778fUVFR6ll0AaBmzZrqv4NFixYBAH799VeEhoZCkiRERUXh77//tv+H0wFHx/OHH35Ahw4dil0r78qVKxgzZgyio6MhSRKuX79ucb8QAjNmzEBwcDB69eqlXnR80aJFaizbt2+PYcOGASj5301VoJeYDho0CKGhoejTpw++/PJLq88t7XfrkSNHUL16dcTFxQEA1qxZgz59+iAyMhIDBw7ElStX7POBdMbR8Xz99dcRERGB0NBQjB8/Hrm5uQDKFk+gcC57eXmpcxQoPClYTEwMTCYTXnrpJQCFXwCbNWumzt/du3fb94PphF7mp1lERAQmTZpU7PYLFy4gJCQEkiShT58++P333wGUPA+XLl2K1q1bq/E8deqU/T6Ujjg6nmavvvqqxXWgb926halTpyImJgaSJOHIkSMWj09PT0d0dDTCwsIQFBSEDRs2WNx/+7zNycnByJEjER4ejt69e+O3336z/4fSIb18592wYQN69eqF8PBwjB49Wv29XJS177aG+D3r6L3P9nLy5EkRHR3tsPebM2eO1WtbhoWFiaNHj4r8/HwRHh4ujh07ZnF/WlqauPvuu8WtW7fEpUuXxN133231GlOVYaRjbB0dtyNHjqh/HjFihNi8ebPF7fn5+SIoKKhY3IQQYsCAAeL06dPFbrd2jbbs7Gz1z0WvPWYPVTmely5dErdu3SoWg3Hjxol9+/aV+Lzk5GQhSZIQQoiMjAzRunXrYo+ZPHmy+Pbbb4UQJf+7sQc9xVMI/cTUHAPzfbdu3bK4/06/W0eNGiViYmLEtm3bhBCFnysnJ0cIIcRHH30kZs+ebbfPpKdj+Bwdz6K/C8eNGyfWrVsnhLhzPM2efvppMWjQIDXfXr58WQwYMEBkZWVZPE6W5VKvw2hLejrGVi/zUwghfvrpJ3HfffdZjYP52tJCCHH8+HERGBgohCh5Hn7xxRfiX//6l70+hhBCn8fYOjqeQghx+vRpMWrUKIuYvvjii+KXX34p8TmZmZnqsZ+XLl0SAQEBFvffPm/Xrl0rJkyYIIQQ4tSpU6JHjx62/hgqredkafTynbdnz54iNTVVCFF4Dd2ff/652HOtzXFH/p4tymmOsZ05cyZ+/PFHAEBeXh66du2K3NxcvPzyy4iKikKPHj3wySefFHvehAkT1FV5RVHU1cMDBw4gJiYGUVFRGDFiBDIzMys1vjfffBNhYWH497//DQDIzs7G9evX0bZtW7i6umLQoEEW16ICgF27diEyMhIeHh5o2LAhmjdvjtTU1EqNQ2/0HLeil3Jxd3eHm5ubxe2urq6oVq2aervZqVOncPPmTfzP//wPIiMjsWTJEvW+8+fPIzIyEvfffz9OnDgBAKhRo4Z6f3p6Orp27VrhMWtNz/Fs2LBhsc5Bfn4+kpKS8OGHHyIyMhKvv/56sec1b94cNWrUQG5uLm7cuAFvb2+L+7OysrBp0yYMHjwYQMn/bozKaDEF/olBjRo14OrqanFpBKD0361bt26Fr68v7rrrLvXxvr6+qF69OgDjx1TP8TT/LiwoKEBeXp7aFbpTPIHCS8FcuXJFvdYjAPzyyy9o1KgR7r//fsTExCA+Pl69b9OmTQgLC8O0adMqnd+1pOd4ljQ/8/Ly8Mknn1g9AysAuLm5qXOsaE4sbR4uW7YMYWFhmDVrFgoKCio8Zq3pOZ6A9WsJb9q0CbIsQ5IkPPvss8jLy7O4v2bNmmjRooX656Lz19q89fPzQ3Z2NoQQSEtLQ+PGjSs1Zj3Rc3xL+u7SqVMnpKenQwiB9PR0q1fusPbdFtD/71ldF7YTJkxQtyht3LgRUVFRqF69OmbNmoUtW7Zg586d+Pe//221hW7NtGnT8N///hdbtmyxaK2b5eTkqO31ov9Zu3i4+dIvmzdvxq+//gpZltWtF2ZeXl7FtreV5TFGp+e4mSmKgtOnTyMiIsLi9hUrVqBly5bFrjt75swZJCQk4M0338TGjRvx+eef488//wRQuLUkNjYWTzzxBCZOnKg+Z9WqVQgMDMQnn3yC4ODgMn1WPTJCPIu6ePEikpKSMHXqVMiyjN27d2PLli0Wj/Hy8oKfnx8CAgLQtWtXzJo1y+L+tWvXIiYmptgXuJL+3RiN0WJa1BtvvIHhw4fD3d3d4vaSfrcKIbBgwQK88MILVl/v/Pnz+PDDD/V/CYNS6D2ec+bMQUBAANLT09GyZUuL+0qKJ1C4PXLOnDkWt505cwYpKSlYtWoVlixZov7O7dmzJ44ePYq4uDg0bNgQ//u//1umz6pHeo+nNZ9++ikeeughq3E0O3nyJMLCwtC/f38MHTrU4r7b5+GQIUOQkpKC2NhYnD17ttTt6nqn53gmJSUBKCx0ijpw4ABCQkKgKApyc3OxbNmyEsfz9NNP49lnn1X/bm3etmnTBpmZmWjfvj369u1b7H4j03N8zW7/7vLQQw/hnnvuQfv27QEAQUFBxZ5j7butEX7P6vrkUZ07d8alS5dw8eJFfPnll+qxNJ988glWr14NNzc3XLx4ERcvXrR4XkkXOT548CDGjx8PoLC7KkmSxfNq1KhR5gO1GzRoAADw8PDAsGHDsHfvXgQHByM9PV19THp6uvq4os9LS0sr9TFGp+e4AYXXBHvppZewbt06uLr+s7azYcMGLFu2DD///HOx53h7e6NTp05o1aoVAECSJCQnJ6Nt27Zo2LAhACA6OtrimqdDhw7F0KFD8c033+Dll1/Gd999V+Yx6one43k7b29vNGnSRF0tvvfee7Fv3z5ERUWpj9m0aRPOnDmDY8eO4dq1awgLC8OAAQPUL2XLli3DzJkzLV63pH83RmS0mJotXrwYBw8etDje0qyk363ffPMNYmJiUL9+/WLPSUtLw7Bhw7Bo0SI0b9680uPTit7j+dprr2Hu3LmYPn06li5dimnTpgEoPZ47duxAgwYN4OfnZ3G7t7c3TCYTPDw84OPjg7p16+Lq1asWuy4eeughPPPMM2Uen97oPZ63u379OlavXo1NmzZh69atJT6udevWiIuLw4kTJxAVFYVBgwYBsD4Piy5SjR49GmvWrMEjjzxS4TFqSc/xfPXVV/Hhhx8Wu93b21s9l8jAgQOxfv16q89/5ZVX4O3trS5IlDRvly5dihYtWmD16tVITU3F0KFD8ccff5RpjHqn5/gC1r+7TJ06FfHx8fDx8cHUqVPx7bff4sEHH7R4nrXvtnXq1FHv1+vvWV0XtgAwduxYfPTRR0hNTUX37t2RlpaGL774AklJScjNzUW7du2KncjF29tbPdHAnj171Ns7d+6MlStXolmzZgCgnvDJLCcnB/369Ss2hrCwMMyfP9/itvT0dNSvXx9CCMiyjNGjR8PDwwN16tTBiRMn0Lp1a6xfvx6ff/65xfP69OmDl156CdnZ2bh58ybOnDlTrDvoDPQat5SUFEyZMgWrV6+2WFDYunUr5s+fj/Xr11vdZuXv74/s7Gxcu3YNdevWxd69ezF27FhkZGSgZs2acHNzw4EDB9QvV1lZWerreHl5wdPTs8w/Oz3SazytcXd3R7t27ZCamgpfX1/s2rVLPQnU7eNzc3NDnTp1kJubi/z8fADApUuXkJKSYtGVLenfjZEZKaYA8O2332LVqlVYvXq11YWFkn63fvbZZ9i7dy82b96M5ORkHD58GF9//TUaN26MIUOG4LXXXkOvXr3KNAY902s8zb8LXVxcUK9ePfV34Z3iuXfvXiQlJeGee+7BsWPHUKtWLfj5+cFkMuHHH3+EEALXrl1DWloavLy8cO3aNdSrVw9A4cml2rVrV94foa7oNZ7WpKSk4Pr16xgwYACuXr2Kc+fO4bPPPrNY6M3OzlYXDuvWrYvatWsDADIyMqzOQ/N3LIDxBOwXz+PHj6tbYM+dO4fp06fjo48+QnR0NPbu3YuwsDDs2rXLYkur2VtvvYWzZ89aHJpV0rwFoG539fLyQkZGRtl+cAah1/iW9N2lWrVq6uJRo0aNLJpyAEr8bmuI37OOPqi3vK5cuSI8PT3F22+/LYQQoqCgQAwfPlwEBQWJiRMniu7du4u///7b4oDsQ4cOiW7duomBAweKGTNmqAc6Jycni379+gmTySRMJpPYsGFDhcf18MMPi6CgINGnTx+LEwMlJiaK0NBQERwcLN5880319jFjxqh//vLLL0VQUJAICgqyy0lo9HDyKL3GLTIyUrRt21ZERkaKyMhIsWbNGiGEED4+PqJLly7q7bt27RJCCPHUU0+JixcvCiGE2LJliwgLCxNBQUFi3rx5Qgghdu3aJbp16ybCw8NFeHi4SExMFEII8f7774vIyEghSZLo37+/epC+PVTleMqyLKKjo0XNmjVFdHS0+O6774QQQiQlJQlJkkRoaKiYOnWqKCgoEEL8Mw/z8vLEww8/LEJCQkRgYKB477331Nd8//33xUsvvWTxPiX9u7EHR534wkgxzc7OFtWrVxe9evVSY/DXX38JIcr3u/Xhhx9WTx41Z84c0ahRI/X1XnvttQqP+U4ccXIavcbzkUceEZGRkSIsLExMnDhR5OTklDmeZrefrPHdd98V4eHhonfv3urJqD766CMRGBgowsPDxZAhQ8SVK1cqPOY7ccTJo/Qaz5J+5xa9v+jJZczx3LZtmwgPD1d/L5vnZ0nz8OWXXxa9e/cWISEh4uGHH7Y4CZmtOPLkUXqNZ1FFTxb0999/i/79+4vIyEgxYsQI9eRu5u9EJ06cEC4uLiIsLEyN3e0xKjpvMzIyxH333SciIiJEYGCgemJGe9Di5FF6jW9J312+++479ffloEGDxI0bN4QQ/8zXkr7bOvL3bFHliamLEJW/bkViYiJ69uyJhIQE9OjRo7IvR5V0p3gwXs6F8XQujKfz+eqrr/DQQw8xpk6i6BwFwPlqUOY4rlixgvPTiTCHOp/yxNTYB4oRERERERFRlcfCloiIiIiIiAyNhS0REREREREZGgtbIiIiIiIiMjSbXu4nJSXFli9HFVTWODBezsEcR8bTOTCezufkyZMAGFNnYS2OjK3x3B4zxtA5MIc6n/LE0iZnRT516hQ6dOiAzMzMyr4U2YinpydSUlLQqlWrYvcxXs7H1dUVBQUFWg+DbITxdD5ubm7qtZLJ+Mw5FgDzqYF5enpi8+bNiImJYQydCHOo8ymtrinKJoUtUFgsXb582RYvRTbQsGHDUoPPeDmXc+fOAYB6QW8yNsbT+WRnZ8Pd3V3rYZCNFM2xzKfGZY4jY+hcmEOdz53qGjObFbZEREREREREWuDJo4iIiIiIiMjQWNgSERERERGRobGwJSIiIiIiIkNjYUtERERERESGxsKWiIiIiIiIDI2FLRERERERERkaC1siIiIiIiIyNBa2REREREREZGgsbImIiIiIiMjQWNgSERERERGRobGwJSIiIiIiIkNjYUtERERERESGxsKWiIiIiIiIDI2FLRERERERERkaC1siIiIiIiIyNBa2REREREREZGgsbImIiIiIiMjQWNgSERERERGRobGwJSIiIiIiIkNjYUtERERERESGxsKWiIiIiIiIDI2FLRERERERERkaC1siIiIiIiIyNBa2REREREREZGgsbImIiIiIiMjQWNgSERERERGRobGwJSIiIiIiIkNjYUtERERERESGxsKWiIiIiIiIDI2FLRERERERERkaC1siIiIiIiIyNBa2REREREREZGgsbImIiIiIiMjQWNgSERERERGRobGwJSIiIiIiIkNjYUtERERERESGxsKWiIiIiIiIDI2FLRERERERERkaC1siIiIiIiIyNBa2REREREREZGgsbImIiIiIiMjQWNgSERERERGRobGwJSIiIiIiIkNjYUtERERERESGxsKWiIiIiIiIDI2FLRERERERERkaC1siIiIiIiIyNBa2REREREREZGgsbImIiIiIiMjQWNgSERERERGRobGwJSIiIiIiIkNjYUtERERERESGxsKWiIiIiIiIDI2FLRERERERERkaC1siIiIiIiIyNBa2REREREREZGgsbImIiIiIiMjQWNgSERERERGRobGwJSIiIiIiIkNjYUtERERERESGxsKWiIiIiIiIDI2FLRERERERERkaC1siIiIiIiIyNBa2REREREREZGgsbImIiIiIiMjQWNgSERERERGRobGwJSIiIiIiIkNjYUtERERERESGxsKWiIiIiIiIDI2FLRERERERERkaC1siIiIiIiIyNBa2REREREREZGgsbImIiIiIiMjQWNgSERERERGRobGwJSIiIiIiIkNjYUtERERERESGxsKWiIiIiIiIDI2FLRERERERERkaC1siIiIiIiIyNBa2REREREREZGgsbImIiIiIiMjQWNgSERERERGRobGwJSIiIiIiIkNjYUtERERERESGxsKWiIiIiIiIDI2FLRERERERERkaC1siIiIiIiIyNBa2REREREREZGgsbImIiIiIiMjQWNgSERERERGRobGwJSIiIiIiIkNjYUtERERERESGxsKWiIiIiIiIDI2FLRERERERERkaC1siIiIiIiIyNBa2REREREREZGgsbImIiIiIiMjQWNgSERERERGRobGwJSIiIiIiIkNjYUtERERERESGxsKWiIiIiIiIDI2FLRERERERERkaC1siIiIiIiIyNBa2REREREREZGj/BxWf2d82Buy4AAAAAElFTkSuQmCC", "text/plain": [ "
" ] @@ -1041,7 +1041,7 @@ }, { "cell_type": "markdown", - "id": "817eff2c", + "id": "074e230c", "metadata": {}, "source": [ " \n", @@ -1050,7 +1050,7 @@ }, { "cell_type": "markdown", - "id": "3e4b98e4", + "id": "aa0e4849", "metadata": {}, "source": [ "## Bagging and Random Forests" @@ -1058,7 +1058,7 @@ }, { "cell_type": "markdown", - "id": "878b4a89", + "id": "b17ca840", "metadata": {}, "source": [ "Here we apply bagging and random forests to the `Boston` data, using\n", @@ -1071,13 +1071,13 @@ { "cell_type": "code", "execution_count": 24, - "id": "c82eb98b", + "id": "275feef7", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:16.834792Z", - "iopub.status.busy": "2023-08-07T00:19:16.834681Z", - "iopub.status.idle": "2023-08-07T00:19:16.995212Z", - "shell.execute_reply": "2023-08-07T00:19:16.994915Z" + "iopub.execute_input": "2023-08-21T02:29:47.051447Z", + "iopub.status.busy": "2023-08-21T02:29:47.051323Z", + "iopub.status.idle": "2023-08-21T02:29:47.211049Z", + "shell.execute_reply": "2023-08-21T02:29:47.210740Z" }, "lines_to_next_cell": 2 }, @@ -1103,7 +1103,7 @@ }, { "cell_type": "markdown", - "id": "06cf548a", + "id": "06e84da6", "metadata": {}, "source": [ "The argument `max_features` indicates that all 12 predictors should\n", @@ -1115,13 +1115,13 @@ { "cell_type": "code", "execution_count": 25, - "id": "7d592004", + "id": "01dbbef3", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:16.996857Z", - "iopub.status.busy": "2023-08-07T00:19:16.996747Z", - "iopub.status.idle": "2023-08-07T00:19:17.088613Z", - "shell.execute_reply": "2023-08-07T00:19:17.088204Z" + "iopub.execute_input": "2023-08-21T02:29:47.212716Z", + "iopub.status.busy": "2023-08-21T02:29:47.212598Z", + "iopub.status.idle": "2023-08-21T02:29:47.305563Z", + "shell.execute_reply": "2023-08-21T02:29:47.305155Z" } }, "outputs": [ @@ -1155,7 +1155,7 @@ }, { "cell_type": "markdown", - "id": "f38f7522", + "id": "885a3843", "metadata": {}, "source": [ "The test set MSE associated with the bagged regression tree is\n", @@ -1168,13 +1168,13 @@ { "cell_type": "code", "execution_count": 26, - "id": "892aa556", + "id": "b75cc90e", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:17.090496Z", - "iopub.status.busy": "2023-08-07T00:19:17.090359Z", - "iopub.status.idle": "2023-08-07T00:19:17.888986Z", - "shell.execute_reply": "2023-08-07T00:19:17.888683Z" + "iopub.execute_input": "2023-08-21T02:29:47.307949Z", + "iopub.status.busy": "2023-08-21T02:29:47.307809Z", + "iopub.status.idle": "2023-08-21T02:29:48.296516Z", + "shell.execute_reply": "2023-08-21T02:29:48.296211Z" }, "lines_to_next_cell": 0 }, @@ -1200,7 +1200,7 @@ }, { "cell_type": "markdown", - "id": "6c2a8868", + "id": "37d5fe61", "metadata": {}, "source": [ "There is not much change. Bagging and random forests cannot overfit by\n", @@ -1217,13 +1217,13 @@ { "cell_type": "code", "execution_count": 27, - "id": "35636d87", + "id": "bf9a5ed4", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:17.890621Z", - "iopub.status.busy": "2023-08-07T00:19:17.890501Z", - "iopub.status.idle": "2023-08-07T00:19:17.998521Z", - "shell.execute_reply": "2023-08-07T00:19:17.998227Z" + "iopub.execute_input": "2023-08-21T02:29:48.298333Z", + "iopub.status.busy": "2023-08-21T02:29:48.298184Z", + "iopub.status.idle": "2023-08-21T02:29:48.412949Z", + "shell.execute_reply": "2023-08-21T02:29:48.412594Z" }, "lines_to_next_cell": 2 }, @@ -1248,7 +1248,7 @@ }, { "cell_type": "markdown", - "id": "a6edace1", + "id": "eb2c3917", "metadata": {}, "source": [ "The test set MSE is 20.04;\n", @@ -1260,13 +1260,13 @@ { "cell_type": "code", "execution_count": 28, - "id": "b5a0869f", + "id": "71316e9a", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:18.000185Z", - "iopub.status.busy": "2023-08-07T00:19:18.000073Z", - "iopub.status.idle": "2023-08-07T00:19:18.006477Z", - "shell.execute_reply": "2023-08-07T00:19:18.006110Z" + "iopub.execute_input": "2023-08-21T02:29:48.414933Z", + "iopub.status.busy": "2023-08-21T02:29:48.414785Z", + "iopub.status.idle": "2023-08-21T02:29:48.422251Z", + "shell.execute_reply": "2023-08-21T02:29:48.421922Z" }, "lines_to_next_cell": 0 }, @@ -1378,7 +1378,7 @@ }, { "cell_type": "markdown", - "id": "4acf5bdc", + "id": "b3cd6a28", "metadata": {}, "source": [ " This\n", @@ -1394,7 +1394,7 @@ }, { "cell_type": "markdown", - "id": "9a07b01d", + "id": "270fc0fb", "metadata": {}, "source": [ "## Boosting" @@ -1402,7 +1402,7 @@ }, { "cell_type": "markdown", - "id": "f2b3dde2", + "id": "5bd28754", "metadata": {}, "source": [ "Here we use `GradientBoostingRegressor()` from `sklearn.ensemble`\n", @@ -1418,13 +1418,13 @@ { "cell_type": "code", "execution_count": 29, - "id": "844fce26", + "id": "0bcc5ff1", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:18.008149Z", - "iopub.status.busy": "2023-08-07T00:19:18.008037Z", - "iopub.status.idle": "2023-08-07T00:19:21.749934Z", - "shell.execute_reply": "2023-08-07T00:19:21.749526Z" + "iopub.execute_input": "2023-08-21T02:29:48.424109Z", + "iopub.status.busy": "2023-08-21T02:29:48.423996Z", + "iopub.status.idle": "2023-08-21T02:29:52.311829Z", + "shell.execute_reply": "2023-08-21T02:29:52.311492Z" } }, "outputs": [ @@ -1455,7 +1455,7 @@ }, { "cell_type": "markdown", - "id": "15f35667", + "id": "4e8553ec", "metadata": {}, "source": [ "We can see how the training error decreases with the `train_score_` attribute.\n", @@ -1466,13 +1466,13 @@ { "cell_type": "code", "execution_count": 30, - "id": "eae8687c", + "id": "060f47eb", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:21.751640Z", - "iopub.status.busy": "2023-08-07T00:19:21.751529Z", - "iopub.status.idle": "2023-08-07T00:19:22.217916Z", - "shell.execute_reply": "2023-08-07T00:19:22.217584Z" + "iopub.execute_input": "2023-08-21T02:29:52.313643Z", + "iopub.status.busy": "2023-08-21T02:29:52.313522Z", + "iopub.status.idle": "2023-08-21T02:29:52.788145Z", + "shell.execute_reply": "2023-08-21T02:29:52.787823Z" } }, "outputs": [ @@ -1507,7 +1507,7 @@ }, { "cell_type": "markdown", - "id": "e0499e04", + "id": "3ebd0944", "metadata": {}, "source": [ "We now use the boosted model to predict `medv` on the test set:" @@ -1516,13 +1516,13 @@ { "cell_type": "code", "execution_count": 31, - "id": "46947fc6", + "id": "43505dad", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:22.219939Z", - "iopub.status.busy": "2023-08-07T00:19:22.219785Z", - "iopub.status.idle": "2023-08-07T00:19:22.232084Z", - "shell.execute_reply": "2023-08-07T00:19:22.231779Z" + "iopub.execute_input": "2023-08-21T02:29:52.789753Z", + "iopub.status.busy": "2023-08-21T02:29:52.789632Z", + "iopub.status.idle": "2023-08-21T02:29:52.801529Z", + "shell.execute_reply": "2023-08-21T02:29:52.801234Z" } }, "outputs": [ @@ -1544,7 +1544,7 @@ }, { "cell_type": "markdown", - "id": "07d3ccd4", + "id": "7f76bb89", "metadata": {}, "source": [ " The test MSE obtained is 14.48,\n", @@ -1557,13 +1557,13 @@ { "cell_type": "code", "execution_count": 32, - "id": "f67fdfec", + "id": "c0a03126", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:22.233692Z", - "iopub.status.busy": "2023-08-07T00:19:22.233584Z", - "iopub.status.idle": "2023-08-07T00:19:24.675084Z", - "shell.execute_reply": "2023-08-07T00:19:24.674626Z" + "iopub.execute_input": "2023-08-21T02:29:52.803315Z", + "iopub.status.busy": "2023-08-21T02:29:52.803174Z", + "iopub.status.idle": "2023-08-21T02:29:55.330726Z", + "shell.execute_reply": "2023-08-21T02:29:55.330425Z" }, "lines_to_next_cell": 2 }, @@ -1592,7 +1592,7 @@ }, { "cell_type": "markdown", - "id": "f767c57a", + "id": "cbcad91c", "metadata": {}, "source": [ "In this case, using $\\lambda=0.2$ leads to a almost the same test MSE\n", @@ -1603,7 +1603,7 @@ }, { "cell_type": "markdown", - "id": "37cf0481", + "id": "8d561719", "metadata": {}, "source": [ "## Bayesian Additive Regression Trees" @@ -1611,7 +1611,7 @@ }, { "cell_type": "markdown", - "id": "c3a3419a", + "id": "f68c0d8f", "metadata": {}, "source": [ "In this section we demonstrate a `Python` implementation of BART found in the\n", @@ -1624,13 +1624,13 @@ { "cell_type": "code", "execution_count": 33, - "id": "06b92877", + "id": "58f6e11f", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:24.676878Z", - "iopub.status.busy": "2023-08-07T00:19:24.676742Z", - "iopub.status.idle": "2023-08-07T00:19:26.416295Z", - "shell.execute_reply": "2023-08-07T00:19:26.415996Z" + "iopub.execute_input": "2023-08-21T02:29:55.332677Z", + "iopub.status.busy": "2023-08-21T02:29:55.332550Z", + "iopub.status.idle": "2023-08-21T02:29:56.797204Z", + "shell.execute_reply": "2023-08-21T02:29:56.796899Z" }, "lines_to_next_cell": 2 }, @@ -1656,7 +1656,7 @@ }, { "cell_type": "markdown", - "id": "d6d7ad70", + "id": "26e4d574", "metadata": {}, "source": [ "On this data set, with this split into test and training, we see that the test error of BART is similar to that of random forest." @@ -1665,13 +1665,13 @@ { "cell_type": "code", "execution_count": 34, - "id": "c09cb099", + "id": "a5b1296f", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:26.418098Z", - "iopub.status.busy": "2023-08-07T00:19:26.417976Z", - "iopub.status.idle": "2023-08-07T00:19:26.718709Z", - "shell.execute_reply": "2023-08-07T00:19:26.718412Z" + "iopub.execute_input": "2023-08-21T02:29:56.798892Z", + "iopub.status.busy": "2023-08-21T02:29:56.798779Z", + "iopub.status.idle": "2023-08-21T02:29:57.098494Z", + "shell.execute_reply": "2023-08-21T02:29:57.098140Z" }, "lines_to_next_cell": 2 }, @@ -1694,7 +1694,7 @@ }, { "cell_type": "markdown", - "id": "bb48211a", + "id": "92a60f97", "metadata": {}, "source": [ "We can check how many times each variable appeared in the collection of trees.\n", @@ -1704,13 +1704,13 @@ { "cell_type": "code", "execution_count": 35, - "id": "f9d6b394", + "id": "36c52755", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:26.720402Z", - "iopub.status.busy": "2023-08-07T00:19:26.720254Z", - "iopub.status.idle": "2023-08-07T00:19:26.723384Z", - "shell.execute_reply": "2023-08-07T00:19:26.723106Z" + "iopub.execute_input": "2023-08-21T02:29:57.100444Z", + "iopub.status.busy": "2023-08-21T02:29:57.100310Z", + "iopub.status.idle": "2023-08-21T02:29:57.103577Z", + "shell.execute_reply": "2023-08-21T02:29:57.103213Z" }, "lines_to_next_cell": 0 }, @@ -1746,7 +1746,7 @@ }, { "cell_type": "markdown", - "id": "0aac2d50", + "id": "ab69e5b5", "metadata": {}, "source": [ " \n", diff --git a/Ch09-svm-lab.ipynb b/Ch09-svm-lab.ipynb index c6863a2..bf1cc7c 100644 --- a/Ch09-svm-lab.ipynb +++ b/Ch09-svm-lab.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "d45c6d2b", + "id": "30b873f3", "metadata": {}, "source": [ "\n", @@ -12,7 +12,7 @@ }, { "cell_type": "markdown", - "id": "94d1e03c", + "id": "3e06bca8", "metadata": {}, "source": [ "# Lab: Support Vector Machines\n", @@ -25,13 +25,13 @@ { "cell_type": "code", "execution_count": 1, - "id": "eeaa5be0", + "id": "3973b95f", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:27.947789Z", - "iopub.status.busy": "2023-08-07T00:19:27.947634Z", - "iopub.status.idle": "2023-08-07T00:19:28.991210Z", - "shell.execute_reply": "2023-08-07T00:19:28.990616Z" + "iopub.execute_input": "2023-08-21T02:29:58.477582Z", + "iopub.status.busy": "2023-08-21T02:29:58.477467Z", + "iopub.status.idle": "2023-08-21T02:29:59.432527Z", + "shell.execute_reply": "2023-08-21T02:29:59.432225Z" }, "lines_to_next_cell": 0 }, @@ -45,7 +45,7 @@ }, { "cell_type": "markdown", - "id": "26ebd377", + "id": "631b7d3d", "metadata": {}, "source": [ "We also collect the new imports\n", @@ -55,13 +55,13 @@ { "cell_type": "code", "execution_count": 2, - "id": "41a59634", + "id": "0161e55e", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:28.993557Z", - "iopub.status.busy": "2023-08-07T00:19:28.993245Z", - "iopub.status.idle": "2023-08-07T00:19:29.028199Z", - "shell.execute_reply": "2023-08-07T00:19:29.027857Z" + "iopub.execute_input": "2023-08-21T02:29:59.434432Z", + "iopub.status.busy": "2023-08-21T02:29:59.434258Z", + "iopub.status.idle": "2023-08-21T02:29:59.466972Z", + "shell.execute_reply": "2023-08-21T02:29:59.466647Z" } }, "outputs": [], @@ -73,7 +73,7 @@ }, { "cell_type": "markdown", - "id": "f197b846", + "id": "b397af05", "metadata": {}, "source": [ "We will use the function `RocCurveDisplay.from_estimator()` to\n", @@ -83,13 +83,13 @@ { "cell_type": "code", "execution_count": 3, - "id": "c9a175d7", + "id": "7661b056", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:29.030225Z", - "iopub.status.busy": "2023-08-07T00:19:29.030097Z", - "iopub.status.idle": "2023-08-07T00:19:29.032026Z", - "shell.execute_reply": "2023-08-07T00:19:29.031756Z" + "iopub.execute_input": "2023-08-21T02:29:59.469128Z", + "iopub.status.busy": "2023-08-21T02:29:59.468999Z", + "iopub.status.idle": "2023-08-21T02:29:59.470961Z", + "shell.execute_reply": "2023-08-21T02:29:59.470667Z" } }, "outputs": [], @@ -99,7 +99,7 @@ }, { "cell_type": "markdown", - "id": "f666c212", + "id": "38115984", "metadata": {}, "source": [ "## Support Vector Classifier\n", @@ -123,13 +123,13 @@ { "cell_type": "code", "execution_count": 4, - "id": "a7216b47", + "id": "46e9ab84", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:29.033695Z", - "iopub.status.busy": "2023-08-07T00:19:29.033581Z", - "iopub.status.idle": "2023-08-07T00:19:29.207161Z", - "shell.execute_reply": "2023-08-07T00:19:29.205980Z" + "iopub.execute_input": "2023-08-21T02:29:59.472867Z", + "iopub.status.busy": "2023-08-21T02:29:59.472726Z", + "iopub.status.idle": "2023-08-21T02:29:59.583508Z", + "shell.execute_reply": "2023-08-21T02:29:59.583126Z" }, "lines_to_next_cell": 0 }, @@ -159,7 +159,7 @@ }, { "cell_type": "markdown", - "id": "7b4aff06", + "id": "a9766d18", "metadata": {}, "source": [ "They are not. We now fit the classifier." @@ -168,13 +168,13 @@ { "cell_type": "code", "execution_count": 5, - "id": "ed329198", + "id": "605ffdc0", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:29.211951Z", - "iopub.status.busy": "2023-08-07T00:19:29.211403Z", - "iopub.status.idle": "2023-08-07T00:19:29.220643Z", - "shell.execute_reply": "2023-08-07T00:19:29.219858Z" + "iopub.execute_input": "2023-08-21T02:29:59.585485Z", + "iopub.status.busy": "2023-08-21T02:29:59.585317Z", + "iopub.status.idle": "2023-08-21T02:29:59.590274Z", + "shell.execute_reply": "2023-08-21T02:29:59.589979Z" }, "lines_to_next_cell": 2 }, @@ -200,7 +200,7 @@ }, { "cell_type": "markdown", - "id": "5e6b4c79", + "id": "16215b77", "metadata": {}, "source": [ "The support vector classifier with two features can\n", @@ -212,13 +212,13 @@ { "cell_type": "code", "execution_count": 6, - "id": "95494b8b", + "id": "302a49a1", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:29.224179Z", - "iopub.status.busy": "2023-08-07T00:19:29.223775Z", - "iopub.status.idle": "2023-08-07T00:19:29.400927Z", - "shell.execute_reply": "2023-08-07T00:19:29.400620Z" + "iopub.execute_input": "2023-08-21T02:29:59.591976Z", + "iopub.status.busy": "2023-08-21T02:29:59.591865Z", + "iopub.status.idle": "2023-08-21T02:29:59.734225Z", + "shell.execute_reply": "2023-08-21T02:29:59.733936Z" } }, "outputs": [ @@ -243,7 +243,7 @@ }, { "cell_type": "markdown", - "id": "f6ce1246", + "id": "6010e865", "metadata": {}, "source": [ "The decision\n", @@ -257,13 +257,13 @@ { "cell_type": "code", "execution_count": 7, - "id": "98c2236f", + "id": "cc1d6a13", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:29.402894Z", - "iopub.status.busy": "2023-08-07T00:19:29.402744Z", - "iopub.status.idle": "2023-08-07T00:19:29.544636Z", - "shell.execute_reply": "2023-08-07T00:19:29.544249Z" + "iopub.execute_input": "2023-08-21T02:29:59.735943Z", + "iopub.status.busy": "2023-08-21T02:29:59.735816Z", + "iopub.status.idle": "2023-08-21T02:29:59.878335Z", + "shell.execute_reply": "2023-08-21T02:29:59.878032Z" }, "lines_to_next_cell": 0 }, @@ -291,7 +291,7 @@ }, { "cell_type": "markdown", - "id": "906f4bb8", + "id": "301d764d", "metadata": {}, "source": [ "With a smaller value of the cost parameter, we\n", @@ -303,13 +303,13 @@ { "cell_type": "code", "execution_count": 8, - "id": "b498f594", + "id": "6133c846", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:29.546722Z", - "iopub.status.busy": "2023-08-07T00:19:29.546549Z", - "iopub.status.idle": "2023-08-07T00:19:29.549088Z", - "shell.execute_reply": "2023-08-07T00:19:29.548814Z" + "iopub.execute_input": "2023-08-21T02:29:59.880078Z", + "iopub.status.busy": "2023-08-21T02:29:59.879965Z", + "iopub.status.idle": "2023-08-21T02:29:59.882347Z", + "shell.execute_reply": "2023-08-21T02:29:59.882070Z" }, "lines_to_next_cell": 2 }, @@ -331,7 +331,7 @@ }, { "cell_type": "markdown", - "id": "90a0ee53", + "id": "0693b3eb", "metadata": {}, "source": [ "Since the support vector machine is an estimator in `sklearn`, we\n", @@ -341,13 +341,13 @@ { "cell_type": "code", "execution_count": 9, - "id": "b65e80d6", + "id": "9adb3793", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:29.550593Z", - "iopub.status.busy": "2023-08-07T00:19:29.550485Z", - "iopub.status.idle": "2023-08-07T00:19:29.578952Z", - "shell.execute_reply": "2023-08-07T00:19:29.578657Z" + "iopub.execute_input": "2023-08-21T02:29:59.883852Z", + "iopub.status.busy": "2023-08-21T02:29:59.883749Z", + "iopub.status.idle": "2023-08-21T02:29:59.910535Z", + "shell.execute_reply": "2023-08-21T02:29:59.910272Z" }, "lines_to_next_cell": 2 }, @@ -378,7 +378,7 @@ }, { "cell_type": "markdown", - "id": "d390528c", + "id": "611e76a6", "metadata": {}, "source": [ "We can easily access the cross-validation errors for each of these models\n", @@ -389,13 +389,13 @@ { "cell_type": "code", "execution_count": 10, - "id": "bba8fad7", + "id": "d3ab343e", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:29.580977Z", - "iopub.status.busy": "2023-08-07T00:19:29.580845Z", - "iopub.status.idle": "2023-08-07T00:19:29.583558Z", - "shell.execute_reply": "2023-08-07T00:19:29.583239Z" + "iopub.execute_input": "2023-08-21T02:29:59.912005Z", + "iopub.status.busy": "2023-08-21T02:29:59.911925Z", + "iopub.status.idle": "2023-08-21T02:29:59.914189Z", + "shell.execute_reply": "2023-08-21T02:29:59.913943Z" }, "lines_to_next_cell": 0 }, @@ -417,7 +417,7 @@ }, { "cell_type": "markdown", - "id": "703e2d43", + "id": "41d85a2a", "metadata": {}, "source": [ "We see that `C=1` results in the highest cross-validation\n", @@ -430,13 +430,13 @@ { "cell_type": "code", "execution_count": 11, - "id": "ad64269d", + "id": "6aba117e", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:29.585087Z", - "iopub.status.busy": "2023-08-07T00:19:29.584981Z", - "iopub.status.idle": "2023-08-07T00:19:29.586995Z", - "shell.execute_reply": "2023-08-07T00:19:29.586714Z" + "iopub.execute_input": "2023-08-21T02:29:59.915563Z", + "iopub.status.busy": "2023-08-21T02:29:59.915487Z", + "iopub.status.idle": "2023-08-21T02:29:59.917323Z", + "shell.execute_reply": "2023-08-21T02:29:59.917078Z" } }, "outputs": [], @@ -448,7 +448,7 @@ }, { "cell_type": "markdown", - "id": "db41f5e2", + "id": "ddbda9de", "metadata": {}, "source": [ "Now we predict the class labels of these test observations. Here we\n", @@ -459,13 +459,13 @@ { "cell_type": "code", "execution_count": 12, - "id": "5107fca1", + "id": "dbe7d737", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:29.588685Z", - "iopub.status.busy": "2023-08-07T00:19:29.588519Z", - "iopub.status.idle": "2023-08-07T00:19:29.595768Z", - "shell.execute_reply": "2023-08-07T00:19:29.595341Z" + "iopub.execute_input": "2023-08-21T02:29:59.918744Z", + "iopub.status.busy": "2023-08-21T02:29:59.918666Z", + "iopub.status.idle": "2023-08-21T02:29:59.925361Z", + "shell.execute_reply": "2023-08-21T02:29:59.925039Z" } }, "outputs": [ @@ -534,7 +534,7 @@ }, { "cell_type": "markdown", - "id": "bbfc8005", + "id": "7f002ea6", "metadata": {}, "source": [ "Thus, with this value of `C`,\n", @@ -546,13 +546,13 @@ { "cell_type": "code", "execution_count": 13, - "id": "0320d9e0", + "id": "ab1697c2", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:29.597509Z", - "iopub.status.busy": "2023-08-07T00:19:29.597387Z", - "iopub.status.idle": "2023-08-07T00:19:29.602346Z", - "shell.execute_reply": "2023-08-07T00:19:29.601964Z" + "iopub.execute_input": "2023-08-21T02:29:59.927158Z", + "iopub.status.busy": "2023-08-21T02:29:59.927027Z", + "iopub.status.idle": "2023-08-21T02:29:59.931558Z", + "shell.execute_reply": "2023-08-21T02:29:59.931228Z" } }, "outputs": [ @@ -622,7 +622,7 @@ }, { "cell_type": "markdown", - "id": "427d775f", + "id": "7574703a", "metadata": {}, "source": [ "In this case 60% of test observations are correctly classified.\n", @@ -637,13 +637,13 @@ { "cell_type": "code", "execution_count": 14, - "id": "84d7e778", + "id": "0fd42b1e", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:29.604018Z", - "iopub.status.busy": "2023-08-07T00:19:29.603879Z", - "iopub.status.idle": "2023-08-07T00:19:29.734586Z", - "shell.execute_reply": "2023-08-07T00:19:29.734264Z" + "iopub.execute_input": "2023-08-21T02:29:59.933100Z", + "iopub.status.busy": "2023-08-21T02:29:59.933001Z", + "iopub.status.idle": "2023-08-21T02:30:00.054738Z", + "shell.execute_reply": "2023-08-21T02:30:00.054338Z" } }, "outputs": [ @@ -666,7 +666,7 @@ }, { "cell_type": "markdown", - "id": "ff7bdad1", + "id": "4bdaf415", "metadata": {}, "source": [ "Now the observations are just barely linearly separable." @@ -675,13 +675,13 @@ { "cell_type": "code", "execution_count": 15, - "id": "abb1f8be", + "id": "09c15299", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:29.736388Z", - "iopub.status.busy": "2023-08-07T00:19:29.736251Z", - "iopub.status.idle": "2023-08-07T00:19:29.741179Z", - "shell.execute_reply": "2023-08-07T00:19:29.740886Z" + "iopub.execute_input": "2023-08-21T02:30:00.056655Z", + "iopub.status.busy": "2023-08-21T02:30:00.056526Z", + "iopub.status.idle": "2023-08-21T02:30:00.061096Z", + "shell.execute_reply": "2023-08-21T02:30:00.060792Z" } }, "outputs": [ @@ -750,7 +750,7 @@ }, { "cell_type": "markdown", - "id": "c44297cc", + "id": "d987eecc", "metadata": {}, "source": [ "We fit the\n", @@ -762,13 +762,13 @@ { "cell_type": "code", "execution_count": 16, - "id": "2e4ed2f5", + "id": "d5fd2ff9", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:29.742864Z", - "iopub.status.busy": "2023-08-07T00:19:29.742750Z", - "iopub.status.idle": "2023-08-07T00:19:29.860686Z", - "shell.execute_reply": "2023-08-07T00:19:29.860305Z" + "iopub.execute_input": "2023-08-21T02:30:00.062673Z", + "iopub.status.busy": "2023-08-21T02:30:00.062585Z", + "iopub.status.idle": "2023-08-21T02:30:00.199860Z", + "shell.execute_reply": "2023-08-21T02:30:00.199129Z" }, "lines_to_next_cell": 0 }, @@ -794,7 +794,7 @@ }, { "cell_type": "markdown", - "id": "2836d70d", + "id": "0834d471", "metadata": {}, "source": [ "Indeed no training errors were made and only three support vectors were used.\n", @@ -807,13 +807,13 @@ { "cell_type": "code", "execution_count": 17, - "id": "164a611c", + "id": "39aff1b1", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:29.862647Z", - "iopub.status.busy": "2023-08-07T00:19:29.862496Z", - "iopub.status.idle": "2023-08-07T00:19:29.867261Z", - "shell.execute_reply": "2023-08-07T00:19:29.866916Z" + "iopub.execute_input": "2023-08-21T02:30:00.202380Z", + "iopub.status.busy": "2023-08-21T02:30:00.202233Z", + "iopub.status.idle": "2023-08-21T02:30:00.207886Z", + "shell.execute_reply": "2023-08-21T02:30:00.207493Z" } }, "outputs": [ @@ -882,7 +882,7 @@ }, { "cell_type": "markdown", - "id": "39a432d1", + "id": "d0684844", "metadata": {}, "source": [ "Using `C=0.1`, we again do not misclassify any training observations, but we\n", @@ -894,13 +894,13 @@ { "cell_type": "code", "execution_count": 18, - "id": "c67591a1", + "id": "63a9d752", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:29.868821Z", - "iopub.status.busy": "2023-08-07T00:19:29.868723Z", - "iopub.status.idle": "2023-08-07T00:19:29.990207Z", - "shell.execute_reply": "2023-08-07T00:19:29.989921Z" + "iopub.execute_input": "2023-08-21T02:30:00.209907Z", + "iopub.status.busy": "2023-08-21T02:30:00.209781Z", + "iopub.status.idle": "2023-08-21T02:30:00.340803Z", + "shell.execute_reply": "2023-08-21T02:30:00.340433Z" }, "lines_to_next_cell": 2 }, @@ -926,7 +926,7 @@ }, { "cell_type": "markdown", - "id": "25e61f65", + "id": "a70d84f4", "metadata": {}, "source": [ "## Support Vector Machine\n", @@ -947,13 +947,13 @@ { "cell_type": "code", "execution_count": 19, - "id": "322be574", + "id": "2fee8df5", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:29.991910Z", - "iopub.status.busy": "2023-08-07T00:19:29.991799Z", - "iopub.status.idle": "2023-08-07T00:19:29.993907Z", - "shell.execute_reply": "2023-08-07T00:19:29.993635Z" + "iopub.execute_input": "2023-08-21T02:30:00.342773Z", + "iopub.status.busy": "2023-08-21T02:30:00.342626Z", + "iopub.status.idle": "2023-08-21T02:30:00.345094Z", + "shell.execute_reply": "2023-08-21T02:30:00.344774Z" } }, "outputs": [], @@ -966,7 +966,7 @@ }, { "cell_type": "markdown", - "id": "22fe2182", + "id": "d5c7545e", "metadata": {}, "source": [ "Plotting the data makes it clear that the class boundary is indeed non-linear." @@ -975,13 +975,13 @@ { "cell_type": "code", "execution_count": 20, - "id": "04fda182", + "id": "48f01abe", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:29.995558Z", - "iopub.status.busy": "2023-08-07T00:19:29.995406Z", - "iopub.status.idle": "2023-08-07T00:19:30.089596Z", - "shell.execute_reply": "2023-08-07T00:19:30.089130Z" + "iopub.execute_input": "2023-08-21T02:30:00.347053Z", + "iopub.status.busy": "2023-08-21T02:30:00.346902Z", + "iopub.status.idle": "2023-08-21T02:30:00.440453Z", + "shell.execute_reply": "2023-08-21T02:30:00.440153Z" }, "lines_to_next_cell": 2 }, @@ -989,7 +989,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 20, @@ -1017,7 +1017,7 @@ }, { "cell_type": "markdown", - "id": "64913fe3", + "id": "7c0bc32b", "metadata": {}, "source": [ "The data is randomly split into training and testing groups. We then\n", @@ -1028,13 +1028,13 @@ { "cell_type": "code", "execution_count": 21, - "id": "0c2690d1", + "id": "4acc3246", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:30.091605Z", - "iopub.status.busy": "2023-08-07T00:19:30.091498Z", - "iopub.status.idle": "2023-08-07T00:19:30.095614Z", - "shell.execute_reply": "2023-08-07T00:19:30.095347Z" + "iopub.execute_input": "2023-08-21T02:30:00.442257Z", + "iopub.status.busy": "2023-08-21T02:30:00.442156Z", + "iopub.status.idle": "2023-08-21T02:30:00.446674Z", + "shell.execute_reply": "2023-08-21T02:30:00.446369Z" } }, "outputs": [ @@ -1066,7 +1066,7 @@ }, { "cell_type": "markdown", - "id": "5da9efdb", + "id": "b2c7e95e", "metadata": {}, "source": [ "The plot shows that the resulting SVM has a decidedly non-linear\n", @@ -1076,13 +1076,13 @@ { "cell_type": "code", "execution_count": 22, - "id": "3eb171e8", + "id": "e9852a28", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:30.097178Z", - "iopub.status.busy": "2023-08-07T00:19:30.097088Z", - "iopub.status.idle": "2023-08-07T00:19:30.357131Z", - "shell.execute_reply": "2023-08-07T00:19:30.356847Z" + "iopub.execute_input": "2023-08-21T02:30:00.448268Z", + "iopub.status.busy": "2023-08-21T02:30:00.448160Z", + "iopub.status.idle": "2023-08-21T02:30:00.828511Z", + "shell.execute_reply": "2023-08-21T02:30:00.828128Z" } }, "outputs": [ @@ -1107,7 +1107,7 @@ }, { "cell_type": "markdown", - "id": "ab5b1446", + "id": "acfa4bed", "metadata": {}, "source": [ "We can see from the figure that there are a fair number of training\n", @@ -1120,13 +1120,13 @@ { "cell_type": "code", "execution_count": 23, - "id": "9a6b905b", + "id": "01232fc9", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:30.358811Z", - "iopub.status.busy": "2023-08-07T00:19:30.358698Z", - "iopub.status.idle": "2023-08-07T00:19:30.513702Z", - "shell.execute_reply": "2023-08-07T00:19:30.513395Z" + "iopub.execute_input": "2023-08-21T02:30:00.830365Z", + "iopub.status.busy": "2023-08-21T02:30:00.830226Z", + "iopub.status.idle": "2023-08-21T02:30:01.132677Z", + "shell.execute_reply": "2023-08-21T02:30:01.132224Z" } }, "outputs": [ @@ -1153,7 +1153,7 @@ }, { "cell_type": "markdown", - "id": "300c1b8b", + "id": "5bc77e3f", "metadata": {}, "source": [ "We can perform cross-validation using `skm.GridSearchCV()` to select the\n", @@ -1164,13 +1164,13 @@ { "cell_type": "code", "execution_count": 24, - "id": "5ab01d6c", + "id": "bcbd15a4", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:30.515803Z", - "iopub.status.busy": "2023-08-07T00:19:30.515668Z", - "iopub.status.idle": "2023-08-07T00:19:30.612245Z", - "shell.execute_reply": "2023-08-07T00:19:30.611940Z" + "iopub.execute_input": "2023-08-21T02:30:01.134616Z", + "iopub.status.busy": "2023-08-21T02:30:01.134486Z", + "iopub.status.idle": "2023-08-21T02:30:01.243519Z", + "shell.execute_reply": "2023-08-21T02:30:01.243203Z" } }, "outputs": [ @@ -1201,7 +1201,7 @@ }, { "cell_type": "markdown", - "id": "1bb987ae", + "id": "997bbfbd", "metadata": {}, "source": [ "The best choice of parameters under five-fold CV is achieved at `C=1`\n", @@ -1212,13 +1212,13 @@ { "cell_type": "code", "execution_count": 25, - "id": "166a6acb", + "id": "28ca551e", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:30.614152Z", - "iopub.status.busy": "2023-08-07T00:19:30.614029Z", - "iopub.status.idle": "2023-08-07T00:19:30.850984Z", - "shell.execute_reply": "2023-08-07T00:19:30.850653Z" + "iopub.execute_input": "2023-08-21T02:30:01.245550Z", + "iopub.status.busy": "2023-08-21T02:30:01.245377Z", + "iopub.status.idle": "2023-08-21T02:30:01.600896Z", + "shell.execute_reply": "2023-08-21T02:30:01.600574Z" } }, "outputs": [ @@ -1303,7 +1303,7 @@ }, { "cell_type": "markdown", - "id": "39ee6f32", + "id": "48e671f4", "metadata": {}, "source": [ "With these parameters, 12% of test\n", @@ -1312,7 +1312,7 @@ }, { "cell_type": "markdown", - "id": "f0ea699d", + "id": "eaed0a87", "metadata": {}, "source": [ "## ROC Curves\n", @@ -1346,13 +1346,13 @@ { "cell_type": "code", "execution_count": 26, - "id": "0607fc41", + "id": "68ac9421", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:30.853079Z", - "iopub.status.busy": "2023-08-07T00:19:30.852934Z", - "iopub.status.idle": "2023-08-07T00:19:30.948570Z", - "shell.execute_reply": "2023-08-07T00:19:30.948252Z" + "iopub.execute_input": "2023-08-21T02:30:01.602740Z", + "iopub.status.busy": "2023-08-21T02:30:01.602614Z", + "iopub.status.idle": "2023-08-21T02:30:01.698620Z", + "shell.execute_reply": "2023-08-21T02:30:01.698322Z" }, "lines_to_next_cell": 0 }, @@ -1380,7 +1380,7 @@ }, { "cell_type": "markdown", - "id": "54446e71", + "id": "0c35d32a", "metadata": {}, "source": [ " In this example, the SVM appears to provide accurate predictions. By increasing\n", @@ -1391,13 +1391,13 @@ { "cell_type": "code", "execution_count": 27, - "id": "5211a882", + "id": "f79a9e0a", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:30.950213Z", - "iopub.status.busy": "2023-08-07T00:19:30.950106Z", - "iopub.status.idle": "2023-08-07T00:19:31.095103Z", - "shell.execute_reply": "2023-08-07T00:19:31.094737Z" + "iopub.execute_input": "2023-08-21T02:30:01.700479Z", + "iopub.status.busy": "2023-08-21T02:30:01.700347Z", + "iopub.status.idle": "2023-08-21T02:30:01.837479Z", + "shell.execute_reply": "2023-08-21T02:30:01.837102Z" } }, "outputs": [ @@ -1428,7 +1428,7 @@ }, { "cell_type": "markdown", - "id": "de7e4be8", + "id": "7bd1a22b", "metadata": {}, "source": [ "However, these ROC curves are all on the training data. We are really\n", @@ -1440,13 +1440,13 @@ { "cell_type": "code", "execution_count": 28, - "id": "12acc4ff", + "id": "bdb9e503", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:31.096951Z", - "iopub.status.busy": "2023-08-07T00:19:31.096805Z", - "iopub.status.idle": "2023-08-07T00:19:31.101372Z", - "shell.execute_reply": "2023-08-07T00:19:31.101097Z" + "iopub.execute_input": "2023-08-21T02:30:01.839390Z", + "iopub.status.busy": "2023-08-21T02:30:01.839243Z", + "iopub.status.idle": "2023-08-21T02:30:01.843595Z", + "shell.execute_reply": "2023-08-21T02:30:01.843287Z" } }, "outputs": [], @@ -1462,7 +1462,7 @@ }, { "cell_type": "markdown", - "id": "eb5c8aeb", + "id": "8a42e924", "metadata": {}, "source": [ "Let’s look at our tuned SVM." @@ -1471,13 +1471,13 @@ { "cell_type": "code", "execution_count": 29, - "id": "21c81913", + "id": "329f5d2c", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:31.103089Z", - "iopub.status.busy": "2023-08-07T00:19:31.102993Z", - "iopub.status.idle": "2023-08-07T00:19:31.204133Z", - "shell.execute_reply": "2023-08-07T00:19:31.203835Z" + "iopub.execute_input": "2023-08-21T02:30:01.845300Z", + "iopub.status.busy": "2023-08-21T02:30:01.845201Z", + "iopub.status.idle": "2023-08-21T02:30:01.944073Z", + "shell.execute_reply": "2023-08-21T02:30:01.943763Z" } }, "outputs": [ @@ -1510,7 +1510,7 @@ }, { "cell_type": "markdown", - "id": "b9fefe9f", + "id": "bac19279", "metadata": {}, "source": [ "## SVM with Multiple Classes\n", @@ -1526,13 +1526,13 @@ { "cell_type": "code", "execution_count": 30, - "id": "2fff4fa8", + "id": "267e113d", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:31.205816Z", - "iopub.status.busy": "2023-08-07T00:19:31.205709Z", - "iopub.status.idle": "2023-08-07T00:19:31.294925Z", - "shell.execute_reply": "2023-08-07T00:19:31.294593Z" + "iopub.execute_input": "2023-08-21T02:30:01.945725Z", + "iopub.status.busy": "2023-08-21T02:30:01.945611Z", + "iopub.status.idle": "2023-08-21T02:30:02.034378Z", + "shell.execute_reply": "2023-08-21T02:30:02.034069Z" } }, "outputs": [ @@ -1558,7 +1558,7 @@ }, { "cell_type": "markdown", - "id": "b7adc87d", + "id": "a9f4297c", "metadata": {}, "source": [ "We now fit an SVM to the data:" @@ -1567,13 +1567,13 @@ { "cell_type": "code", "execution_count": 31, - "id": "5396f2df", + "id": "64cbebd0", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:31.296594Z", - "iopub.status.busy": "2023-08-07T00:19:31.296472Z", - "iopub.status.idle": "2023-08-07T00:19:31.880175Z", - "shell.execute_reply": "2023-08-07T00:19:31.879674Z" + "iopub.execute_input": "2023-08-21T02:30:02.036083Z", + "iopub.status.busy": "2023-08-21T02:30:02.035963Z", + "iopub.status.idle": "2023-08-21T02:30:03.015535Z", + "shell.execute_reply": "2023-08-21T02:30:03.014798Z" }, "lines_to_next_cell": 0 }, @@ -1605,7 +1605,7 @@ }, { "cell_type": "markdown", - "id": "837644f5", + "id": "62c5d16e", "metadata": {}, "source": [ "The `sklearn.svm` library can also be used to perform support vector\n", @@ -1614,7 +1614,7 @@ }, { "cell_type": "markdown", - "id": "a6bc0cbc", + "id": "5c0824b6", "metadata": {}, "source": [ "## Application to Gene Expression Data\n", @@ -1631,13 +1631,13 @@ { "cell_type": "code", "execution_count": 32, - "id": "f63c575e", + "id": "b6e6f12b", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:31.882095Z", - "iopub.status.busy": "2023-08-07T00:19:31.881962Z", - "iopub.status.idle": "2023-08-07T00:19:31.959079Z", - "shell.execute_reply": "2023-08-07T00:19:31.958769Z" + "iopub.execute_input": "2023-08-21T02:30:03.017430Z", + "iopub.status.busy": "2023-08-21T02:30:03.017293Z", + "iopub.status.idle": "2023-08-21T02:30:03.099156Z", + "shell.execute_reply": "2023-08-21T02:30:03.098760Z" } }, "outputs": [ @@ -1659,7 +1659,7 @@ }, { "cell_type": "markdown", - "id": "bfd6492c", + "id": "e3fbaa58", "metadata": {}, "source": [ "This data set consists of expression measurements for 2,308\n", @@ -1677,13 +1677,13 @@ { "cell_type": "code", "execution_count": 33, - "id": "32091338", + "id": "273a10b2", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:31.960641Z", - "iopub.status.busy": "2023-08-07T00:19:31.960528Z", - "iopub.status.idle": "2023-08-07T00:19:31.990176Z", - "shell.execute_reply": "2023-08-07T00:19:31.989868Z" + "iopub.execute_input": "2023-08-21T02:30:03.101069Z", + "iopub.status.busy": "2023-08-21T02:30:03.100881Z", + "iopub.status.idle": "2023-08-21T02:30:03.130224Z", + "shell.execute_reply": "2023-08-21T02:30:03.129845Z" } }, "outputs": [ @@ -1777,7 +1777,7 @@ }, { "cell_type": "markdown", - "id": "23043ab0", + "id": "31cad43a", "metadata": {}, "source": [ "We see that there are *no* training\n", @@ -1791,13 +1791,13 @@ { "cell_type": "code", "execution_count": 34, - "id": "d9058023", + "id": "bc3079a7", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:31.991754Z", - "iopub.status.busy": "2023-08-07T00:19:31.991636Z", - "iopub.status.idle": "2023-08-07T00:19:32.002452Z", - "shell.execute_reply": "2023-08-07T00:19:32.002189Z" + "iopub.execute_input": "2023-08-21T02:30:03.132111Z", + "iopub.status.busy": "2023-08-21T02:30:03.131975Z", + "iopub.status.idle": "2023-08-21T02:30:03.143298Z", + "shell.execute_reply": "2023-08-21T02:30:03.142948Z" } }, "outputs": [ @@ -1889,7 +1889,7 @@ }, { "cell_type": "markdown", - "id": "d0d5aba4", + "id": "0d059312", "metadata": {}, "source": [ "We see that using `C=10` yields two test set errors on these data.\n", diff --git a/Ch10-deeplearning-lab.Rmd b/Ch10-deeplearning-lab.Rmd index e6911cc..51674b6 100644 --- a/Ch10-deeplearning-lab.Rmd +++ b/Ch10-deeplearning-lab.Rmd @@ -1,19 +1,3 @@ ---- -jupyter: - jupytext: - cell_metadata_filter: -all - formats: ipynb,Rmd - text_representation: - extension: .Rmd - format_name: rmarkdown - format_version: '1.2' - jupytext_version: 1.14.7 - kernelspec: - display_name: Python 3 (ipykernel) - language: python - name: python3 ---- - # Chapter 10 @@ -872,7 +856,7 @@ for idx, (X_ ,Y_) in enumerate(cifar_dm.train_dataloader()): Before we start, we look at some of the training images; similar code produced -Figure 10.5 on page 164. The example below also illustrates +Figure 10.5 on page 447. The example below also illustrates that `TensorDataset` objects can be indexed with integers --- we are choosing random images from the training data by indexing `cifar_train`. In order to display correctly, we must reorder the dimensions by a call to `np.transpose()`. @@ -1705,7 +1689,6 @@ early stopping, since then the test performance would be biased. We form the training dataset similar to our `Hitters` example. - ```{python} datasets = [] diff --git a/Ch10-deeplearning-lab.ipynb b/Ch10-deeplearning-lab.ipynb index 835512f..2577eac 100644 --- a/Ch10-deeplearning-lab.ipynb +++ b/Ch10-deeplearning-lab.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "b672dcf6", + "id": "23016bca", "metadata": {}, "source": [ "\n", @@ -24,7 +24,7 @@ { "cell_type": "code", "execution_count": 1, - "id": "9b5b8319", + "id": "cf431f3f", "metadata": { "lines_to_next_cell": 2 }, @@ -48,7 +48,7 @@ }, { "cell_type": "markdown", - "id": "c0cb2c87", + "id": "667eff82", "metadata": {}, "source": [ "### Torch-Specific Imports\n", @@ -61,7 +61,7 @@ { "cell_type": "code", "execution_count": 2, - "id": "f66f362c", + "id": "1db00e03", "metadata": {}, "outputs": [], "source": [ @@ -73,7 +73,7 @@ }, { "cell_type": "markdown", - "id": "5ce27a8d", + "id": "b3407495", "metadata": {}, "source": [ "There are several other helper packages for `torch`. For instance,\n", @@ -87,7 +87,7 @@ { "cell_type": "code", "execution_count": 3, - "id": "17bce9cb", + "id": "3da0a445", "metadata": {}, "outputs": [], "source": [ @@ -98,7 +98,7 @@ }, { "cell_type": "markdown", - "id": "a14990c3", + "id": "e5c55b19", "metadata": {}, "source": [ "The package `pytorch_lightning` is a somewhat higher-level\n", @@ -111,7 +111,7 @@ { "cell_type": "code", "execution_count": 4, - "id": "4c3b6e43", + "id": "bbbf32fe", "metadata": {}, "outputs": [], "source": [ @@ -121,7 +121,7 @@ }, { "cell_type": "markdown", - "id": "e5bc78bd", + "id": "cf5ec401", "metadata": {}, "source": [ "In order to reproduce results we use `seed_everything()`. We will also instruct `torch` to use deterministic algorithms\n", @@ -131,7 +131,7 @@ { "cell_type": "code", "execution_count": 5, - "id": "6839d8ad", + "id": "3810caf4", "metadata": {}, "outputs": [ { @@ -150,7 +150,7 @@ }, { "cell_type": "markdown", - "id": "1f1490e7", + "id": "c3dea945", "metadata": {}, "source": [ "We will use several datasets shipped with `torchvision` for our\n", @@ -161,7 +161,7 @@ { "cell_type": "code", "execution_count": 6, - "id": "07dba2dd", + "id": "454dc419", "metadata": { "lines_to_next_cell": 0 }, @@ -179,7 +179,7 @@ }, { "cell_type": "markdown", - "id": "36ec305c", + "id": "f7f9578a", "metadata": {}, "source": [ "We have provided a few utilities in `ISLP` specifically for this lab.\n", @@ -197,7 +197,7 @@ { "cell_type": "code", "execution_count": 7, - "id": "89763447", + "id": "cd43a4c6", "metadata": {}, "outputs": [], "source": [ @@ -209,7 +209,7 @@ }, { "cell_type": "markdown", - "id": "dfc13283", + "id": "c5231b9d", "metadata": {}, "source": [ "In addition we have included some helper\n", @@ -226,7 +226,7 @@ { "cell_type": "code", "execution_count": 8, - "id": "ac5ab1b0", + "id": "eaf84e9c", "metadata": {}, "outputs": [], "source": [ @@ -238,7 +238,7 @@ }, { "cell_type": "markdown", - "id": "04f757bd", + "id": "c42bc542", "metadata": {}, "source": [ "Finally, we introduce some utility imports not directly related to\n", @@ -255,7 +255,7 @@ { "cell_type": "code", "execution_count": 9, - "id": "5a5468e6", + "id": "d007a49b", "metadata": { "lines_to_next_cell": 2 }, @@ -267,7 +267,7 @@ }, { "cell_type": "markdown", - "id": "690a5255", + "id": "d0fe1cff", "metadata": {}, "source": [ "## Single Layer Network on Hitters Data\n", @@ -277,7 +277,7 @@ { "cell_type": "code", "execution_count": 10, - "id": "d635398b", + "id": "9da64364", "metadata": { "lines_to_next_cell": 0 }, @@ -289,7 +289,7 @@ }, { "cell_type": "markdown", - "id": "a0fd86f3", + "id": "0e80a8c0", "metadata": {}, "source": [ " We will fit two linear models (least squares and lasso) and compare their performance\n", @@ -305,7 +305,7 @@ { "cell_type": "code", "execution_count": 11, - "id": "2c621749", + "id": "a2cfe999", "metadata": { "lines_to_next_cell": 0 }, @@ -318,7 +318,7 @@ }, { "cell_type": "markdown", - "id": "f32a66d7", + "id": "5f0851bc", "metadata": {}, "source": [ "The `to_numpy()` method above converts `pandas`\n", @@ -331,7 +331,7 @@ }, { "cell_type": "markdown", - "id": "b5565350", + "id": "afe4eb28", "metadata": {}, "source": [ "We now split the data into test and training, fixing the random\n", @@ -341,7 +341,7 @@ { "cell_type": "code", "execution_count": 12, - "id": "cd19596a", + "id": "5c600069", "metadata": {}, "outputs": [], "source": [ @@ -356,7 +356,7 @@ }, { "cell_type": "markdown", - "id": "b82951aa", + "id": "e27a6313", "metadata": {}, "source": [ "### Linear Models\n", @@ -366,7 +366,7 @@ { "cell_type": "code", "execution_count": 13, - "id": "e4bfcd5a", + "id": "6ea4f551", "metadata": {}, "outputs": [ { @@ -388,7 +388,7 @@ }, { "cell_type": "markdown", - "id": "bf3523a8", + "id": "e5fe8c6b", "metadata": {}, "source": [ "Next we fit the lasso using `sklearn`. We are using\n", @@ -402,7 +402,7 @@ { "cell_type": "code", "execution_count": 14, - "id": "36f8290b", + "id": "f1b8b3f5", "metadata": {}, "outputs": [], "source": [ @@ -414,7 +414,7 @@ }, { "cell_type": "markdown", - "id": "9f1bf0ad", + "id": "39a58ed0", "metadata": {}, "source": [ "We need to create a grid of values for $\\lambda$. As is common practice, \n", @@ -425,7 +425,7 @@ { "cell_type": "code", "execution_count": 15, - "id": "5015c394", + "id": "50ce4171", "metadata": { "lines_to_next_cell": 0 }, @@ -440,7 +440,7 @@ }, { "cell_type": "markdown", - "id": "89f6b4e4", + "id": "2cdc3810", "metadata": {}, "source": [ "Note that we had to transform the data first, since the scale of the variables impacts the choice of $\\lambda$.\n", @@ -450,7 +450,7 @@ { "cell_type": "code", "execution_count": 16, - "id": "b5dc7d68", + "id": "94c4ab75", "metadata": {}, "outputs": [], "source": [ @@ -466,7 +466,7 @@ }, { "cell_type": "markdown", - "id": "0b64a882", + "id": "e5262d51", "metadata": {}, "source": [ "We extract the lasso model with best cross-validated mean absolute error, and evaluate its\n", @@ -477,7 +477,7 @@ { "cell_type": "code", "execution_count": 17, - "id": "2c49196f", + "id": "86e45999", "metadata": { "lines_to_next_cell": 0 }, @@ -501,7 +501,7 @@ }, { "cell_type": "markdown", - "id": "61f016c9", + "id": "1f905d89", "metadata": {}, "source": [ "This is similar to the results we got for the linear model fit by least squares. However, these results can vary a lot for different train/test splits; we encourage the reader to try a different seed in code block 12 and rerun the subsequent code up to this point.\n", @@ -519,7 +519,7 @@ { "cell_type": "code", "execution_count": 18, - "id": "df5864e2", + "id": "00ac7606", "metadata": {}, "outputs": [], "source": [ @@ -541,7 +541,7 @@ }, { "cell_type": "markdown", - "id": "4b05cc28", + "id": "a25aab3b", "metadata": {}, "source": [ "The `class` statement identifies the code chunk as a\n", @@ -577,7 +577,7 @@ { "cell_type": "code", "execution_count": 19, - "id": "da601fe1", + "id": "bb7ff7e9", "metadata": {}, "outputs": [], "source": [ @@ -586,7 +586,7 @@ }, { "cell_type": "markdown", - "id": "326f3b54", + "id": "ac0c6bf7", "metadata": {}, "source": [ "The object `self.sequential` is a composition of four maps. The\n", @@ -601,7 +601,7 @@ }, { "cell_type": "markdown", - "id": "a246aedb", + "id": "9e8e69ac", "metadata": {}, "source": [ "The package `torchinfo` provides a `summary()` function that neatly summarizes\n", @@ -612,7 +612,7 @@ { "cell_type": "code", "execution_count": 20, - "id": "15dd23a9", + "id": "b60d34e1", "metadata": { "lines_to_next_cell": 0 }, @@ -658,7 +658,7 @@ }, { "cell_type": "markdown", - "id": "3cb4b8bc", + "id": "aa499e3f", "metadata": {}, "source": [ "We have truncated the end of the output slightly, here and in subsequent uses.\n", @@ -680,7 +680,7 @@ { "cell_type": "code", "execution_count": 21, - "id": "dae83bc5", + "id": "42f63682", "metadata": { "lines_to_next_cell": 0 }, @@ -693,7 +693,7 @@ }, { "cell_type": "markdown", - "id": "80475fa2", + "id": "6e184dcd", "metadata": {}, "source": [ "We do the same for the test data." @@ -702,7 +702,7 @@ { "cell_type": "code", "execution_count": 22, - "id": "81e217a8", + "id": "57fbf564", "metadata": {}, "outputs": [], "source": [ @@ -713,7 +713,7 @@ }, { "cell_type": "markdown", - "id": "7f49263d", + "id": "09cabaa8", "metadata": {}, "source": [ "Finally, this dataset is passed to a `DataLoader()` which ultimately\n", @@ -737,7 +737,7 @@ { "cell_type": "code", "execution_count": 23, - "id": "e5359e31", + "id": "570bdd73", "metadata": {}, "outputs": [], "source": [ @@ -746,7 +746,7 @@ }, { "cell_type": "markdown", - "id": "105b015f", + "id": "a7bc2151", "metadata": {}, "source": [ "The general training setup in `pytorch_lightning` involves\n", @@ -769,7 +769,7 @@ { "cell_type": "code", "execution_count": 24, - "id": "7a19d6d8", + "id": "c08a4d6d", "metadata": {}, "outputs": [], "source": [ @@ -782,7 +782,7 @@ }, { "cell_type": "markdown", - "id": "8d1f2a76", + "id": "db5447fa", "metadata": {}, "source": [ "Next we must provide a `pytorch_lightning` module that controls\n", @@ -797,7 +797,7 @@ { "cell_type": "code", "execution_count": 25, - "id": "07bc10ef", + "id": "aaa1e593", "metadata": {}, "outputs": [], "source": [ @@ -807,7 +807,7 @@ }, { "cell_type": "markdown", - "id": "1ebf9835", + "id": "8500a2ba", "metadata": {}, "source": [ " By using the `SimpleModule.regression()` method, we indicate that we will use squared-error loss as in\n", @@ -824,7 +824,7 @@ { "cell_type": "code", "execution_count": 26, - "id": "08c71fb4", + "id": "1a4e9b3c", "metadata": {}, "outputs": [], "source": [ @@ -833,7 +833,7 @@ }, { "cell_type": "markdown", - "id": "511617c3", + "id": "77e3c7a5", "metadata": {}, "source": [ "Finally we are ready to train our model and log the results. We\n", @@ -855,7 +855,7 @@ { "cell_type": "code", "execution_count": 27, - "id": "81a8c626", + "id": "2f839fde", "metadata": { "lines_to_next_cell": 0 }, @@ -897,7 +897,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "4cb0d8941d43434883b4142c14e198f8", + "model_id": "3f81045e13e641428a7f37ab7ceb43be", "version_major": 2, "version_minor": 0 }, @@ -1569,7 +1569,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "840b55ce195b42edbe9f3fd394dec7e5", + "model_id": "553e586e7cd54ad3bb9e01d0fc37754e", "version_major": 2, "version_minor": 0 }, @@ -1583,7 +1583,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "2e3d175f2c294fac992ff04733267452", + "model_id": "05c22b9bdd4c48098756a37b57fc963b", "version_major": 2, "version_minor": 0 }, @@ -1597,7 +1597,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "2d0477c9d13945bb8a6cbd38620bc93f", + "model_id": "f073bf03d90b4e318352c5de82bb9953", "version_major": 2, "version_minor": 0 }, @@ -1627,7 +1627,7 @@ }, { "cell_type": "markdown", - "id": "abe1a22c", + "id": "4018f616", "metadata": {}, "source": [ "At each step of SGD, the algorithm randomly selects 32 training observations for\n", @@ -1643,7 +1643,7 @@ { "cell_type": "code", "execution_count": 28, - "id": "083670c6", + "id": "672b4410", "metadata": { "lines_to_next_cell": 2 }, @@ -1651,7 +1651,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "ddc1a0eaac9e4fcda9e91e34abdcc67d", + "model_id": "f0857a2a00a847c084831c51d7fd8dfd", "version_major": 2, "version_minor": 0 }, @@ -1704,7 +1704,7 @@ }, { "cell_type": "markdown", - "id": "c6b3317b", + "id": "0f4e3b11", "metadata": {}, "source": [ "The results of the fit have been logged into a CSV file. We can find the\n", @@ -1720,7 +1720,7 @@ { "cell_type": "code", "execution_count": 29, - "id": "02ba9edf", + "id": "8cf6ef60", "metadata": {}, "outputs": [], "source": [ @@ -1729,7 +1729,7 @@ }, { "cell_type": "markdown", - "id": "daf8ed8d", + "id": "537efe03", "metadata": {}, "source": [ "Since we will produce similar plots in later examples, we write a\n", @@ -1739,7 +1739,7 @@ { "cell_type": "code", "execution_count": 30, - "id": "4184557c", + "id": "67ce1e26", "metadata": { "lines_to_next_cell": 0 }, @@ -1773,7 +1773,7 @@ }, { "cell_type": "markdown", - "id": "026c1c4d", + "id": "53309bb0", "metadata": {}, "source": [ "We now set up our axes, and use our function to produce the MAE plot." @@ -1782,7 +1782,7 @@ { "cell_type": "code", "execution_count": 31, - "id": "3244deeb", + "id": "deb684d2", "metadata": { "lines_to_next_cell": 2 }, @@ -1811,7 +1811,7 @@ }, { "cell_type": "markdown", - "id": "670a3e8f", + "id": "eab05619", "metadata": {}, "source": [ "We can predict directly from the final model, and\n", @@ -1829,7 +1829,7 @@ { "cell_type": "code", "execution_count": 32, - "id": "36bb545e", + "id": "454033dd", "metadata": { "lines_to_next_cell": 0 }, @@ -1853,7 +1853,7 @@ }, { "cell_type": "markdown", - "id": "ae4b9ca6", + "id": "b3625ff5", "metadata": {}, "source": [ " " @@ -1861,7 +1861,7 @@ }, { "cell_type": "markdown", - "id": "b8b7fd3c", + "id": "f46e3883", "metadata": {}, "source": [ "### Cleanup\n", @@ -1875,7 +1875,7 @@ { "cell_type": "code", "execution_count": 33, - "id": "00371f48", + "id": "71b3d0d0", "metadata": { "lines_to_next_cell": 2 }, @@ -1894,7 +1894,7 @@ }, { "cell_type": "markdown", - "id": "5707d61c", + "id": "28d1c832", "metadata": {}, "source": [ "## Multilayer Network on the MNIST Digit Data\n", @@ -1908,7 +1908,7 @@ { "cell_type": "code", "execution_count": 34, - "id": "3e28d6ba", + "id": "def8605c", "metadata": {}, "outputs": [ { @@ -1939,7 +1939,7 @@ }, { "cell_type": "markdown", - "id": "eb8b7e29", + "id": "95ffc346", "metadata": {}, "source": [ "There are 60,000 images in the training data and 10,000 in the test\n", @@ -1963,7 +1963,7 @@ { "cell_type": "code", "execution_count": 35, - "id": "cb04829e", + "id": "8b9e2b8c", "metadata": {}, "outputs": [], "source": [ @@ -1976,7 +1976,7 @@ }, { "cell_type": "markdown", - "id": "1119e22a", + "id": "91256a1b", "metadata": {}, "source": [ "Let’s take a look at the data that will get fed into our network. We loop through the first few\n", @@ -1986,7 +1986,7 @@ { "cell_type": "code", "execution_count": 36, - "id": "c4a265fc", + "id": "a4b95dc6", "metadata": { "lines_to_next_cell": 2 }, @@ -2012,7 +2012,7 @@ }, { "cell_type": "markdown", - "id": "f65ada90", + "id": "12e7eddb", "metadata": {}, "source": [ "We see that the $X$ for each batch consists of 256 images of size `1x28x28`.\n", @@ -2025,7 +2025,7 @@ { "cell_type": "code", "execution_count": 37, - "id": "60339a03", + "id": "17714c25", "metadata": {}, "outputs": [], "source": [ @@ -2051,7 +2051,7 @@ }, { "cell_type": "markdown", - "id": "5b8f87da", + "id": "9893ffb2", "metadata": {}, "source": [ "We see that in the first layer, each `1x28x28` image is flattened, then mapped to\n", @@ -2065,7 +2065,7 @@ { "cell_type": "code", "execution_count": 38, - "id": "1d0f24b2", + "id": "88a4bf46", "metadata": {}, "outputs": [], "source": [ @@ -2074,7 +2074,7 @@ }, { "cell_type": "markdown", - "id": "0ee4771e", + "id": "049febff", "metadata": {}, "source": [ "We can check that the model produces output of expected size based\n", @@ -2084,7 +2084,7 @@ { "cell_type": "code", "execution_count": 39, - "id": "42a4931b", + "id": "ea0d9387", "metadata": {}, "outputs": [ { @@ -2104,7 +2104,7 @@ }, { "cell_type": "markdown", - "id": "628d56f9", + "id": "638026d1", "metadata": {}, "source": [ "Let’s take a look at the summary of the model. Instead of an `input_size` we can pass\n", @@ -2115,7 +2115,7 @@ { "cell_type": "code", "execution_count": 40, - "id": "69e62d88", + "id": "17c34a29", "metadata": {}, "outputs": [ { @@ -2164,7 +2164,7 @@ }, { "cell_type": "markdown", - "id": "f8e77337", + "id": "73e3cd00", "metadata": {}, "source": [ "Having set up both the model and the data module, fitting this model is\n", @@ -2177,7 +2177,7 @@ { "cell_type": "code", "execution_count": 41, - "id": "2027a378", + "id": "a0608bd1", "metadata": {}, "outputs": [], "source": [ @@ -2188,7 +2188,7 @@ }, { "cell_type": "markdown", - "id": "9146b9b5", + "id": "6959c893", "metadata": {}, "source": [ "Now we are ready to go. The final step is to supply training data, and fit the model." @@ -2197,7 +2197,7 @@ { "cell_type": "code", "execution_count": 42, - "id": "4a5e941d", + "id": "cf8e3d9d", "metadata": { "lines_to_next_cell": 0 }, @@ -2239,7 +2239,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "23f1384f37824cc59404e8a856f4962d", + "model_id": "2c7fc7b3fc61455b88cf7020ce62d19e", "version_major": 2, "version_minor": 0 }, @@ -2689,7 +2689,7 @@ }, { "cell_type": "markdown", - "id": "8099bdc9", + "id": "cc8724fa", "metadata": {}, "source": [ "We have suppressed the output here, which is a progress report on the\n", @@ -2707,7 +2707,7 @@ }, { "cell_type": "markdown", - "id": "d6c3bbbc", + "id": "b9dc38ac", "metadata": {}, "source": [ "`SimpleModule.classification()` includes\n", @@ -2720,7 +2720,7 @@ { "cell_type": "code", "execution_count": 43, - "id": "603a278a", + "id": "45e03385", "metadata": { "lines_to_next_cell": 0 }, @@ -2750,7 +2750,7 @@ }, { "cell_type": "markdown", - "id": "654cec05", + "id": "1679f357", "metadata": {}, "source": [ "Once again we evaluate the accuracy using the `test()` method of our trainer. This model achieves\n", @@ -2760,13 +2760,13 @@ { "cell_type": "code", "execution_count": 44, - "id": "93dc968b", + "id": "3a875b78", "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "3eeaa8a87a31475bb36fe8dd24e694d9", + "model_id": "759de3284ee24f5c8191c1fc922f3e1d", "version_major": 2, "version_minor": 0 }, @@ -2820,7 +2820,7 @@ }, { "cell_type": "markdown", - "id": "5f7dc344", + "id": "12ef4787", "metadata": {}, "source": [ "Table 10.1 also reports the error rates resulting from LDA (Chapter 4) and multiclass logistic\n", @@ -2834,7 +2834,7 @@ { "cell_type": "code", "execution_count": 45, - "id": "e1975a3e", + "id": "2f035d83", "metadata": {}, "outputs": [], "source": [ @@ -2855,7 +2855,7 @@ { "cell_type": "code", "execution_count": 46, - "id": "14c79199", + "id": "2cd67ad8", "metadata": { "lines_to_next_cell": 0 }, @@ -2899,7 +2899,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "9ecb4b2d1cba45a9b762950d7ad365e4", + "model_id": "c932821add0e4296a5ff2122a94b6090", "version_major": 2, "version_minor": 0 }, @@ -3347,7 +3347,7 @@ }, { "cell_type": "markdown", - "id": "f84cfa36", + "id": "20a316a1", "metadata": {}, "source": [ "We fit the model just as before and compute the test results." @@ -3356,7 +3356,7 @@ { "cell_type": "code", "execution_count": 47, - "id": "acb6f88d", + "id": "3900d16e", "metadata": { "lines_to_next_cell": 0 }, @@ -3364,7 +3364,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "96180813745947aa8b3705fa737d63a0", + "model_id": "63d666ec843544bf804c3fc6fc5fd6ab", "version_major": 2, "version_minor": 0 }, @@ -3418,7 +3418,7 @@ }, { "cell_type": "markdown", - "id": "05244a5e", + "id": "ca80aa75", "metadata": {}, "source": [ "The accuracy is above 90% even for this pretty simple model.\n", @@ -3430,7 +3430,7 @@ { "cell_type": "code", "execution_count": 48, - "id": "f5b3f811", + "id": "679f2ea5", "metadata": { "lines_to_next_cell": 2 }, @@ -3450,7 +3450,7 @@ }, { "cell_type": "markdown", - "id": "b5b395bb", + "id": "dd8ba586", "metadata": {}, "source": [ "## Convolutional Neural Networks\n", @@ -3461,7 +3461,7 @@ { "cell_type": "code", "execution_count": 49, - "id": "e1caa7ac", + "id": "e4af6604", "metadata": {}, "outputs": [ { @@ -3484,7 +3484,7 @@ { "cell_type": "code", "execution_count": 50, - "id": "9e94a7b4", + "id": "2b613ecc", "metadata": {}, "outputs": [], "source": [ @@ -3501,7 +3501,7 @@ }, { "cell_type": "markdown", - "id": "219ccc6f", + "id": "af1d3cdc", "metadata": {}, "source": [ "The `CIFAR100` dataset consists of 50,000 training images, each represented by a three-dimensional tensor:\n", @@ -3515,7 +3515,7 @@ { "cell_type": "code", "execution_count": 51, - "id": "32c78c06", + "id": "4b325cb4", "metadata": { "lines_to_next_cell": 0 }, @@ -3530,7 +3530,7 @@ }, { "cell_type": "markdown", - "id": "e4570164", + "id": "f361276e", "metadata": {}, "source": [ "We again look at the shape of typical batches in our data loaders." @@ -3539,7 +3539,7 @@ { "cell_type": "code", "execution_count": 52, - "id": "b3c27322", + "id": "cb3d00cb", "metadata": { "lines_to_next_cell": 2 }, @@ -3565,11 +3565,11 @@ }, { "cell_type": "markdown", - "id": "f6152280", + "id": "08771862", "metadata": {}, "source": [ "Before we start, we look at some of the training images; similar code produced\n", - "Figure 10.5 on page 164. The example below also illustrates\n", + "Figure 10.5 on page 447. The example below also illustrates\n", "that `TensorDataset` objects can be indexed with integers --- we are choosing\n", "random images from the training data by indexing `cifar_train`. In order to display correctly,\n", "we must reorder the dimensions by a call to `np.transpose()`." @@ -3578,7 +3578,7 @@ { "cell_type": "code", "execution_count": 53, - "id": "c626e0ff", + "id": "60d09656", "metadata": { "lines_to_next_cell": 0 }, @@ -3611,7 +3611,7 @@ }, { "cell_type": "markdown", - "id": "2a1c4832", + "id": "642140af", "metadata": {}, "source": [ "Here the `imshow()` method recognizes from the shape of its argument that it is a 3-dimensional array, with the last dimension indexing the three RGB color channels.\n", @@ -3628,7 +3628,7 @@ { "cell_type": "code", "execution_count": 54, - "id": "9d5bcdf3", + "id": "f823da11", "metadata": {}, "outputs": [], "source": [ @@ -3652,7 +3652,7 @@ }, { "cell_type": "markdown", - "id": "a7204121", + "id": "00927159", "metadata": {}, "source": [ "Notice that we used the `padding = \"same\"` argument to\n", @@ -3673,7 +3673,7 @@ { "cell_type": "code", "execution_count": 55, - "id": "3e13e9bc", + "id": "1a172f7e", "metadata": {}, "outputs": [], "source": [ @@ -3700,7 +3700,7 @@ }, { "cell_type": "markdown", - "id": "1b07fb1a", + "id": "8455079f", "metadata": {}, "source": [ "We build the model and look at the summary. (We had created examples of `X_` earlier.)" @@ -3709,7 +3709,7 @@ { "cell_type": "code", "execution_count": 56, - "id": "15c4a382", + "id": "651e62b4", "metadata": { "lines_to_next_cell": 2 }, @@ -3772,7 +3772,7 @@ }, { "cell_type": "markdown", - "id": "b168c198", + "id": "7dd67ce7", "metadata": {}, "source": [ "The total number of trainable parameters is 964,516.\n", @@ -3806,7 +3806,7 @@ { "cell_type": "code", "execution_count": 57, - "id": "4a40238a", + "id": "63f2650e", "metadata": {}, "outputs": [], "source": [ @@ -3820,7 +3820,7 @@ { "cell_type": "code", "execution_count": 58, - "id": "8aab2c62", + "id": "a3e4bc28", "metadata": {}, "outputs": [ { @@ -3860,7 +3860,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "8473f6db1fdc40b7909b66fc6410277d", + "model_id": "40c811fa26da4690a95838e6ab0a8a98", "version_major": 2, "version_minor": 0 }, @@ -4310,7 +4310,7 @@ }, { "cell_type": "markdown", - "id": "090f6400", + "id": "c3fc9402", "metadata": {}, "source": [ "This model can take 10 minutes or more to run and achieves about 42% accuracy on the test\n", @@ -4326,7 +4326,7 @@ { "cell_type": "code", "execution_count": 59, - "id": "12474ef6", + "id": "6b161d93", "metadata": { "lines_to_next_cell": 0 }, @@ -4357,7 +4357,7 @@ }, { "cell_type": "markdown", - "id": "f3fe0cd4", + "id": "71dea0c8", "metadata": {}, "source": [ "Finally, we evaluate our model on our test data." @@ -4366,7 +4366,7 @@ { "cell_type": "code", "execution_count": 60, - "id": "9d632437", + "id": "ab8a91dc", "metadata": { "lines_to_next_cell": 2 }, @@ -4374,7 +4374,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "fc46f12820ff4ca281d8a035a53fa610", + "model_id": "6dced9ab160c4c30b094a877f330efba", "version_major": 2, "version_minor": 0 }, @@ -4428,7 +4428,7 @@ }, { "cell_type": "markdown", - "id": "4b69e259", + "id": "11d0e8b3", "metadata": {}, "source": [ "### Hardware Acceleration\n", @@ -4449,7 +4449,7 @@ { "cell_type": "code", "execution_count": 61, - "id": "52a43158", + "id": "6d9962ae", "metadata": { "lines_to_next_cell": 0 }, @@ -4491,7 +4491,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "efb32ed16b3946ebbdb7c6a1714c7347", + "model_id": "6409051044c94ad9af785a42df78d36e", "version_major": 2, "version_minor": 0 }, @@ -4940,7 +4940,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "ae6af1d96e5a4d1fa048bbbf0a3f5b7b", + "model_id": "4f37d3b614314b6fbf9dfb3df1775948", "version_major": 2, "version_minor": 0 }, @@ -4969,7 +4969,7 @@ }, { "cell_type": "markdown", - "id": "b72de871", + "id": "3faab186", "metadata": {}, "source": [ "This yields approximately two- or three-fold acceleration for each epoch.\n", @@ -4979,7 +4979,7 @@ }, { "cell_type": "markdown", - "id": "b86d6ef4", + "id": "31759785", "metadata": {}, "source": [ "## Using Pretrained CNN Models\n", @@ -5001,7 +5001,7 @@ { "cell_type": "code", "execution_count": 62, - "id": "db2febe9", + "id": "a71c9acb", "metadata": { "lines_to_next_cell": 2 }, @@ -5031,7 +5031,7 @@ }, { "cell_type": "markdown", - "id": "f6696ee2", + "id": "89071e87", "metadata": {}, "source": [ "We now set up the trained network with the weights we read in code block~6. The model has 50 layers, with a fair bit of complexity." @@ -5040,7 +5040,7 @@ { "cell_type": "code", "execution_count": 63, - "id": "2aabd724", + "id": "4f890244", "metadata": { "lines_to_next_cell": 0 }, @@ -5255,7 +5255,7 @@ }, { "cell_type": "markdown", - "id": "c4ee6ebe", + "id": "185bb4b5", "metadata": {}, "source": [ "We set the mode to `eval()` to ensure that the model is ready to predict on new data." @@ -5264,7 +5264,7 @@ { "cell_type": "code", "execution_count": 64, - "id": "6d27342d", + "id": "c4be9922", "metadata": { "lines_to_next_cell": 0 }, @@ -5461,7 +5461,7 @@ }, { "cell_type": "markdown", - "id": "3c1fbc71", + "id": "f0a3c519", "metadata": {}, "source": [ "Inspecting the output above, we see that when setting up the\n", @@ -5474,7 +5474,7 @@ { "cell_type": "code", "execution_count": 65, - "id": "efdbeda1", + "id": "2dc63d85", "metadata": {}, "outputs": [], "source": [ @@ -5483,7 +5483,7 @@ }, { "cell_type": "markdown", - "id": "38620865", + "id": "15ec1321", "metadata": {}, "source": [ "Let’s look at the predicted probabilities for each of the top 3 choices. First we compute\n", @@ -5495,7 +5495,7 @@ { "cell_type": "code", "execution_count": 66, - "id": "82ceab1c", + "id": "711d5ba7", "metadata": {}, "outputs": [], "source": [ @@ -5505,7 +5505,7 @@ }, { "cell_type": "markdown", - "id": "0e3ae755", + "id": "3b514c1e", "metadata": {}, "source": [ "In order to see the class labels, we must download the index file associated with `imagenet`. {This is avalable from the book website and [s3.amazonaws.com/deep-learning-models/image-models/imagenet_class_index.json](https://s3.amazonaws.com/deep-learning-models/image-models/imagenet_class_index.json).}" @@ -5514,7 +5514,7 @@ { "cell_type": "code", "execution_count": 67, - "id": "921ee168", + "id": "b22f70d8", "metadata": {}, "outputs": [], "source": [ @@ -5528,7 +5528,7 @@ }, { "cell_type": "markdown", - "id": "9fdd7587", + "id": "a5812782", "metadata": {}, "source": [ "We’ll now construct a data frame for each image file\n", @@ -5539,7 +5539,7 @@ { "cell_type": "code", "execution_count": 68, - "id": "e7770017", + "id": "b19c6bd1", "metadata": { "lines_to_next_cell": 2 }, @@ -5592,7 +5592,7 @@ }, { "cell_type": "markdown", - "id": "12862208", + "id": "cd6bd40b", "metadata": {}, "source": [ "We see that the model\n", @@ -5605,7 +5605,7 @@ { "cell_type": "code", "execution_count": 69, - "id": "af2f9856", + "id": "ba80b615", "metadata": { "lines_to_next_cell": 2 }, @@ -5622,7 +5622,7 @@ }, { "cell_type": "markdown", - "id": "d9e8d59c", + "id": "2e6eafaf", "metadata": {}, "source": [ "## IMDB Document Classification\n", @@ -5649,7 +5649,7 @@ { "cell_type": "code", "execution_count": 70, - "id": "afd98123", + "id": "ba6d2d2c", "metadata": { "lines_to_next_cell": 0 }, @@ -5676,7 +5676,7 @@ }, { "cell_type": "markdown", - "id": "28a01855", + "id": "ebeeb069", "metadata": {}, "source": [ "The datasets `imdb_seq_train` and `imdb_seq_test` are\n", @@ -5694,7 +5694,7 @@ { "cell_type": "code", "execution_count": 71, - "id": "5981eb05", + "id": "93bda908", "metadata": {}, "outputs": [ { @@ -5715,7 +5715,7 @@ }, { "cell_type": "markdown", - "id": "b579cb29", + "id": "6de86e76", "metadata": {}, "source": [ "For our first model, we have created a binary feature for each\n", @@ -5728,7 +5728,7 @@ { "cell_type": "code", "execution_count": 72, - "id": "f08024ba", + "id": "40943b7d", "metadata": { "lines_to_next_cell": 0 }, @@ -5746,7 +5746,7 @@ }, { "cell_type": "markdown", - "id": "c070a319", + "id": "9328d75c", "metadata": {}, "source": [ "We’ll use a two-layer model for our first model." @@ -5755,7 +5755,7 @@ { "cell_type": "code", "execution_count": 73, - "id": "7fd34906", + "id": "2117fd9f", "metadata": { "lines_to_next_cell": 0 }, @@ -5783,7 +5783,7 @@ }, { "cell_type": "markdown", - "id": "fcc2a8af", + "id": "845b4d8e", "metadata": {}, "source": [ "We now instantiate our model and look at a summary." @@ -5792,7 +5792,7 @@ { "cell_type": "code", "execution_count": 74, - "id": "56f74fdb", + "id": "66d0b710", "metadata": {}, "outputs": [ { @@ -5836,7 +5836,7 @@ }, { "cell_type": "markdown", - "id": "a32aca43", + "id": "c8bdad40", "metadata": {}, "source": [ "We’ll again use\n", @@ -5854,7 +5854,7 @@ { "cell_type": "code", "execution_count": 75, - "id": "3da7e0bc", + "id": "9df8b4cf", "metadata": {}, "outputs": [], "source": [ @@ -5866,7 +5866,7 @@ }, { "cell_type": "markdown", - "id": "940c8342", + "id": "95cc3b4f", "metadata": {}, "source": [ "Having loaded the datasets into a data module\n", @@ -5877,7 +5877,7 @@ { "cell_type": "code", "execution_count": 76, - "id": "3b6de185", + "id": "73684c66", "metadata": {}, "outputs": [ { @@ -5925,7 +5925,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "57e25e1e102745c18849507d8fe93fe3", + "model_id": "253cf3e077d845569cdc459ef74902b6", "version_major": 2, "version_minor": 0 }, @@ -6376,7 +6376,7 @@ }, { "cell_type": "markdown", - "id": "5985c44a", + "id": "f2e03c88", "metadata": {}, "source": [ "Evaluating the test error yields roughly 86% accuracy." @@ -6385,7 +6385,7 @@ { "cell_type": "code", "execution_count": 77, - "id": "97f86a32", + "id": "01c6e5ff", "metadata": { "lines_to_next_cell": 2 }, @@ -6393,7 +6393,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "57a8b619aaf049b4b06550a47d5e3611", + "model_id": "f2b40a42021f4a9183c3d7d2d545e83b", "version_major": 2, "version_minor": 0 }, @@ -6447,7 +6447,7 @@ }, { "cell_type": "markdown", - "id": "3d677b24", + "id": "c1976042", "metadata": {}, "source": [ "### Comparison to Lasso\n", @@ -6460,7 +6460,7 @@ { "cell_type": "code", "execution_count": 78, - "id": "e36e1542", + "id": "4d5b9d1d", "metadata": {}, "outputs": [], "source": [ @@ -6473,7 +6473,7 @@ }, { "cell_type": "markdown", - "id": "8216f2e7", + "id": "b78eb64e", "metadata": {}, "source": [ "Similar to what we did in\n", @@ -6484,7 +6484,7 @@ { "cell_type": "code", "execution_count": 79, - "id": "ee6d6859", + "id": "e2a88e57", "metadata": { "lines_to_next_cell": 0 }, @@ -6497,7 +6497,7 @@ }, { "cell_type": "markdown", - "id": "cf9b703f", + "id": "81380bee", "metadata": {}, "source": [ "With `LogisticRegression()` the regularization parameter\n", @@ -6509,7 +6509,7 @@ { "cell_type": "code", "execution_count": 80, - "id": "35a6e3c2", + "id": "9a3cf7a3", "metadata": { "lines_to_next_cell": 0 }, @@ -6524,7 +6524,7 @@ }, { "cell_type": "markdown", - "id": "49cec308", + "id": "9ee15d44", "metadata": {}, "source": [ "The path of 50 values takes approximately 40 seconds to run." @@ -6533,7 +6533,7 @@ { "cell_type": "code", "execution_count": 81, - "id": "a8943a6a", + "id": "b46f02c2", "metadata": {}, "outputs": [], "source": [ @@ -6549,7 +6549,7 @@ }, { "cell_type": "markdown", - "id": "4f20738d", + "id": "eb3e3871", "metadata": {}, "source": [ "The coefficient and intercepts have an extraneous dimension which can be removed\n", @@ -6559,7 +6559,7 @@ { "cell_type": "code", "execution_count": 82, - "id": "08268ae5", + "id": "e5fb6afa", "metadata": { "lines_to_next_cell": 0 }, @@ -6571,7 +6571,7 @@ }, { "cell_type": "markdown", - "id": "94991ca8", + "id": "f66fa37c", "metadata": {}, "source": [ "We’ll now make a plot to compare our neural network results with the\n", @@ -6581,7 +6581,7 @@ { "cell_type": "code", "execution_count": 83, - "id": "e98f4506", + "id": "cad28f1a", "metadata": { "lines_to_next_cell": 0 }, @@ -6613,7 +6613,7 @@ }, { "cell_type": "markdown", - "id": "aac5c38c", + "id": "c58ff7cb", "metadata": {}, "source": [ "Notice the use of `%%capture`, which suppresses the displaying of the partially completed figure. This is useful\n", @@ -6624,7 +6624,7 @@ { "cell_type": "code", "execution_count": 84, - "id": "6925d53a", + "id": "a66ecdd8", "metadata": { "lines_to_next_cell": 0 }, @@ -6660,7 +6660,7 @@ }, { "cell_type": "markdown", - "id": "2a8b7736", + "id": "fa1e2550", "metadata": {}, "source": [ "From the graphs we see that the accuracy of the lasso logistic regression peaks at about $0.88$, as it does for the neural network.\n", @@ -6671,7 +6671,7 @@ { "cell_type": "code", "execution_count": 85, - "id": "6d1f7885", + "id": "62440c1c", "metadata": { "lines_to_next_cell": 2 }, @@ -6687,7 +6687,7 @@ }, { "cell_type": "markdown", - "id": "4f79c23a", + "id": "fe67520f", "metadata": {}, "source": [ "## Recurrent Neural Networks\n", @@ -6697,7 +6697,7 @@ }, { "cell_type": "markdown", - "id": "3d376496", + "id": "a9bcdd2a", "metadata": {}, "source": [ "### Sequential Models for Document Classification\n", @@ -6717,7 +6717,7 @@ { "cell_type": "code", "execution_count": 86, - "id": "b5c2b72c", + "id": "c73d6e28", "metadata": {}, "outputs": [], "source": [ @@ -6731,7 +6731,7 @@ }, { "cell_type": "markdown", - "id": "4d1b3ef1", + "id": "1edd3143", "metadata": {}, "source": [ "The first layer of the RNN is an embedding layer of size 32, which will be\n", @@ -6748,7 +6748,7 @@ }, { "cell_type": "markdown", - "id": "fe55c7fa", + "id": "b73e08ab", "metadata": {}, "source": [ "The second layer is an LSTM with 32 units, and the output\n", @@ -6760,7 +6760,7 @@ { "cell_type": "code", "execution_count": 87, - "id": "8985cdb1", + "id": "cc9bbd00", "metadata": { "lines_to_next_cell": 0 }, @@ -6781,7 +6781,7 @@ }, { "cell_type": "markdown", - "id": "78fc988d", + "id": "5e9f28dd", "metadata": {}, "source": [ "We instantiate and take a look at the summary of the model, using the\n", @@ -6791,7 +6791,7 @@ { "cell_type": "code", "execution_count": 88, - "id": "79184187", + "id": "5c9ffb46", "metadata": {}, "outputs": [ { @@ -6833,7 +6833,7 @@ }, { "cell_type": "markdown", - "id": "d5b2c85e", + "id": "5087ff10", "metadata": {}, "source": [ "The 10,003 is suppressed in the summary, but we see it in the\n", @@ -6843,7 +6843,7 @@ { "cell_type": "code", "execution_count": 89, - "id": "29036a47", + "id": "a2d6ddfd", "metadata": {}, "outputs": [], "source": [ @@ -6854,7 +6854,7 @@ { "cell_type": "code", "execution_count": 90, - "id": "0a31576a", + "id": "1d76f970", "metadata": { "lines_to_next_cell": 0 }, @@ -6896,7 +6896,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "4abe857cc251478b8855f53164fa5b45", + "model_id": "e24a4171456b412db47d6577cb336c37", "version_major": 2, "version_minor": 0 }, @@ -7206,7 +7206,7 @@ }, { "cell_type": "markdown", - "id": "a20a2113", + "id": "1cbf1b42", "metadata": {}, "source": [ "The rest is now similar to other networks we have fit. We\n", @@ -7216,13 +7216,13 @@ { "cell_type": "code", "execution_count": 91, - "id": "b2602a79", + "id": "d8a60d35", "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "1648bfd17bc04050b412c36afb32e092", + "model_id": "4e512ef8a7d348eea7f423a9ed96c86e", "version_major": 2, "version_minor": 0 }, @@ -7240,8 +7240,8 @@ "┃ Runningstage.testing ┃\n", "┃ metric DataLoader 0 ┃\n", "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━┩\n", - "│ test_accuracy 0.8388800024986267 │\n", - "│ test_loss 0.8145671486854553 │\n", + "│ test_accuracy 0.8480799794197083 │\n", + "│ test_loss 0.7677657604217529 │\n", "└───────────────────────────┴───────────────────────────┘\n", "\n" ], @@ -7250,8 +7250,8 @@ "┃\u001b[1m \u001b[0m\u001b[1m Runningstage.testing \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m┃\n", "┃\u001b[1m \u001b[0m\u001b[1m metric \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1m DataLoader 0 \u001b[0m\u001b[1m \u001b[0m┃\n", "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━┩\n", - "│\u001b[36m \u001b[0m\u001b[36m test_accuracy \u001b[0m\u001b[36m \u001b[0m│\u001b[35m \u001b[0m\u001b[35m 0.8388800024986267 \u001b[0m\u001b[35m \u001b[0m│\n", - "│\u001b[36m \u001b[0m\u001b[36m test_loss \u001b[0m\u001b[36m \u001b[0m│\u001b[35m \u001b[0m\u001b[35m 0.8145671486854553 \u001b[0m\u001b[35m \u001b[0m│\n", + "│\u001b[36m \u001b[0m\u001b[36m test_accuracy \u001b[0m\u001b[36m \u001b[0m│\u001b[35m \u001b[0m\u001b[35m 0.8480799794197083 \u001b[0m\u001b[35m \u001b[0m│\n", + "│\u001b[36m \u001b[0m\u001b[36m test_loss \u001b[0m\u001b[36m \u001b[0m│\u001b[35m \u001b[0m\u001b[35m 0.7677657604217529 \u001b[0m\u001b[35m \u001b[0m│\n", "└───────────────────────────┴───────────────────────────┘\n" ] }, @@ -7261,7 +7261,7 @@ { "data": { "text/plain": [ - "[{'test_loss': 0.8145671486854553, 'test_accuracy': 0.8388800024986267}]" + "[{'test_loss': 0.7677657604217529, 'test_accuracy': 0.8480799794197083}]" ] }, "execution_count": 91, @@ -7275,7 +7275,7 @@ }, { "cell_type": "markdown", - "id": "54857d49", + "id": "deca21cd", "metadata": {}, "source": [ "We once again show the learning progress, followed by cleanup." @@ -7284,7 +7284,7 @@ { "cell_type": "code", "execution_count": 92, - "id": "32c3e3da", + "id": "65d7276c", "metadata": { "lines_to_next_cell": 2 }, @@ -7301,7 +7301,7 @@ }, { "data": { - "image/png": "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CxQREaFXXnlFN910k84//3yNGjXqnMevqalRamqqoqKi9P7776u8vNyj/0idLl26aO3aterdu7f27NmjOXPmqEuXLvr1r3+tqVOn6uOPP9aWLVv0+uuvS5IiG3gfKisrlZKSoqSkJH3wwQc6dOiQbrvtNs2bN88jZOXl5SkmJkZ5eXnav3+/pk6dqmHDhmnOnDnnfD3wrYKCggavytVxuVwqKipSQUEBw2yBNo4rIa3ELbfcoi+++EJvvvmme9uaNWs0ZcoU9e3bV/fcc4+GDRum/v37684779S4ceP04osvNunYr7/+uj799FM9++yzSkhI0JVXXqlly5bV22/RokW6/PLLFR8frwkTJuiee+5xP0fHjh3VuXNntWvXTtHR0YqOjlbHjh3rHWPdunU6ceKEnn32WV1yySW66qqr9NRTT+m5555TWVmZe79u3brpqaee0kUXXaSf/vSn+slPfqLc3Fxv3zb4gC9XuwXQunAl5FzCw2uvSDTFW29J48efe79XX5WuvLJpz91EF110kS6//HI988wzGj16tPbv36+CggItXbpUTqdTy5Yt04svvqji4mJVV1erqqqqyX0+9u7dq7i4OPXu3du9LSkpqd5+GzZs0BNPPKEvvvhCx44d0w8//OD1Akd79+5VQkKCOp12BeiKK65QTU2N9u3bp6ioKEnSxRdf7DFDZkxMjPbs2ePVc8E3fLnaLYDWhSsh52Kz1TaJNOV27bWSw1H7mMaOFRdXu19TjtfYcRpx66236qWXXtLRo0e1Zs0anX/++fqv//ovPfroo8rKytKCBQuUl5enXbt2KSUlRdXV1Ra8QbW2bdumGTNmaPz48fr73/+uDz/8UPfdd5+lz3G69u3be9y32WyqqanxyXPBO8nJyXI4HO5mwTPZbDbFxcUpOTnZz5UBCDSEECvZ7VJWVu3fz/wPuO5+Zmbtfj5w/fXXKyQkROvWrdOzzz6rW265RTabTe+8844mTpyoG2+8UQkJCerfv78+++yzJh930KBBKioq8rh8/t5773ns8+6776pv37667777NGLECA0YMEAHDhzw2Cc0NPScnREHDRqk3bt3q7Ky0r3tnXfeUUhIiAYOHNjkmmFO3Wq3kuoFEatWuwXQOhBCrJaaKmVnS7GxntsdjtrtFqzy2ZjOnTtr6tSpWrhwoUpKSnTzzTdLkgYMGKCt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NpslNVVUVCguLk5FRUWKiIiw5JjwDz674MVnF7z47IJXeXm5+vTpo+7du1tyPKMhpGfPnrLb7SorK/PYXlZWpujo6CYdo3379rr00ku1f//+Bn8eFhamsLAwj21du3ZtVr3nEhERwRcqSPHZBS8+u+DFZxe8QkKs6VJqtGNqaGiohg8frtzcXPe2mpoa5ebmelztOBun06k9e/YoJibGV2UCAAAfMN4ck5GRoVmzZmnEiBEaNWqUMjMzVVlZqdmzZ0uSZs6cqdjYWC1fvlyStHTpUv3oRz/SBRdcoCNHjujRRx/VgQMHdNttt5l8GQAAwEvGQ8jUqVP17bff6v7771dpaamGDRumLVu2uDurHjx40OOyz3/+8x/NmTNHpaWl6tatm4YPH653331XgwcPNvUSFBYWpiVLltRr9kHg47MLXnx2wYvPLnhZ/dnZXFaNswEAAPCC8cnKAABA20QIAQAARhBCAACAEYQQAABgBCHEAitXrlR8fLw6dOigxMREbd++3XRJOIcHHnhANpvN43bRRReZLgsNeOuttzRhwgT17t1bNptNmzdv9vi5y+XS/fffr5iYGHXs2FFjx47V559/bqZYeDjXZ3fzzTfX+x6OGzfOTLHwsHz5co0cOVJdunRRr169NGnSJO3bt89jnxMnTmju3Lnq0aOHOnfurClTptSbfPRcCCEttGHDBmVkZGjJkiXauXOnEhISlJKSokOHDpkuDedw8cUXq6SkxH17++23TZeEBlRWViohIUErV65s8OePPPKInnjiCa1atUrvv/++OnXqpJSUFJ04ccLPleJM5/rsJGncuHEe38P169f7sUI05s0339TcuXP13nvvaevWrTp58qSuvfZaVVZWuve5++679T//8z/auHGj3nzzTX3zzTdKTU317olcaJFRo0a55s6d677vdDpdvXv3di1fvtxgVTiXJUuWuBISEkyXAS9Jcm3atMl9v6amxhUdHe169NFH3duOHDniCgsLc61fv95AhWjMmZ+dy+VyzZo1yzVx4kQj9cA7hw4dcklyvfnmmy6Xq/Z71r59e9fGjRvd++zdu9clybVt27YmH5crIS1QXV2tHTt2aOzYse5tISEhGjt2rLZt22awMjTF559/rt69e6t///6aMWOGDh48aLokeKmwsFClpaUe38HIyEglJibyHQwS+fn56tWrlwYO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", + "image/png": "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T6SFswghNmto3LP2V4QTE6VO/uCuWbNGDzzwgHbv3u1t69Spk/e/LcuSx+NRu3Znfut79uzpVx2hoaGKiYnx6z5Aa2L3D4iUlBTFx8efce5GSkpKk2u280gIf3os/HnMQJ1IC+cxHHMGlmWpoqKiUZeysjLdddddpx33zMzMVFlZWaP219g5wzExMd5LVFSUXC6X9/qnn36qzp0767XXXtOwYcMUFhamt99+W59//rkmTJig6OhoderUSSNGjNAbb7zhs99Th2NcLpf+93//V5MmTVJERIT69++vl19+2Xv7qcMxK1euVJcuXfT6669r4MCB6tSpk8aOHesTmk6cOKG77rpLXbp0Uffu3TV37lxlZGRo4sSJjXyHAHs4MQzh9NwNuznVY1EbxhrqtXW5XEpISGhWGENgIoScwdGjR9WpU6dGXaKiolRYWNjgvizL0oEDBxQVFdWo/dm5aut9992n//mf/9GuXbs0ePBglZeXa9y4ccrNzdWHH36osWPHavz48d6TBzZk8eLFuu666/TRRx9p3LhxuuGGG3T48OEGtz969Kgef/xxvfDCC9q0aZP27dune+65x3v7r371K/35z3/WihUr9M4776isrEzr16+362kjSNk958rJiZOBdAipUz0WgRbG0IJsOQNNADndyXeOHTtmffLJJ9axY8e8beXl5Y062ZATl/Lycr+f34oVK6yoqCjv9dqTJa1fv/6M973gggusp556ynu9T58+1pNPPum9LslasGBBndfmtdde83msf//7395aJFl79uzx3mfZsmVWdHS093p0dLT12GOPea+fOHHCOuuss6wJEyY09ik3Sn3vLQKTEydtc/JEaLVOnDhh5eXlWatWrbLy8vKafSIxJzh9ErT63ruEhIQ2c8K9YGD3CeyYE3IGERERKi8vb9S2mzZt0rhx48643auvvqof/vCHjXpsuwwfPtznenl5uR588EG98sorKioq0okTJ3Ts2LEz9oQMHjzY+98dO3ZUZGSkDh482OD2EREROvvss73XY2NjvduXlpaqpKREI0eO9N7udrs1bNgwVVdX+/X80DY4NeeqJSZOBsIqlk6vQOrkKqEITISQM3C5XI0+QuTqq69u1CS0q6++usU/dKc+h3vuuUcbN27U448/rnPOOUfh4eFKT09XVVXVaffTvn17n+sul+u0gaG+7et7bYAzcerIDYmJkyerHT6qb4KuHec1CYQwhpbDnBAbBdK45zvvvKObb75ZkyZN0qBBgxQTE6Mvv/yyRWuIiopSdHS0PvjgA2+bx+PRtm3bWrQOBAYn15pg4qSvtLQ0ffnll8rLy9OqVauUl5envXv3tqr5KwgOhBCbBcoktP79+ysnJ0fbt2/Xjh07NHXqVCNDILNmzdKSJUv017/+Vbt371ZmZqb+/e9/c/Zi1OHkkEkg/YBoKaxAipZACHFAIPyKeOKJJ9S1a1ddeumlGj9+vFJTU3XxxRe3eB1z587VlClTNG3aNCUnJ6tTp05KTU3l/C6ooyUW/gqEHxBAMOEEdifhJGfmVVdXa+DAgbruuuv08MMP27Zf3tvA1xInbat9HCZOAvWz+wR2TEyFUV999ZX+/ve/6/LLL1dlZaWefvpp7d27V1OnTjVdGloZp4/cOPlxmDgJtAyGY2BUSEiIVq5cqREjRuiyyy7Tzp079cYbb2jgwIGmS0MrxJAJEFzoCYFRCQkJeuedd0yXAYc4MbTBWhNA8CCEAHCEk2eTZsgECA4MxwCwnRMngwMQfAghAGzl5MngAAQXQggAWzm5simA4EIIAWCrljgZHIDgQAgBYCtOBgegsQghTvF4pPx8afXqmn9b+fj3qFGjNHv2bO/1xMREZWVlnfY+LpdL69evb/Zj27UfNJ3H41F+fr5Wr16t/Pz8Zs3X4GRwABqLEOKEnBwpMVEaPVqaOrXm38TEmnYHjB8/XmPHjq33toKCArlcLn300Ud+7fODDz7Q7bffbkd5Xg8++KCGDh1ap72oqEjXXHONrY+FxsvJyVFiYqJGjx6tqVOnavTo0UpMTGzyESycDA5AYxFC7JaTI6WnS6dOzCssrGl3IIjccsst2rhxY72TAVesWKHhw4dr8ODBfu2zZ8+eioiIsKvE04qJiVFYWFiLPBZ8OXUoLSubAmgMQsiZWJZUUdG4S1mZdNddNfepbz+SlJlZs11j9tfIcwv++Mc/Vs+ePbVy5Uqf9vLycq1du1YTJ07UlClTFBcXp4iICA0aNEirV68+7T5PHY757LPP9MMf/lAdOnTQ+eefr40bN9a5z9y5c3XuuecqIiJC/fr108KFC3X8+HFJ0sqVK7V48WLt2LFDLpdLLpfLW++pwzE7d+7UFVdcofDwcHXv3l233367ysvLvbfffPPNmjhxoh5//HHFxsaqe/fumjFjhvexgpmdwyZOH0obCGeTBmAWK6aeydGjUqdO9uzLsmp6SKKiGrd9ebnUseMZN2vXrp2mTZumlStXav78+d4u77Vr18rj8ejGG2/U2rVrNXfuXEVGRuqVV17RTTfdpLPPPlsjR4484/6rq6uVlpam6Ohovf/++yotLfWZP1Krc+fOWrlypXr37q2dO3fqtttuU+fOnXXvvfdq8uTJ+vjjj7Vhwwa98cYbkqSoel6HiooKpaamKjk5WR988IEOHjyoW2+9VTNnzvQJWXl5eYqNjVVeXp727NmjyZMna+jQobrtttvO+HwCld0rkPpzKG1TVydlZVMAp2W1MaWlpZYkq7S0tM5tx44dsz755BPr2LFj/2ksL7esmvjQ8pfy8kY/r127dlmSrLy8PG9bSkqKdeONN9a7/Y9+9CPrv//7v73XL7/8ciszM9N7vU+fPtaTTz5pWZZlvf7661a7du2swsJC7+2vvfaaJclat25dgzU99thj1rBhw7zXFy1aZA0ZMqTOdifv57nnnrO6du1qlZ/03F955RUrJCTEKi4utizLsjIyMqw+ffpYJ06c8G7z05/+1Jo8eXKDtdT73gaQl156yXK5XJYkn4vL5bJcLpf10ksv+b3PVatW1dlffZdVq1Y58IwABKLTfYc2BcMxZxIRUdMj0ZjLq682bp+vvtq4/fkxJ+O8887TpZdequeff16StGfPHhUUFOiWW26Rx+PRww8/rEGDBqlbt27q1KmTXn/9de3bt69R+961a5cSEhLUu3dvb1tycnKd7dasWaPLLrtMMTEx6tSpkxYsWNDoxzj5sYYMGaKOJ/UAXXbZZaqurtbu3bu9bRdccIHPxMbY2FgdPHjQr8cKFE4Nm3AoLQDTCCFn4nLVDIk05nL11VJ8fM19GtpXQkLNdo3ZX0P7acAtt9yil156Sd9++61WrFihs88+W5dffrkee+wxLV26VHPnzlVeXp62b9+u1NRUVVVV2fAC1di8ebNuuOEGjRs3Tn/729/04Ycfav78+bY+xsnat2/vc93lcqm6utqRxzLNqRVIOZQWgGmEEDu53dL3hybWCRC117OyarZzwHXXXaeQkBCtWrVKf/zjH/Vf//VfcrlceueddzRhwgTdeOONGjJkiPr166d//vOfjd7vwIEDtX//fp8VLt977z2fbd5991316dNH8+fP1/Dhw9W/f3999dVXPtuEhoae8df6wIEDtWPHDlVUVHjb3nnnHYWEhGjAgAGNrjmYOLUCKYfSAjCNEGK3tDQpO1s65dBExcfXtDt4ZECnTp00efJkzZs3T0VFRbr55pslSf3799fGjRv17rvvateuXfrZz36mkpKSRu93zJgxOvfcc5WRkaEdO3aooKBA8+fP99mmf//+2rdvn1588UV9/vnn+s1vfqN169b5bJOYmKi9e/dq+/btOnTokCorK+s81g033KAOHTooIyNDH3/8sfLy8jRr1izddNNNio6O9v9FCQJODptwKC0AkwghTkhLk778UsrLk1atqvl3715HA0itW265Rf/+97+VmprqncOxYMECXXzxxUpNTdWoUaMUExOjiRMnNnqfISEhWrdunY4dO6aRI0fq1ltv1S9/+UufbX7yk5/o7rvv1syZMzV06FC9++67Wrhwoc821157rcaOHavRo0erZ8+e9R4mHBERoddff12HDx/WiBEjlJ6eriuvvFJPP/20/y9GkHB62IRDaQGY4rLqm+0WxMrKyhQVFaXS0lJFRkb63Pbdd99p79696tu3rzp06GCoQjgh0N/b2kXFJPlMUK0NJvRaAGgJp/sObQp6QoAAwLAJgGDEYmVAgEhLS9OECRNUUFCgoqIixcbGKiUlhYmjAAIWIQQIIKxACiCYMBwDAACMIITUo43N1W0TeE8BoPVhOOYktatwHj16VOHh4YargZ2OHj0qqe5Kq07xeDzM3QCAMyCEnMTtdqtLly7ec5BEREQ0uDYDAoNlWTp69KgOHjyoLl26tEgQsPtstwAQrAghp4iJiZGkoD0ZWlvVpUsX73vrpNr1PE4d/iksLFR6ejqH0wLASVisrAEej0fHjx9vwcrglPbt27dID4jH41FiYmKDJ5tzuVyKj4/X3r17GZoBEJDsXqyMnpAGuN1uvijgF3/OdsthtgDA0TGAbZw62y0ABCtCCGATJ892CwDBiBAC2MTps90CQLAhhAA2cbvdWrp0qSTVCSK117OysphrBADfI4SgzfJ4PMrPz9fq1auVn58vj8fT7H1ytlsAaDwO0UWb5PSCYqyYCiAY2f0dSghBm9PQgmK1Qyb0WABA/ez+DmU4Bm2Kx+NRZmZmvSe0q22bPXu2LUMzAIDTI4SgTfFnQTEAgLMIIWhT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JJzBgw8+KJfL5XM577zzTJeFemzatEnjx49X79695XK5tH79ep/bLcvSAw88oNjYWIWHh2vMmDH67LPPzBQLH2d6726++eY6n8OxY8eaKRY+lixZohEjRqhz587q1auXJk6cqN27d/ts891332nGjBnq3r27OnXqpGuvvbbO4qNnQghppjVr1mjOnDlatGiRtm3bpiFDhig1NVUHDx40XRrO4IILLlBRUZH38vbbb5suCfWoqKjQkCFDtGzZsnpvf/TRR/Wb3/xGzz77rN5//3117NhRqamp+u6771q4UpzqTO+dJI0dO9bnc7h69eoWrBANeeuttzRjxgy999572rhxo44fP66rr75aFRUV3m3uvvtu/d///Z/Wrl2rt956S19//bXS0tL8eyALzTJy5EhrxowZ3usej8fq3bu3tWTJEoNV4UwWLVpkDRkyxHQZ8JMka926dd7r1dXVVkxMjPXYY495244cOWKFhYVZq1evNlAhGnLqe2dZlpWRkWFNmDDBSD3wz8GDBy1J1ltvvWVZVs3nrH379tbatWu92+zatcuSZG3evLnR+6UnpBmqqqq0detWjRkzxtsWEhKiMWPGaPPmzQYrQ2N89tln6t27t/r166cbbrhB+/btM10S/LR3714VFxf7fAajoqKUlJTEZzBA5Ofnq1evXhowYIDuvPNO/etf/zJdEupRWloqSd4T123dulXHjx/3+eydd955Ouuss/z67BFCmuHQoUPyeDze1V1rRUdHq7i42FBVaIykpCStXLlSGzZs0DPPPKO9e/cqJSVF3377renS4IfazxmfwcA0duxY/fGPf1Rubq5+9atf6a233tI111wjj8djujScpLq6WrNnz9Zll12mCy+8UFLNZy80NLTOCWH9/ewZX7YdMOGaa67x/vfgwYOVlJSkPn366C9/+YtuueUWg5UBbcf111/v/e9BgwZp8ODBOvvss5Wfn68rr7zSYGU42YwZM/Txxx87Mm+OnpBm6NGjh9xud53ZwCUlJYqJiTFUFZqiS5cuOvfcc7Vnzx7TpcAPtZ8zPoPBoV+/furRowefw1Zk5syZ+tvf/qa8vDzFx8d722NiYlRVVaUjR474bO/vZ48Q0gyhoaEaNmyYcnNzvW3V1dXKzc1VcnKywcrgr/Lycn3++eeKjY01XQr80LdvX8XExPh8BsvKyvT+++/zGQxABw4c0L/+9S8+h62AZVmaOXOm1q1bpzfffFN9+/b1uX3YsGFq3769z2dv9+7d2rdvn1+fPYZjmmnOnDnKyMjQ8OHDNXLkSGVlZamiokLTp083XRpO45577tH48ePVp08fff3111q0aJHcbremTJliujScory83OeX8d69e7V9+3Z169ZNZ511lmbPnq1f/OIX6t+/v/r27auFCxeqd+/emjhxormiIen07123bt20ePFiXXvttYqJidHnn3+ue++9V+ecc45SU1MNVg2pZghm1apV+utf/6rOnTt753lERUUpPDxcUVFRuuWWWzRnzhx169ZNkZGRmjVrlpKTk3XJJZc0/oHsPoynLXrqqaess846ywoNDbVGjhxpvffee6ZLwhlMnjzZio2NtUJDQ624uDhr8uTJ1p49e0yXhXrk5eVZkupcMjIyLMuqOUx34cKFVnR0tBUWFmZdeeWV1u7du80WDcuyTv/eHT161Lr66qutnj17Wu3bt7f69Olj3XbbbVZxcbHpsmFZ9b5vkqwVK1Z4tzl27Jj185//3OratasVERFhTZo0ySoqKvLrcVzfPxgAAECLYk4IAAAwghACAACMIIQAAAAjCCEAAMAIQggAADCCEAIAAIwghAAAACMIIQAAwAhCCICg4HK5tH79etNlAPADIQRAs918881yuVx1LmPHjjVdGoBWjBPYAbDF2LFjtWLFCp+2sLAwQ9UACAT0hACwRVhYmGJiYnwuXbt2lVQzVPLMM8/ommuuUXh4uPr166fs7Gyf++/cuVNXXHGFwsPD1b17d91+++0qLy/32eb555/XBRdcoLCwMMXGxmrmzJk+tx86dEiTJk1SRESE+vfvr5dfftnZJw2gWQghAFrEwoULde2112rHjh264YYbdP3112vXrl2SpIqKCqWmpqpr16764IMPtHbtWr3xxhs+IeOZZ57RjBkzdPvtt2vnzp16+eWXdc455/g8xuLFi3Xdddfpo48+0rhx43TDDTfo8OHDLfo8AfjB1nP/AmiTMjIyLLfbbXXs2NHn8stf/tKyrJrTgt9xxx0+90lKSrLuvPNOy7Is67nnnrO6du1qlZeXe29/5ZVXrJCQEO+p3Xv37m3Nnz+/wRokWQsWLPBeLy8vtyRZr732mm3PE4C9mBMCwBajR4/WM88849PWrVs3738nJyf73JacnKzt27dLknbt2qUhQ4aoY8eO3tsvu+wyVVdXa/fu3XK5XPr666915ZVXnraGwYMHe/+7Y8eOioyM1MGDB5v6lAA4jBACwBYdO3asMzxil/Dw8EZt1759e5/rLpdL1dXVTpQEwAbMCQHQIt5777061wcOHChJGjhwoHbs2KGKigrv7e+8845CQkI0YMAAde7cWYmJicrNzW3RmgE4i54QALaorKxUcXGxT1u7du3Uo0cPSdLatWs1fPhw/eAHP9Cf//xnbdmyRcuXL5ck3XDDDVq0aJEyMjL04IMP6ptvvtGsWbN00003KTo6WpL04IMP6o477lCvXr10zTXX6Ntvv9U777yjWbNmtewTBWAbQggAW2zYsEGxsbE+bQMGDNCnn34qqebIlRdffFE///nPFRsbq9WrV+v888+XJEVEROj1119XZmamRowYoYiICF177bV64oknvPvKyMjQd999pyeffFL33HOPevToofT09JZ7ggBs57IsyzJdBIDg5nK5tG7dOk2cONF0KQBaEeaEAAAAIwghAADACOaEAHAco74A6kNPCAAAMIIQAgAAjCCEAAAAIwghAADACEIIAAAwghACAACMIIQAAAAjCCEAAMCI/w+qg7/ja0Jp/AAAAABJRU5ErkJggg==", "text/plain": [ "
" ] @@ -7325,7 +7325,7 @@ { "cell_type": "code", "execution_count": 93, - "id": "be5a979e", + "id": "c6f2d6c4", "metadata": { "lines_to_next_cell": 2 }, @@ -7341,7 +7341,7 @@ }, { "cell_type": "markdown", - "id": "240618c9", + "id": "f920c659", "metadata": {}, "source": [ "### Time Series Prediction\n", @@ -7353,7 +7353,7 @@ { "cell_type": "code", "execution_count": 94, - "id": "cf219016", + "id": "f3e17682", "metadata": {}, "outputs": [], "source": [ @@ -7368,7 +7368,7 @@ }, { "cell_type": "markdown", - "id": "2ebf00d3", + "id": "e621c2eb", "metadata": {}, "source": [ "Next we set up the lagged versions of the data, dropping\n", @@ -7378,7 +7378,7 @@ { "cell_type": "code", "execution_count": 95, - "id": "c0d6bb22", + "id": "78707eda", "metadata": {}, "outputs": [], "source": [ @@ -7393,7 +7393,7 @@ }, { "cell_type": "markdown", - "id": "53d15ddf", + "id": "bb83e654", "metadata": {}, "source": [ "Finally, we extract the response, training indicator, and drop the current day’s `DJ_return` and\n", @@ -7403,7 +7403,7 @@ { "cell_type": "code", "execution_count": 96, - "id": "9de511d5", + "id": "4d894824", "metadata": { "lines_to_next_cell": 2 }, @@ -7431,7 +7431,7 @@ }, { "cell_type": "markdown", - "id": "9c61eaa2", + "id": "f1889769", "metadata": {}, "source": [ "We first fit a simple linear model and compute the $R^2$ on the test data using\n", @@ -7441,7 +7441,7 @@ { "cell_type": "code", "execution_count": 97, - "id": "89666a56", + "id": "4d7f5ce0", "metadata": {}, "outputs": [ { @@ -7463,7 +7463,7 @@ }, { "cell_type": "markdown", - "id": "c3997039", + "id": "02c7294f", "metadata": {}, "source": [ "We refit this model, including the factor variable `day_of_week`.\n", @@ -7474,7 +7474,7 @@ { "cell_type": "code", "execution_count": 98, - "id": "23ebf124", + "id": "a6b371bb", "metadata": { "lines_to_next_cell": 0 }, @@ -7487,7 +7487,7 @@ }, { "cell_type": "markdown", - "id": "8df4e475", + "id": "92fda2e1", "metadata": {}, "source": [ " Note that we do not have\n", @@ -7498,7 +7498,7 @@ { "cell_type": "code", "execution_count": 99, - "id": "4190a4dc", + "id": "a2a8cc85", "metadata": { "lines_to_next_cell": 0 }, @@ -7521,7 +7521,7 @@ }, { "cell_type": "markdown", - "id": "d98cc235", + "id": "68a22c64", "metadata": {}, "source": [ "This model achieves an $R^2$ of about 46%." @@ -7529,7 +7529,7 @@ }, { "cell_type": "markdown", - "id": "131bfc1c", + "id": "1cca42e4", "metadata": {}, "source": [ "To fit the RNN, we must reshape the data, as it will expect 5 lagged\n", @@ -7550,7 +7550,7 @@ { "cell_type": "code", "execution_count": 100, - "id": "a2b41f92", + "id": "8ee6e6a3", "metadata": { "lines_to_next_cell": 0 }, @@ -7581,7 +7581,7 @@ }, { "cell_type": "markdown", - "id": "7b301214", + "id": "a1f41334", "metadata": {}, "source": [ "We now reshape the data." @@ -7590,7 +7590,7 @@ { "cell_type": "code", "execution_count": 101, - "id": "dde73c9e", + "id": "d35ceb54", "metadata": { "lines_to_next_cell": 0 }, @@ -7613,7 +7613,7 @@ }, { "cell_type": "markdown", - "id": "4fa6cd7a", + "id": "11137e1d", "metadata": {}, "source": [ "By specifying the first size as -1, `numpy.reshape()` deduces its size based on the remaining arguments.\n", @@ -7628,7 +7628,7 @@ { "cell_type": "code", "execution_count": 102, - "id": "6f9d6357", + "id": "9e3dc6d5", "metadata": {}, "outputs": [], "source": [ @@ -7649,7 +7649,7 @@ }, { "cell_type": "markdown", - "id": "a5d720e7", + "id": "1fd566f7", "metadata": {}, "source": [ "We fit the model in a similar fashion to previous networks. We\n", @@ -7659,14 +7659,13 @@ "early stopping, since then the test performance would be biased.\n", "\n", "We form the training dataset similar to\n", - "our `Hitters` example.\n", - " " + "our `Hitters` example." ] }, { "cell_type": "code", "execution_count": 103, - "id": "a21ca47e", + "id": "df5e5ab6", "metadata": {}, "outputs": [], "source": [ @@ -7680,7 +7679,7 @@ }, { "cell_type": "markdown", - "id": "0d627892", + "id": "16565d83", "metadata": {}, "source": [ "Following our usual pattern, we inspect the summary." @@ -7689,7 +7688,7 @@ { "cell_type": "code", "execution_count": 104, - "id": "8fa26b87", + "id": "d7f49bec", "metadata": { "lines_to_next_cell": 0 }, @@ -7732,7 +7731,7 @@ }, { "cell_type": "markdown", - "id": "065db586", + "id": "ad57780a", "metadata": {}, "source": [ "We again put the two datasets into a data module, with a\n", @@ -7742,7 +7741,7 @@ { "cell_type": "code", "execution_count": 105, - "id": "9b871361", + "id": "ea7ce0f4", "metadata": { "lines_to_next_cell": 0 }, @@ -7757,7 +7756,7 @@ }, { "cell_type": "markdown", - "id": "8e6d61d8", + "id": "d0d60c8b", "metadata": {}, "source": [ "We run some data through our model to be sure the sizes match up correctly." @@ -7766,7 +7765,7 @@ { "cell_type": "code", "execution_count": 106, - "id": "b63d1f85", + "id": "ccd77738", "metadata": {}, "outputs": [ { @@ -7789,7 +7788,7 @@ }, { "cell_type": "markdown", - "id": "7fc69ade", + "id": "c9397b7f", "metadata": {}, "source": [ "We follow our previous example for setting up a trainer for a\n", @@ -7800,7 +7799,7 @@ { "cell_type": "code", "execution_count": 107, - "id": "c5f32a4f", + "id": "96e04e3f", "metadata": {}, "outputs": [], "source": [ @@ -7813,7 +7812,7 @@ }, { "cell_type": "markdown", - "id": "ed00be6a", + "id": "9d7ef6fc", "metadata": {}, "source": [ "Fitting the model should by now be familiar.\n", @@ -7823,7 +7822,7 @@ { "cell_type": "code", "execution_count": 108, - "id": "6bd98eb9", + "id": "fc6ba2ca", "metadata": { "lines_to_next_cell": 2 }, @@ -7865,7 +7864,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "f50cb3862a6e4ddcbcb7131a9c3e6c07", + "model_id": "cd881313814b4b319883de36a456b21e", "version_major": 2, "version_minor": 0 }, @@ -8537,7 +8536,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "0e613a523fb24350a02e4af53fc31c0b", + "model_id": "c0851768dd544162913f87e0e0cb118e", "version_major": 2, "version_minor": 0 }, @@ -8551,7 +8550,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "c4db1eab382549f1b1beddfad3368138", + "model_id": "6cb1dc51cbad4e1f829a074e29d3a47e", "version_major": 2, "version_minor": 0 }, @@ -8565,7 +8564,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "fe986a9354124fab8835d0b2d93529dd", + "model_id": "608984e04fc847d7860dfb48bbcdda9f", "version_major": 2, "version_minor": 0 }, @@ -8579,7 +8578,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "b8cb7c8dcfc8407e9bcb453d75fec4fb", + "model_id": "bef4bc23212c41c497e518473db55672", "version_major": 2, "version_minor": 0 }, @@ -8593,7 +8592,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "b3bb249322a440fea649e953c6f8e6f9", + "model_id": "890d82c78d59444ea97f6000b0d17fec", "version_major": 2, "version_minor": 0 }, @@ -8607,7 +8606,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "fa670100f02b47cf9ec4c3e6bad634e7", + "model_id": "84f285e1262e448186175b5f6ea8a100", "version_major": 2, "version_minor": 0 }, @@ -8621,7 +8620,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "1a89941f764245c2ada50a90a13c2de5", + "model_id": "6bcddf29e018487ab3cbd65b9360a31c", "version_major": 2, "version_minor": 0 }, @@ -8635,7 +8634,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "f1620d945db8415eb67ca9c7c9204437", + "model_id": "0f5f0bf0e3094d359222a40cfb883e67", "version_major": 2, "version_minor": 0 }, @@ -8649,7 +8648,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "ccaab29c24594688aab4e276f0602911", + "model_id": "436f0a6e3a7a4457b6b54fb1c19a9fc1", "version_major": 2, "version_minor": 0 }, @@ -8663,7 +8662,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "985770bbcdc54a978e25689ec98b9ec8", + "model_id": "153517df5e244608a4df90e6d5b3f2fb", "version_major": 2, "version_minor": 0 }, @@ -8677,7 +8676,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "649a7264f6e84529ab9292bab0b77432", + "model_id": "966bf641ff264d9ba465a989337d24c8", "version_major": 2, "version_minor": 0 }, @@ -8691,7 +8690,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "bbd262d3471646e38208a319c863cb75", + "model_id": "232ec0a0183e462f92422b1991162466", "version_major": 2, "version_minor": 0 }, @@ -8705,7 +8704,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "58ad0974b15546609feec97cc94b6a7a", + "model_id": "94eebdb823b9416abdb1454fa8b713a1", "version_major": 2, "version_minor": 0 }, @@ -8719,7 +8718,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "d6114f44e51d4586b911578aa52ed8e5", + "model_id": "63e68c7095d74639a33c6b422dde8e6b", "version_major": 2, "version_minor": 0 }, @@ -8733,7 +8732,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "d42389c558874de3932eb5bc0c4165cb", + "model_id": "858b9ede991d4db5a65f3738145661b0", "version_major": 2, "version_minor": 0 }, @@ -8747,7 +8746,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "892652c223b4426b8e809a0cc36985a2", + "model_id": "1320a563fa1141f48ec1121a4da566dd", "version_major": 2, "version_minor": 0 }, @@ -8761,7 +8760,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "cc6a9c7712ac47e7be436a5e53c1d203", + "model_id": "c258eee32312493f820b0be1001b702d", "version_major": 2, "version_minor": 0 }, @@ -8775,7 +8774,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "71474f43feee42a78f5b2dd1441ebea8", + "model_id": "cfe59e5c336b483595b2c2f3e5002fe5", "version_major": 2, "version_minor": 0 }, @@ -8789,7 +8788,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "d35c015e070a4066a00638dfea294e20", + "model_id": "da49b9baca8d43deb73852ac22411b59", "version_major": 2, "version_minor": 0 }, @@ -8803,7 +8802,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "bbe8d6a738a2452eb96907cfd94a865e", + "model_id": "2edefd368841420799756fdeb9eb350e", "version_major": 2, "version_minor": 0 }, @@ -8817,7 +8816,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "c4e37d0e56cf4433bae37ba25dd6addc", + "model_id": "fb1ab9dd650c4327b9e08083ea6f855e", "version_major": 2, "version_minor": 0 }, @@ -8831,7 +8830,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "508e2b4b875b4f3eb89460503b82a44b", + "model_id": "337548c8b3a649b3bbb2aa022d0bc33c", "version_major": 2, "version_minor": 0 }, @@ -8845,7 +8844,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "fe84b5d4fff64e4e84eb3baf63f49ebb", + "model_id": "469f0f8eaf84468689dc81a6866590c6", "version_major": 2, "version_minor": 0 }, @@ -8859,7 +8858,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "234a8305cd0e4671bafd6347a508006a", + "model_id": "5a3d2d6c73104569b2431592878a0680", "version_major": 2, "version_minor": 0 }, @@ -8873,7 +8872,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "9314bb524e4c4c988e0637f0b426dea3", + "model_id": "0a4f360d5a1c4e688c806475aa15e2aa", "version_major": 2, "version_minor": 0 }, @@ -8887,7 +8886,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "73bb408fb3b14067bc5a00c51f2b46ab", + "model_id": "32861129effb47cdb392fa0a20b636c3", "version_major": 2, "version_minor": 0 }, @@ -8901,7 +8900,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "80e55275d2694434ba664645a53cfdfb", + "model_id": "0713f563c1fc4d6292be6340e83f6417", "version_major": 2, "version_minor": 0 }, @@ -8915,7 +8914,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "af57619b39e141b0a849207567f12685", + "model_id": "1364d3ae21274234a26921be5a610c57", "version_major": 2, "version_minor": 0 }, @@ -8929,7 +8928,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "1e9d1664e7094f3a80c4c29a64c69850", + "model_id": "c5e4630ea30945fd862bce8a68c9eaff", "version_major": 2, "version_minor": 0 }, @@ -8943,7 +8942,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "cbadff921ed84c079d2920fa8f108d79", + "model_id": "fb014ea654fa49c6b29fda1c42a4239b", "version_major": 2, "version_minor": 0 }, @@ -8957,7 +8956,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "1a4f763710f54a64a164ed4e8ade0cd4", + "model_id": "fc9065e42c5946f88aa84da055bf968e", "version_major": 2, "version_minor": 0 }, @@ -8971,7 +8970,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "7ae34405e0904941bde7ac34156ef5d9", + "model_id": "b33c56819c07474596c522b66e69d8e0", "version_major": 2, "version_minor": 0 }, @@ -8985,7 +8984,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "758b295e2ebc4f818bf7634dc9e6511b", + "model_id": "e227733b97fd411fa91be941aa0826f3", "version_major": 2, "version_minor": 0 }, @@ -8999,7 +8998,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "70ed4e60b2724c27bba5e161f5d6c0e9", + "model_id": "b0de6788585a43d387ee192d3e919582", "version_major": 2, "version_minor": 0 }, @@ -9013,7 +9012,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "1838ceec52264c5b9ef4bbf089932af4", + "model_id": "95f701a89b174f96a7121b1741fcb9fe", "version_major": 2, "version_minor": 0 }, @@ -9027,7 +9026,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "c8ab1adbbefd432f84ccff998e3382de", + "model_id": "d138f67a0d8d44b69b94c79290ab60fa", "version_major": 2, "version_minor": 0 }, @@ -9041,7 +9040,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "6e5346be07274ca9b3124ad9db4e0a6d", + "model_id": "472095f2f7de47dca63bb953593f60a9", "version_major": 2, "version_minor": 0 }, @@ -9055,7 +9054,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "626e911567f949d5bb8aa78b6b60f934", + "model_id": "d696f828b464421c95874bae379a6fa0", "version_major": 2, "version_minor": 0 }, @@ -9069,7 +9068,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "f6d5ce4338784c1cbdaf100334b1407b", + "model_id": "a92efff5798b4681b9d9de929e5f6336", "version_major": 2, "version_minor": 0 }, @@ -9083,7 +9082,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "c810e6fd3ceb4568ae78b53fa213914e", + "model_id": "289e5bce5f284ce99e064521ce0e05a9", "version_major": 2, "version_minor": 0 }, @@ -9097,7 +9096,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "afc2246d6e184b538ecfe056dc38f16d", + "model_id": "fdd3f827c9c34a3190aba38b1b13c21f", "version_major": 2, "version_minor": 0 }, @@ -9111,7 +9110,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "61255356db634ba984e8844968f4a5e9", + "model_id": "d99ecb21f9e54c9fb262b29adde16bd0", "version_major": 2, "version_minor": 0 }, @@ -9125,7 +9124,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "02f1a079b35a44d89dfce052a355c17a", + "model_id": "725a40f03b734c21b8b8e67b3212718f", "version_major": 2, "version_minor": 0 }, @@ -9139,7 +9138,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "cb0fb5da2654482ebe196bf0f1751b7f", + "model_id": "640019ee89d047fd8725565835db0eaf", "version_major": 2, "version_minor": 0 }, @@ -9153,7 +9152,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "bc33b4976a164058bceeb2cfb77eff20", + "model_id": "1580c64b5a874e6aad7a89abacd5cb60", "version_major": 2, "version_minor": 0 }, @@ -9167,7 +9166,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "cba3bae12a654da39ea22a391431f2ff", + "model_id": "75eddb18a4c546b1a364977b91a38001", "version_major": 2, "version_minor": 0 }, @@ -9181,7 +9180,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "69f0c0bde038485e8c49934eb6ea819d", + "model_id": "96302a61558d40549b7802f4c44263eb", "version_major": 2, "version_minor": 0 }, @@ -9195,7 +9194,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "ac8fff761b724c6cb58569db5feeeaa5", + "model_id": "fb7dd989673a4223b66345ef77406828", "version_major": 2, "version_minor": 0 }, @@ -9209,7 +9208,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "d0cdf39392d24750901d79aa4bef1a76", + "model_id": "6e74c6d1b7c64e4596a655a0fbaf1bfb", "version_major": 2, "version_minor": 0 }, @@ -9223,7 +9222,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "1a0d550efbba47d88357781f7b68e073", + "model_id": "d716d0b7820d475ca7653959b52d5450", "version_major": 2, "version_minor": 0 }, @@ -9237,7 +9236,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "286d953141b24199a4253f9fc85b6f82", + "model_id": "137da5f57ba84efdb51aff612b72db01", "version_major": 2, "version_minor": 0 }, @@ -9251,7 +9250,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "67cf98d2686948a6b3bd39efb55b3ef4", + "model_id": "bd227089abe34ebda36b2d18df87a86a", "version_major": 2, "version_minor": 0 }, @@ -9265,7 +9264,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "608086150668499e85ab742d06ea4ebd", + "model_id": "044b5721d12d4dadbc68f2e1ef6db71a", "version_major": 2, "version_minor": 0 }, @@ -9279,7 +9278,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "021bf402711e428b97a3e2e96dfcb49e", + "model_id": "cc86818b06a740479b3157b29a1cb18e", "version_major": 2, "version_minor": 0 }, @@ -9293,7 +9292,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "e0a7bb5628c944b4b570907e91ee7248", + "model_id": "dd634e6fc883498cadcb00911c514371", "version_major": 2, "version_minor": 0 }, @@ -9307,7 +9306,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "46c080135dd7438ea38e749bbe0cc747", + "model_id": "3a52574849754ad5b349a2ef52a33722", "version_major": 2, "version_minor": 0 }, @@ -9321,7 +9320,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "4ca53ff274f84b3a9c88ace97834f8c5", + "model_id": "35f1a57c0f6147ce81b036c866a17275", "version_major": 2, "version_minor": 0 }, @@ -9335,7 +9334,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "373a0410ec8444ad957a468cefb21b42", + "model_id": "3cb251ea1f6a4ae7a87fb959e362d392", "version_major": 2, "version_minor": 0 }, @@ -9349,7 +9348,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "b67298bbb00b47d290167050e011d20c", + "model_id": "4e12dfd333064cf5a1fffa8ab56f67a6", "version_major": 2, "version_minor": 0 }, @@ -9363,7 +9362,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "1dcdd15fe16d401cacf14f9a6f151a17", + "model_id": "73e3283065a94da9b0de1b38f87eb801", "version_major": 2, "version_minor": 0 }, @@ -9377,7 +9376,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "43883ea84b364edea1d9fe08e2db75d8", + "model_id": "d2755e57697a4a01b6514fdba5578bec", "version_major": 2, "version_minor": 0 }, @@ -9391,7 +9390,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "0e6e2306c5e043cd98d2c5f41d6fba33", + "model_id": "f8f3787f489f46959322dac484b7ed93", "version_major": 2, "version_minor": 0 }, @@ -9405,7 +9404,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "31ac9e15ce594f32b36c8898e6500bc9", + "model_id": "f24824825bf644ae831c0e922e16a6c7", "version_major": 2, "version_minor": 0 }, @@ -9419,7 +9418,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "6f20edbc41064e44a166abb5c43d4304", + "model_id": "9abde42fb6564285aef92cdc78ac08a4", "version_major": 2, "version_minor": 0 }, @@ -9433,7 +9432,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "e6965e8c00a3426ba8206bd8ddbe62b3", + "model_id": "18ab584d1482478b9b7d34e90db79dd1", "version_major": 2, "version_minor": 0 }, @@ -9447,7 +9446,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "6b0624ec65fc4ce1abc177b512766854", + "model_id": "7b030704b1b545fcad5ee48c27c6b90c", "version_major": 2, "version_minor": 0 }, @@ -9461,7 +9460,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "c63fe05c857b4052a9aeaca8f092d047", + "model_id": "c47f07fcd58847b1b24f383546eb653c", "version_major": 2, "version_minor": 0 }, @@ -9475,7 +9474,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "e949d28f416d47b59fd403bfea38687b", + "model_id": "f99c0e8c4b65436dafa5c2a9a5452e06", "version_major": 2, "version_minor": 0 }, @@ -9489,7 +9488,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "11797220658a4b4fbf505ffa9118a10a", + "model_id": "24f347e1c972488ab6d64bcb07757238", "version_major": 2, "version_minor": 0 }, @@ -9503,7 +9502,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "7813aa85a7314b2e8df4b6db5580e21f", + "model_id": "cc6b7ff2a86c41cca3a9b423c0297b69", "version_major": 2, "version_minor": 0 }, @@ -9517,7 +9516,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "2c6ad5889d0b4c69a5847eaab80d1a8e", + "model_id": "eeff56e6de874ca3bbacdf08fbcead78", "version_major": 2, "version_minor": 0 }, @@ -9531,7 +9530,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "f7f8f3aceca14e2b9d6f172a3be239b3", + "model_id": "2253d5fd390a4ba1b32e8fd8639187bc", "version_major": 2, "version_minor": 0 }, @@ -9545,7 +9544,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "d6910bf855634072b7b5e451ae13e1d5", + "model_id": "dc58353b22e14f9bb332e8a38b77a717", "version_major": 2, "version_minor": 0 }, @@ -9559,7 +9558,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "2cb6739f919e40e4ab59d37b2eb4f4e3", + "model_id": "caac960a2e374b8fb4bfd726a3b20235", "version_major": 2, "version_minor": 0 }, @@ -9573,7 +9572,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "2f828a85bd9846be86f63bfe87807643", + "model_id": "debee1aed4cc40d5b303d02eedbdfc41", "version_major": 2, "version_minor": 0 }, @@ -9587,7 +9586,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "91acc5ec90d542fd91e2fa1a60c2b472", + "model_id": "49af03e929d149319965f79777b874d7", "version_major": 2, "version_minor": 0 }, @@ -9601,7 +9600,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "cc002d7048f34829bf0e153de53ec761", + "model_id": "518f016e8418473fa5c367ba4782ea70", "version_major": 2, "version_minor": 0 }, @@ -9615,7 +9614,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "c18ba9a746364e29b913561d638c3657", + "model_id": "d5d84c78937e4e86809c6752d2ab9b34", "version_major": 2, "version_minor": 0 }, @@ -9629,7 +9628,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "592ebdfedc0c4e8fadfd0d8070088221", + "model_id": "d0e7561ad6254c608e8ccbe9419bf13d", "version_major": 2, "version_minor": 0 }, @@ -9643,7 +9642,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "8660bae7cde74d19be0473f0e5ee22e3", + "model_id": "62bf8c5f5e884276b3423cb35af947cc", "version_major": 2, "version_minor": 0 }, @@ -9657,7 +9656,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "0aa4a50bce0748dbbf9fb78d3caf595d", + "model_id": "09fbe3b2afb844e087c8b8131940f52f", "version_major": 2, "version_minor": 0 }, @@ -9671,7 +9670,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "78cc5764f0b44b9fb718eb88b75e175d", + "model_id": "248d1480e07844f5aae809b8d75f6f05", "version_major": 2, "version_minor": 0 }, @@ -9685,7 +9684,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "65233da35c0b4a20a9745a8f0a5da902", + "model_id": "b16a871746b7454fa6dbf640904fba60", "version_major": 2, "version_minor": 0 }, @@ -9699,7 +9698,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "64c05f6c181a44d29a51ac96098f7bf8", + "model_id": "3080997668ed41d9ab15a00e2e56022a", "version_major": 2, "version_minor": 0 }, @@ -9713,7 +9712,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "8adea85b3c844d31befda6c9b8873c41", + "model_id": "4788ab535ba14e80a1f6847da6310b78", "version_major": 2, "version_minor": 0 }, @@ -9727,7 +9726,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "3bdb272e874045f3ac0edcb0a987724b", + "model_id": "f8c7af5af17445b7a9af29dcf422e74f", "version_major": 2, "version_minor": 0 }, @@ -9741,7 +9740,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "4bf7256b41f14f37b97415cef52309da", + "model_id": "c5e43276790a42fda94871a6b05d611a", "version_major": 2, "version_minor": 0 }, @@ -9755,7 +9754,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "74d54ca9ec124a879e927167eb24682f", + "model_id": "801b75b2e42742d6bd8680b776df8e35", "version_major": 2, "version_minor": 0 }, @@ -9769,7 +9768,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "a523ab0c7c864663840a42f03089040b", + "model_id": "a00c72e3f166473a876f02fec7326ff9", "version_major": 2, "version_minor": 0 }, @@ -9783,7 +9782,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "6fa0919d758b43ff9156627fab054600", + "model_id": "66c4ce98f5ba4957b673c1969ac1ec6b", "version_major": 2, "version_minor": 0 }, @@ -9797,7 +9796,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "80ecf1da2dd340a7aa6136aa43e7655d", + "model_id": "65829521a0704628ad14ef78741bbfc8", "version_major": 2, "version_minor": 0 }, @@ -9811,7 +9810,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "4cc8c92b9e224ebeab44e4a14df7179b", + "model_id": "fab5d683ba714ad58a9aab8de4df7b4f", "version_major": 2, "version_minor": 0 }, @@ -9825,7 +9824,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "c9fc2259c77a467fb5abc0f4422e8dc9", + "model_id": "e042dbbd1baa44fa9f73d06426c862ef", "version_major": 2, "version_minor": 0 }, @@ -9839,7 +9838,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "9c0623c653894e629bb4bbab64c0fe0b", + "model_id": "9b23da050f7e4d928362df6059d09c58", "version_major": 2, "version_minor": 0 }, @@ -9853,7 +9852,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "f30c449b45314a988d24ef7b456e4422", + "model_id": "b1f1ad4e73bf410497c46c1e3d4ef017", "version_major": 2, "version_minor": 0 }, @@ -9867,7 +9866,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "77ad20ffc8a240acb93bafb56edfa9da", + "model_id": "95951bcd163a48a083e71524e3c8c80f", "version_major": 2, "version_minor": 0 }, @@ -9881,7 +9880,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "f26b8c97f5b74aeb837cf5550934dad2", + "model_id": "bfd23af6b76b4c66bb24b6c0af0151db", "version_major": 2, "version_minor": 0 }, @@ -9895,7 +9894,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "1b14fe9c7b2640e4a732181e4891d04d", + "model_id": "a620323d378841ffa3fb4e8af6b7b677", "version_major": 2, "version_minor": 0 }, @@ -9909,7 +9908,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "ebd93c6972e24dcc87f97210c9226ec5", + "model_id": "5c140c009d62482faf2bb955304ddfb5", "version_major": 2, "version_minor": 0 }, @@ -9923,7 +9922,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "d2b14ad1b9704bd0bc3b958aa8d3122f", + "model_id": "eec96bca2672471fa10edafc612715f9", "version_major": 2, "version_minor": 0 }, @@ -9937,7 +9936,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "11760a605a8c4595a561f565072d3912", + "model_id": "13d227699d96405e9672968a117dd835", "version_major": 2, "version_minor": 0 }, @@ -9951,7 +9950,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "efc5f8437a284a4dbfbc1eababe72f5c", + "model_id": "bdf0d51cecf64b6b88b2189e61e2697d", "version_major": 2, "version_minor": 0 }, @@ -9965,7 +9964,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "fca92dc2b3314004b806de3f0476982d", + "model_id": "3663a9cc5dd6492c838b8856ee3db172", "version_major": 2, "version_minor": 0 }, @@ -9979,7 +9978,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "0c57faff8c244782b4c634632c79fd6d", + "model_id": "5b8a90932c5c43449baddb012d3f8d2f", "version_major": 2, "version_minor": 0 }, @@ -9993,7 +9992,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "8b1608716da04764a9e79b15ff3b9cd0", + "model_id": "acfe2fcbcbeb40b689a942d4a384e81e", "version_major": 2, "version_minor": 0 }, @@ -10007,7 +10006,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "34b6076acc7c46cd85e0580ed62051f7", + "model_id": "a41e9df7b5be41f680c2486bb036eac0", "version_major": 2, "version_minor": 0 }, @@ -10021,7 +10020,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "be9d5f1a1fc1411bac32b804ab4a55c6", + "model_id": "70cfd7e68ad546fca7b8b4fcb5fe112a", "version_major": 2, "version_minor": 0 }, @@ -10035,7 +10034,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "15ba55fa813d429d8c096aeab77dac6d", + "model_id": "cc6d28f7b6674cc78526f2a04a232f87", "version_major": 2, "version_minor": 0 }, @@ -10049,7 +10048,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "82981797edd24e66a9c7f595777993b3", + "model_id": "ae26f55dfe5d44cd9fae433fb8a3ed46", "version_major": 2, "version_minor": 0 }, @@ -10063,7 +10062,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "f497013dca4544cf9027f8c57b9d3862", + "model_id": "b61738f2417244b6b7df1ebb3b3f24d7", "version_major": 2, "version_minor": 0 }, @@ -10077,7 +10076,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "18ae423604124c14ad1c546040258830", + "model_id": "fdbf1b51bbd54898b58a2de9f695d5ba", "version_major": 2, "version_minor": 0 }, @@ -10091,7 +10090,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "bbcf1925befb44f68ae7c057b87d47fc", + "model_id": "d438be1b459e4f0f90e1a26704baa0f1", "version_major": 2, "version_minor": 0 }, @@ -10105,7 +10104,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "3390fcad4b5a4ed7b0962a3c40c08c6c", + "model_id": "164a559d88cd48c58bb43f99cf5819fb", "version_major": 2, "version_minor": 0 }, @@ -10119,7 +10118,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "8b2672dda8714e74b34df403f44958fb", + "model_id": "e142ec45c48e400bbf4cf7dbc8b94e39", "version_major": 2, "version_minor": 0 }, @@ -10133,7 +10132,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "8f19a36be4da4760be75497c7125b8f0", + "model_id": "b98239d615c44f9280cd53bf430b38ef", "version_major": 2, "version_minor": 0 }, @@ -10147,7 +10146,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "4a2a1c7d9d20421e9e92870a6a2e9660", + "model_id": "ee3012ec548c4468ab19394fcc61dfe1", "version_major": 2, "version_minor": 0 }, @@ -10161,7 +10160,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "f0286c8429b84e2ab0c163e1b4eef1d0", + "model_id": "59abff92475945148512c124b31620ae", "version_major": 2, "version_minor": 0 }, @@ -10175,7 +10174,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "dd58ef8e610842f2b301171926de7182", + "model_id": "10742df4535742c8acdcdbea8d8d6a02", "version_major": 2, "version_minor": 0 }, @@ -10189,7 +10188,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "539ca6d6148543548ecd3dcf70ed7c11", + "model_id": "7e3d33d2a59f4e2c8413b43cfaee41d1", "version_major": 2, "version_minor": 0 }, @@ -10203,7 +10202,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "06e7f0d966004f43b3be4b20ccedee56", + "model_id": "1fd03ae4594b4574a55f06d248d8b61a", "version_major": 2, "version_minor": 0 }, @@ -10217,7 +10216,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "fda62ae60c6c4677a6ea5636f934dc92", + "model_id": "976c6fee189c41b4b5445895fb180c8d", "version_major": 2, "version_minor": 0 }, @@ -10231,7 +10230,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "3baf1bb80b444609bbfdea5378d88b16", + "model_id": "198e1fa4f5124895bc0ee188984ea726", "version_major": 2, "version_minor": 0 }, @@ -10245,7 +10244,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "f668c7e605ea48fb8c8ccc3ce9942537", + "model_id": "c78ca1847595417aa71358a1c1b1a4b0", "version_major": 2, "version_minor": 0 }, @@ -10259,7 +10258,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "8ab646cb72bc4395ab928bd90d12876f", + "model_id": "af7a5a5a341348f2a0be2f3e77656549", "version_major": 2, "version_minor": 0 }, @@ -10273,7 +10272,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "81a2b942d66144f394a057e50cf01f7c", + "model_id": "b5ab2cc2a47b42828c7a6780a6db2e00", "version_major": 2, "version_minor": 0 }, @@ -10287,7 +10286,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "a2c733eb3a2f40e0b80254de8610baa9", + "model_id": "f972c01912c545948b56ea640af2c5b0", "version_major": 2, "version_minor": 0 }, @@ -10301,7 +10300,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "d3cee07e2b804c9f84e6d1c6985f6eb6", + "model_id": "213b3d4ee66d42e1b57a82d35b720112", "version_major": 2, "version_minor": 0 }, @@ -10315,7 +10314,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "e7a1d5c5a3d2447b99b09d54782e92e4", + "model_id": "ddfc7dcdd1c94636929318d51a61e048", "version_major": 2, "version_minor": 0 }, @@ -10329,7 +10328,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "2d6dff1e8e8d492c8020df32915020f6", + "model_id": "3fdce7be7f074ec589421caa0319862f", "version_major": 2, "version_minor": 0 }, @@ -10343,7 +10342,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "1c58bb14675c42759eb18385d3f2c364", + "model_id": "180334cb0f4c4cc6a5f2eeedc55a986b", "version_major": 2, "version_minor": 0 }, @@ -10357,7 +10356,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "6e846537940449eba9b3df06d6908d2c", + "model_id": "d2e9e0572d4c48bd9dcf25960be64cde", "version_major": 2, "version_minor": 0 }, @@ -10371,7 +10370,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "eaabc8c0805b4ce38620516da7b5dd2f", + "model_id": "0e26b9ff0a7642e0b8400f0a937eeb30", "version_major": 2, "version_minor": 0 }, @@ -10385,7 +10384,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "0b54cea4ca634312ac62cef9554c2abd", + "model_id": "bf9537d5986b4aacad134c66a4242b0e", "version_major": 2, "version_minor": 0 }, @@ -10399,7 +10398,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "7d538586b87440b89506a951ea660c85", + "model_id": "e4ab38c6e45d4628b56bbe5dac9458d7", "version_major": 2, "version_minor": 0 }, @@ -10413,7 +10412,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "06ff3bed3b2c44368623e1fe4d16c42d", + "model_id": "18e800771f6f439bb9f15de7edaf8274", "version_major": 2, "version_minor": 0 }, @@ -10427,7 +10426,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "6034c4e13c63492399314dd1d0e86900", + "model_id": "ee30326da017481f94e780628f0ec74d", "version_major": 2, "version_minor": 0 }, @@ -10441,7 +10440,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "1d2a3ec474f84d7dbd2b1d0811b5679a", + "model_id": "ebaaaf47fecb406facb8804280ed88e2", "version_major": 2, "version_minor": 0 }, @@ -10455,7 +10454,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "eedba0809dc948c6b8338bde323e79a5", + "model_id": "ac274611a2704a2ab1468b205859dfc1", "version_major": 2, "version_minor": 0 }, @@ -10469,7 +10468,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "b476ab3908ea4301a13f5cc23ff44fa2", + "model_id": "41be5520b1964125872189d604272dc4", "version_major": 2, "version_minor": 0 }, @@ -10483,7 +10482,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "aff3135a532a4ee88010da77f492cf4d", + "model_id": "666d79b38fcd49c79cac956f8b2f7677", "version_major": 2, "version_minor": 0 }, @@ -10497,7 +10496,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "ffe38591306e4351a4228d7f17d91a24", + "model_id": "2253e50224c642a7a56858b1c135213e", "version_major": 2, "version_minor": 0 }, @@ -10511,7 +10510,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "2a1a7c1af8fa4e98b60723cbc3766c0b", + "model_id": "f01094a315c4420e9aba161bd526a1e0", "version_major": 2, "version_minor": 0 }, @@ -10525,7 +10524,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "fb73984ee683427195a75edb8a65dfd1", + "model_id": "652fb20eb89245a8ac16173eeb553633", "version_major": 2, "version_minor": 0 }, @@ -10539,7 +10538,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "7fed65b24c3e4cccb75b5e190e192e99", + "model_id": "92757d397a9944e9bf89a627d34d670a", "version_major": 2, "version_minor": 0 }, @@ -10553,7 +10552,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "40c7a7a509f94bbdb99ff06868239a58", + "model_id": "d4b73d5c186347d9a05f2486c5baafee", "version_major": 2, "version_minor": 0 }, @@ -10567,7 +10566,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "043b17d4db7c4a8c92529fac3371ae87", + "model_id": "4daeb823d61246a0aa572689807c117d", "version_major": 2, "version_minor": 0 }, @@ -10581,7 +10580,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "9340de6a00d54d7e8efb980fb7a63b88", + "model_id": "4da85fb13a6241efa01e2e144209cd5f", "version_major": 2, "version_minor": 0 }, @@ -10595,7 +10594,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "69596ddf1da94aed9d62d104734a11ad", + "model_id": "6f4c663a0b6449828fcacf1d77b0fad1", "version_major": 2, "version_minor": 0 }, @@ -10609,7 +10608,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "83228734f253473ab9b36daa64130a36", + "model_id": "ada51e9d1ee84f7c8d7cda87a9fed382", "version_major": 2, "version_minor": 0 }, @@ -10623,7 +10622,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "9fce07d5848d49b9acbd80959f48d055", + "model_id": "035517fa34c84edb8520548a6a6f5f2f", "version_major": 2, "version_minor": 0 }, @@ -10637,7 +10636,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "23ac188be0de4418997c43a01c865381", + "model_id": "ddc0d23180304537a5d5a408daed4159", "version_major": 2, "version_minor": 0 }, @@ -10651,7 +10650,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "81a145df7fda42b08319ec1963375f71", + "model_id": "c4c0bccb88c34e5da862f7bf33948498", "version_major": 2, "version_minor": 0 }, @@ -10665,7 +10664,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "a006b6be707d4cf49143c0588abefcae", + "model_id": "27c5c425ce414190aae3c840ca8df1e0", "version_major": 2, "version_minor": 0 }, @@ -10686,7 +10685,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "3a233b74289744058b15d52d3362d9ef", + "model_id": "23414392e3a74a4b8dff5fe1a30f6eec", "version_major": 2, "version_minor": 0 }, @@ -10745,7 +10744,7 @@ }, { "cell_type": "markdown", - "id": "3c78b138", + "id": "fc55d4f9", "metadata": {}, "source": [ "We could also fit a model without the `nn.RNN()` layer by just\n", @@ -10762,7 +10761,7 @@ { "cell_type": "code", "execution_count": 109, - "id": "5586a609", + "id": "c60876d7", "metadata": {}, "outputs": [], "source": [ @@ -10777,7 +10776,7 @@ }, { "cell_type": "markdown", - "id": "c1c361b4", + "id": "c7fc165f", "metadata": {}, "source": [ "Creating a data module follows a familiar pattern." @@ -10786,7 +10785,7 @@ { "cell_type": "code", "execution_count": 110, - "id": "b72ecb13", + "id": "282f7e1c", "metadata": {}, "outputs": [], "source": [ @@ -10799,7 +10798,7 @@ }, { "cell_type": "markdown", - "id": "32016e95", + "id": "310271e1", "metadata": {}, "source": [ "We build a `NonLinearARModel()` that takes as input the 20 features and a hidden layer with 32 units. The remaining steps are familiar." @@ -10808,7 +10807,7 @@ { "cell_type": "code", "execution_count": 111, - "id": "595df68b", + "id": "038fea74", "metadata": {}, "outputs": [], "source": [ @@ -10827,7 +10826,7 @@ { "cell_type": "code", "execution_count": 112, - "id": "e8142533", + "id": "68d309b2", "metadata": {}, "outputs": [], "source": [ @@ -10841,7 +10840,7 @@ }, { "cell_type": "markdown", - "id": "86d4e139", + "id": "998d317c", "metadata": {}, "source": [ "We continue with the usual training steps, fit the model,\n", @@ -10851,7 +10850,7 @@ { "cell_type": "code", "execution_count": 113, - "id": "47bdb236", + "id": "9fc113a1", "metadata": { "lines_to_next_cell": 0 }, @@ -10893,7 +10892,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "f7abedb50db348d49e14abb6ac8ee82a", + "model_id": "6327380ca56a49628cb311d7382fe96d", "version_major": 2, "version_minor": 0 }, @@ -11194,7 +11193,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "0ae34f21f0364f47ae24e5b0a0758062", + "model_id": "e9c0c0840a4e4fe3bd9aa771a035ec2a", "version_major": 2, "version_minor": 0 }, @@ -11251,7 +11250,7 @@ }, { "cell_type": "markdown", - "id": "51f435d5", + "id": "66cd716d", "metadata": {}, "source": [ " \n", @@ -11263,8 +11262,8 @@ "metadata": { "jupytext": { "cell_metadata_filter": "-all", - "formats": "ipynb,Rmd", - "main_language": "python" + "main_language": "python", + "notebook_metadata_filter": "-all" }, "kernelspec": { "display_name": "Python 3 (ipykernel)", diff --git a/Ch11-surv-lab.ipynb b/Ch11-surv-lab.ipynb index 55d07b3..d4c812c 100644 --- a/Ch11-surv-lab.ipynb +++ b/Ch11-surv-lab.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "c7f4eb5a", + "id": "62a1a218", "metadata": {}, "source": [ "\n", @@ -12,7 +12,7 @@ }, { "cell_type": "markdown", - "id": "0ae03bc9", + "id": "9da89fbb", "metadata": {}, "source": [ "# Lab: Survival Analysis\n", @@ -31,13 +31,13 @@ { "cell_type": "code", "execution_count": 1, - "id": "91ac40fd", + "id": "d2d71add", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:33.224953Z", - "iopub.status.busy": "2023-08-07T00:19:33.224846Z", - "iopub.status.idle": "2023-08-07T00:19:34.446999Z", - "shell.execute_reply": "2023-08-07T00:19:34.446629Z" + "iopub.execute_input": "2023-08-21T02:30:04.373618Z", + "iopub.status.busy": "2023-08-21T02:30:04.373522Z", + "iopub.status.idle": "2023-08-21T02:30:05.528375Z", + "shell.execute_reply": "2023-08-21T02:30:05.528065Z" } }, "outputs": [], @@ -51,7 +51,7 @@ }, { "cell_type": "markdown", - "id": "a3dbcbbf", + "id": "70fe80b5", "metadata": {}, "source": [ "We also collect the new imports\n", @@ -61,13 +61,13 @@ { "cell_type": "code", "execution_count": 2, - "id": "99782418", + "id": "994efc94", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:34.448996Z", - "iopub.status.busy": "2023-08-07T00:19:34.448819Z", - "iopub.status.idle": "2023-08-07T00:19:34.539258Z", - "shell.execute_reply": "2023-08-07T00:19:34.538955Z" + "iopub.execute_input": "2023-08-21T02:30:05.530453Z", + "iopub.status.busy": "2023-08-21T02:30:05.530271Z", + "iopub.status.idle": "2023-08-21T02:30:05.593786Z", + "shell.execute_reply": "2023-08-21T02:30:05.593483Z" } }, "outputs": [], @@ -83,7 +83,7 @@ }, { "cell_type": "markdown", - "id": "2c538d28", + "id": "e65a4796", "metadata": {}, "source": [ "## Brain Cancer Data\n", @@ -94,13 +94,13 @@ { "cell_type": "code", "execution_count": 3, - "id": "3137149a", + "id": "9d41ddea", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:34.541177Z", - "iopub.status.busy": "2023-08-07T00:19:34.541057Z", - "iopub.status.idle": "2023-08-07T00:19:34.547991Z", - "shell.execute_reply": "2023-08-07T00:19:34.547753Z" + "iopub.execute_input": "2023-08-21T02:30:05.595762Z", + "iopub.status.busy": "2023-08-21T02:30:05.595642Z", + "iopub.status.idle": "2023-08-21T02:30:05.602243Z", + "shell.execute_reply": "2023-08-21T02:30:05.601969Z" } }, "outputs": [ @@ -122,7 +122,7 @@ }, { "cell_type": "markdown", - "id": "e798f172", + "id": "4ac65a33", "metadata": {}, "source": [ "The rows index the 88 patients, while the 8 columns contain the predictors and outcome variables.\n", @@ -132,13 +132,13 @@ { "cell_type": "code", "execution_count": 4, - "id": "45963c92", + "id": "2bece782", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:34.549558Z", - "iopub.status.busy": "2023-08-07T00:19:34.549453Z", - "iopub.status.idle": "2023-08-07T00:19:34.552571Z", - "shell.execute_reply": "2023-08-07T00:19:34.552293Z" + "iopub.execute_input": "2023-08-21T02:30:05.603954Z", + "iopub.status.busy": "2023-08-21T02:30:05.603852Z", + "iopub.status.idle": "2023-08-21T02:30:05.607075Z", + "shell.execute_reply": "2023-08-21T02:30:05.606729Z" }, "lines_to_next_cell": 2 }, @@ -163,13 +163,13 @@ { "cell_type": "code", "execution_count": 5, - "id": "73be61f6", + "id": "9ca465e5", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:34.553962Z", - "iopub.status.busy": "2023-08-07T00:19:34.553866Z", - "iopub.status.idle": "2023-08-07T00:19:34.556544Z", - "shell.execute_reply": "2023-08-07T00:19:34.556286Z" + "iopub.execute_input": "2023-08-21T02:30:05.608553Z", + "iopub.status.busy": "2023-08-21T02:30:05.608445Z", + "iopub.status.idle": "2023-08-21T02:30:05.611386Z", + "shell.execute_reply": "2023-08-21T02:30:05.611134Z" }, "lines_to_next_cell": 2 }, @@ -196,13 +196,13 @@ { "cell_type": "code", "execution_count": 6, - "id": "572f0b9e", + "id": "33bc4d3c", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:34.557984Z", - "iopub.status.busy": "2023-08-07T00:19:34.557901Z", - "iopub.status.idle": "2023-08-07T00:19:34.560759Z", - "shell.execute_reply": "2023-08-07T00:19:34.560490Z" + "iopub.execute_input": "2023-08-21T02:30:05.612735Z", + "iopub.status.busy": "2023-08-21T02:30:05.612639Z", + "iopub.status.idle": "2023-08-21T02:30:05.615164Z", + "shell.execute_reply": "2023-08-21T02:30:05.614915Z" }, "lines_to_next_cell": 2 }, @@ -226,7 +226,7 @@ }, { "cell_type": "markdown", - "id": "fbd132de", + "id": "eb9c6d4f", "metadata": {}, "source": [ "Before beginning an analysis, it is important to know how the\n", @@ -252,13 +252,13 @@ { "cell_type": "code", "execution_count": 7, - "id": "92c39707", + "id": "0b6dba70", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:34.562264Z", - "iopub.status.busy": "2023-08-07T00:19:34.562173Z", - "iopub.status.idle": "2023-08-07T00:19:34.764386Z", - "shell.execute_reply": "2023-08-07T00:19:34.763084Z" + "iopub.execute_input": "2023-08-21T02:30:05.616714Z", + "iopub.status.busy": "2023-08-21T02:30:05.616622Z", + "iopub.status.idle": "2023-08-21T02:30:05.728265Z", + "shell.execute_reply": "2023-08-21T02:30:05.727903Z" } }, "outputs": [ @@ -292,7 +292,7 @@ }, { "cell_type": "markdown", - "id": "f037665b", + "id": "2cc511cd", "metadata": {}, "source": [ "Next we create Kaplan-Meier survival curves that are stratified by\n", @@ -318,13 +318,13 @@ { "cell_type": "code", "execution_count": 8, - "id": "3fc7848c", + "id": "9e6f2e70", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:34.770269Z", - "iopub.status.busy": "2023-08-07T00:19:34.769500Z", - "iopub.status.idle": "2023-08-07T00:19:34.900514Z", - "shell.execute_reply": "2023-08-07T00:19:34.900203Z" + "iopub.execute_input": "2023-08-21T02:30:05.730200Z", + "iopub.status.busy": "2023-08-21T02:30:05.730056Z", + "iopub.status.idle": "2023-08-21T02:30:05.845830Z", + "shell.execute_reply": "2023-08-21T02:30:05.845506Z" } }, "outputs": [ @@ -350,7 +350,7 @@ }, { "cell_type": "markdown", - "id": "c0c1a16a", + "id": "4d7efefb", "metadata": {}, "source": [ "As discussed in Section 11.4, we can perform a\n", @@ -363,13 +363,13 @@ { "cell_type": "code", "execution_count": 9, - "id": "bf30d26f", + "id": "c135f7aa", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:34.902462Z", - "iopub.status.busy": "2023-08-07T00:19:34.902313Z", - "iopub.status.idle": "2023-08-07T00:19:34.956077Z", - "shell.execute_reply": "2023-08-07T00:19:34.955714Z" + "iopub.execute_input": "2023-08-21T02:30:05.847658Z", + "iopub.status.busy": "2023-08-21T02:30:05.847519Z", + "iopub.status.idle": "2023-08-21T02:30:05.901295Z", + "shell.execute_reply": "2023-08-21T02:30:05.900935Z" }, "lines_to_next_cell": 2 }, @@ -462,7 +462,7 @@ }, { "cell_type": "markdown", - "id": "e270649c", + "id": "bd14317d", "metadata": {}, "source": [ "The resulting $p$-value is $0.23$, indicating no evidence of a\n", @@ -476,13 +476,13 @@ { "cell_type": "code", "execution_count": 10, - "id": "2ab78e07", + "id": "5f9303dd", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:34.957966Z", - "iopub.status.busy": "2023-08-07T00:19:34.957792Z", - "iopub.status.idle": "2023-08-07T00:19:34.984567Z", - "shell.execute_reply": "2023-08-07T00:19:34.984261Z" + "iopub.execute_input": "2023-08-21T02:30:05.903263Z", + "iopub.status.busy": "2023-08-21T02:30:05.903017Z", + "iopub.status.idle": "2023-08-21T02:30:05.930691Z", + "shell.execute_reply": "2023-08-21T02:30:05.930331Z" } }, "outputs": [ @@ -553,7 +553,7 @@ }, { "cell_type": "markdown", - "id": "b58b93ae", + "id": "7e56e83e", "metadata": {}, "source": [ "The first argument to `fit` should be a data frame containing\n", @@ -569,13 +569,13 @@ { "cell_type": "code", "execution_count": 11, - "id": "4716b7b0", + "id": "bcc8470c", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:34.986336Z", - "iopub.status.busy": "2023-08-07T00:19:34.986193Z", - "iopub.status.idle": "2023-08-07T00:19:34.991518Z", - "shell.execute_reply": "2023-08-07T00:19:34.991252Z" + "iopub.execute_input": "2023-08-21T02:30:05.932434Z", + "iopub.status.busy": "2023-08-21T02:30:05.932285Z", + "iopub.status.idle": "2023-08-21T02:30:05.937796Z", + "shell.execute_reply": "2023-08-21T02:30:05.937549Z" } }, "outputs": [ @@ -659,7 +659,7 @@ }, { "cell_type": "markdown", - "id": "2820f486", + "id": "2e6163ca", "metadata": {}, "source": [ "Regardless of which test we use, we see that there is no clear\n", @@ -675,13 +675,13 @@ { "cell_type": "code", "execution_count": 12, - "id": "c2767d88", + "id": "c26a3499", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:34.993223Z", - "iopub.status.busy": "2023-08-07T00:19:34.993093Z", - "iopub.status.idle": "2023-08-07T00:19:35.028673Z", - "shell.execute_reply": "2023-08-07T00:19:35.028408Z" + "iopub.execute_input": "2023-08-21T02:30:05.939300Z", + "iopub.status.busy": "2023-08-21T02:30:05.939184Z", + "iopub.status.idle": "2023-08-21T02:30:05.979585Z", + "shell.execute_reply": "2023-08-21T02:30:05.979250Z" } }, "outputs": [ @@ -800,7 +800,7 @@ }, { "cell_type": "markdown", - "id": "eee4ab1f", + "id": "a96e311c", "metadata": {}, "source": [ " The `diagnosis` variable has been coded so that the baseline\n", @@ -823,13 +823,13 @@ { "cell_type": "code", "execution_count": 13, - "id": "ede1d219", + "id": "8d999f26", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:35.030313Z", - "iopub.status.busy": "2023-08-07T00:19:35.030211Z", - "iopub.status.idle": "2023-08-07T00:19:35.034142Z", - "shell.execute_reply": "2023-08-07T00:19:35.033836Z" + "iopub.execute_input": "2023-08-21T02:30:05.981441Z", + "iopub.status.busy": "2023-08-21T02:30:05.981315Z", + "iopub.status.idle": "2023-08-21T02:30:05.986317Z", + "shell.execute_reply": "2023-08-21T02:30:05.985949Z" } }, "outputs": [], @@ -845,7 +845,7 @@ }, { "cell_type": "markdown", - "id": "e1c307ae", + "id": "bf628fd8", "metadata": {}, "source": [ "We make four\n", @@ -856,13 +856,13 @@ { "cell_type": "code", "execution_count": 14, - "id": "dc032a71", + "id": "a1f6b355", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:35.035583Z", - "iopub.status.busy": "2023-08-07T00:19:35.035483Z", - "iopub.status.idle": "2023-08-07T00:19:35.041790Z", - "shell.execute_reply": "2023-08-07T00:19:35.041394Z" + "iopub.execute_input": "2023-08-21T02:30:05.988012Z", + "iopub.status.busy": "2023-08-21T02:30:05.987898Z", + "iopub.status.idle": "2023-08-21T02:30:05.993889Z", + "shell.execute_reply": "2023-08-21T02:30:05.993534Z" } }, "outputs": [ @@ -974,7 +974,7 @@ }, { "cell_type": "markdown", - "id": "84da2586", + "id": "3f6334e4", "metadata": {}, "source": [ "We then construct the model matrix based on the model specification `all_MS` used to fit\n", @@ -984,13 +984,13 @@ { "cell_type": "code", "execution_count": 15, - "id": "e7c1fe43", + "id": "a1a9d5b3", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:35.043454Z", - "iopub.status.busy": "2023-08-07T00:19:35.043346Z", - "iopub.status.idle": "2023-08-07T00:19:35.050931Z", - "shell.execute_reply": "2023-08-07T00:19:35.050643Z" + "iopub.execute_input": "2023-08-21T02:30:05.995682Z", + "iopub.status.busy": "2023-08-21T02:30:05.995549Z", + "iopub.status.idle": "2023-08-21T02:30:06.005479Z", + "shell.execute_reply": "2023-08-21T02:30:06.005089Z" } }, "outputs": [ @@ -1117,7 +1117,7 @@ }, { "cell_type": "markdown", - "id": "3cfe1ec4", + "id": "3eaec7e6", "metadata": {}, "source": [ "We can use the `predict_survival_function()` method to obtain the estimated survival function." @@ -1126,13 +1126,13 @@ { "cell_type": "code", "execution_count": 16, - "id": "f89fbed7", + "id": "1a18b56a", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:35.052472Z", - "iopub.status.busy": "2023-08-07T00:19:35.052367Z", - "iopub.status.idle": "2023-08-07T00:19:35.059232Z", - "shell.execute_reply": "2023-08-07T00:19:35.058922Z" + "iopub.execute_input": "2023-08-21T02:30:06.007172Z", + "iopub.status.busy": "2023-08-21T02:30:06.007049Z", + "iopub.status.idle": "2023-08-21T02:30:06.014185Z", + "shell.execute_reply": "2023-08-21T02:30:06.013870Z" }, "lines_to_next_cell": 0 }, @@ -1276,7 +1276,7 @@ }, { "cell_type": "markdown", - "id": "29afd641", + "id": "7d533f90", "metadata": {}, "source": [ "This returns a data frame,\n", @@ -1287,13 +1287,13 @@ { "cell_type": "code", "execution_count": 17, - "id": "8f0329b4", + "id": "ff3de29c", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:35.061046Z", - "iopub.status.busy": "2023-08-07T00:19:35.060930Z", - "iopub.status.idle": "2023-08-07T00:19:35.167601Z", - "shell.execute_reply": "2023-08-07T00:19:35.167288Z" + "iopub.execute_input": "2023-08-21T02:30:06.015778Z", + "iopub.status.busy": "2023-08-21T02:30:06.015664Z", + "iopub.status.idle": "2023-08-21T02:30:06.124035Z", + "shell.execute_reply": "2023-08-21T02:30:06.123732Z" }, "lines_to_next_cell": 2 }, @@ -1316,7 +1316,7 @@ }, { "cell_type": "markdown", - "id": "12723ce5", + "id": "e660793e", "metadata": {}, "source": [ "## Publication Data\n", @@ -1330,13 +1330,13 @@ { "cell_type": "code", "execution_count": 18, - "id": "3045bfc0", + "id": "cd9060c1", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:35.169251Z", - "iopub.status.busy": "2023-08-07T00:19:35.169133Z", - "iopub.status.idle": "2023-08-07T00:19:35.287186Z", - "shell.execute_reply": "2023-08-07T00:19:35.286859Z" + "iopub.execute_input": "2023-08-21T02:30:06.125714Z", + "iopub.status.busy": "2023-08-21T02:30:06.125592Z", + "iopub.status.idle": "2023-08-21T02:30:06.243701Z", + "shell.execute_reply": "2023-08-21T02:30:06.243300Z" } }, "outputs": [ @@ -1363,7 +1363,7 @@ }, { "cell_type": "markdown", - "id": "6fcb22f7", + "id": "d8f0f687", "metadata": {}, "source": [ "As discussed previously, the $p$-values from fitting Cox’s\n", @@ -1375,13 +1375,13 @@ { "cell_type": "code", "execution_count": 19, - "id": "d070f716", + "id": "6af7106e", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:35.288887Z", - "iopub.status.busy": "2023-08-07T00:19:35.288769Z", - "iopub.status.idle": "2023-08-07T00:19:35.321428Z", - "shell.execute_reply": "2023-08-07T00:19:35.321128Z" + "iopub.execute_input": "2023-08-21T02:30:06.245493Z", + "iopub.status.busy": "2023-08-21T02:30:06.245357Z", + "iopub.status.idle": "2023-08-21T02:30:06.281521Z", + "shell.execute_reply": "2023-08-21T02:30:06.281138Z" }, "lines_to_next_cell": 2 }, @@ -1453,7 +1453,7 @@ }, { "cell_type": "markdown", - "id": "513a55b1", + "id": "8ef28b8b", "metadata": {}, "source": [ "However, the results change dramatically when we include other\n", @@ -1464,13 +1464,13 @@ { "cell_type": "code", "execution_count": 20, - "id": "2bbcdd0c", + "id": "b6ebefa7", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:35.323119Z", - "iopub.status.busy": "2023-08-07T00:19:35.323003Z", - "iopub.status.idle": "2023-08-07T00:19:35.362910Z", - "shell.execute_reply": "2023-08-07T00:19:35.362438Z" + "iopub.execute_input": "2023-08-21T02:30:06.283282Z", + "iopub.status.busy": "2023-08-21T02:30:06.283123Z", + "iopub.status.idle": "2023-08-21T02:30:06.327003Z", + "shell.execute_reply": "2023-08-21T02:30:06.326646Z" } }, "outputs": [ @@ -1573,7 +1573,7 @@ }, { "cell_type": "markdown", - "id": "75bb8aa6", + "id": "d463e623", "metadata": {}, "source": [ "We see that there are a number of statistically significant variables,\n", @@ -1583,7 +1583,7 @@ }, { "cell_type": "markdown", - "id": "bfe236e5", + "id": "a23c38e0", "metadata": {}, "source": [ "## Call Center Data\n", @@ -1608,13 +1608,13 @@ { "cell_type": "code", "execution_count": 21, - "id": "b8ece43a", + "id": "098f42ea", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:35.364905Z", - "iopub.status.busy": "2023-08-07T00:19:35.364772Z", - "iopub.status.idle": "2023-08-07T00:19:35.368589Z", - "shell.execute_reply": "2023-08-07T00:19:35.368291Z" + "iopub.execute_input": "2023-08-21T02:30:06.329058Z", + "iopub.status.busy": "2023-08-21T02:30:06.328927Z", + "iopub.status.idle": "2023-08-21T02:30:06.332782Z", + "shell.execute_reply": "2023-08-21T02:30:06.332425Z" } }, "outputs": [], @@ -1637,7 +1637,7 @@ }, { "cell_type": "markdown", - "id": "c93e44f3", + "id": "2f54ed03", "metadata": {}, "source": [ "We then build a model matrix (omitting the intercept)" @@ -1646,13 +1646,13 @@ { "cell_type": "code", "execution_count": 22, - "id": "3e4f766f", + "id": "26d5d0d0", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:35.370485Z", - "iopub.status.busy": "2023-08-07T00:19:35.370371Z", - "iopub.status.idle": "2023-08-07T00:19:35.377790Z", - "shell.execute_reply": "2023-08-07T00:19:35.377469Z" + "iopub.execute_input": "2023-08-21T02:30:06.334692Z", + "iopub.status.busy": "2023-08-21T02:30:06.334589Z", + "iopub.status.idle": "2023-08-21T02:30:06.344047Z", + "shell.execute_reply": "2023-08-21T02:30:06.343708Z" } }, "outputs": [], @@ -1666,7 +1666,7 @@ }, { "cell_type": "markdown", - "id": "cad1ed19", + "id": "a1a8f65d", "metadata": {}, "source": [ "It is worthwhile to take a peek at the model matrix `X`, so\n", @@ -1678,13 +1678,13 @@ { "cell_type": "code", "execution_count": 23, - "id": "72f42d14", + "id": "77500663", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:35.380244Z", - "iopub.status.busy": "2023-08-07T00:19:35.380068Z", - "iopub.status.idle": "2023-08-07T00:19:35.384542Z", - "shell.execute_reply": "2023-08-07T00:19:35.384259Z" + "iopub.execute_input": "2023-08-21T02:30:06.345660Z", + "iopub.status.busy": "2023-08-21T02:30:06.345575Z", + "iopub.status.idle": "2023-08-21T02:30:06.350086Z", + "shell.execute_reply": "2023-08-21T02:30:06.349797Z" } }, "outputs": [ @@ -1781,7 +1781,7 @@ }, { "cell_type": "markdown", - "id": "38c40ae1", + "id": "fd7bd61c", "metadata": {}, "source": [ "Next, we specify the coefficients and the hazard function." @@ -1790,13 +1790,13 @@ { "cell_type": "code", "execution_count": 24, - "id": "8b921536", + "id": "74324a56", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:35.386034Z", - "iopub.status.busy": "2023-08-07T00:19:35.385942Z", - "iopub.status.idle": "2023-08-07T00:19:35.420461Z", - "shell.execute_reply": "2023-08-07T00:19:35.405608Z" + "iopub.execute_input": "2023-08-21T02:30:06.351738Z", + "iopub.status.busy": "2023-08-21T02:30:06.351549Z", + "iopub.status.idle": "2023-08-21T02:30:06.444268Z", + "shell.execute_reply": "2023-08-21T02:30:06.441484Z" } }, "outputs": [], @@ -1808,7 +1808,7 @@ }, { "cell_type": "markdown", - "id": "a0698ffd", + "id": "cfe879e6", "metadata": {}, "source": [ "Here, we have set the coefficient associated with `Operators` to\n", @@ -1837,13 +1837,13 @@ { "cell_type": "code", "execution_count": 25, - "id": "96ce0f99", + "id": "d4be10c2", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:35.484657Z", - "iopub.status.busy": "2023-08-07T00:19:35.484150Z", - "iopub.status.idle": "2023-08-07T00:19:35.509286Z", - "shell.execute_reply": "2023-08-07T00:19:35.508169Z" + "iopub.execute_input": "2023-08-21T02:30:06.449822Z", + "iopub.status.busy": "2023-08-21T02:30:06.449515Z", + "iopub.status.idle": "2023-08-21T02:30:06.458388Z", + "shell.execute_reply": "2023-08-21T02:30:06.457673Z" }, "lines_to_next_cell": 0 }, @@ -1854,7 +1854,7 @@ }, { "cell_type": "markdown", - "id": "1956e4c2", + "id": "6095cfc1", "metadata": {}, "source": [ "We are now ready to generate data under the Cox proportional hazards\n", @@ -1868,13 +1868,13 @@ { "cell_type": "code", "execution_count": 26, - "id": "63d78ff9", + "id": "c98d396f", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:35.522637Z", - "iopub.status.busy": "2023-08-07T00:19:35.522260Z", - "iopub.status.idle": "2023-08-07T00:19:35.630452Z", - "shell.execute_reply": "2023-08-07T00:19:35.627960Z" + "iopub.execute_input": "2023-08-21T02:30:06.461931Z", + "iopub.status.busy": "2023-08-21T02:30:06.461787Z", + "iopub.status.idle": "2023-08-21T02:30:06.624349Z", + "shell.execute_reply": "2023-08-21T02:30:06.624026Z" } }, "outputs": [], @@ -1886,7 +1886,7 @@ }, { "cell_type": "markdown", - "id": "035e4ecf", + "id": "ed2e23ea", "metadata": {}, "source": [ "We now simulate our censoring variable, for which we assume\n", @@ -1897,13 +1897,13 @@ { "cell_type": "code", "execution_count": 27, - "id": "fe008dbf", + "id": "caf627bc", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:35.635844Z", - "iopub.status.busy": "2023-08-07T00:19:35.635469Z", - "iopub.status.idle": "2023-08-07T00:19:35.649527Z", - "shell.execute_reply": "2023-08-07T00:19:35.646191Z" + "iopub.execute_input": "2023-08-21T02:30:06.626165Z", + "iopub.status.busy": "2023-08-21T02:30:06.626054Z", + "iopub.status.idle": "2023-08-21T02:30:06.630808Z", + "shell.execute_reply": "2023-08-21T02:30:06.630542Z" }, "lines_to_next_cell": 2 }, @@ -2005,13 +2005,13 @@ { "cell_type": "code", "execution_count": 28, - "id": "c3a2bec7", + "id": "e63242f9", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:35.653001Z", - "iopub.status.busy": "2023-08-07T00:19:35.652338Z", - "iopub.status.idle": "2023-08-07T00:19:35.656830Z", - "shell.execute_reply": "2023-08-07T00:19:35.656500Z" + "iopub.execute_input": "2023-08-21T02:30:06.632357Z", + "iopub.status.busy": "2023-08-21T02:30:06.632261Z", + "iopub.status.idle": "2023-08-21T02:30:06.634630Z", + "shell.execute_reply": "2023-08-21T02:30:06.634305Z" } }, "outputs": [ @@ -2032,7 +2032,7 @@ }, { "cell_type": "markdown", - "id": "207937e5", + "id": "5f345011", "metadata": {}, "source": [ "We now plot Kaplan-Meier survival curves. First, we stratify by `Center`." @@ -2041,13 +2041,13 @@ { "cell_type": "code", "execution_count": 29, - "id": "2b27af56", + "id": "338db71d", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:35.658421Z", - "iopub.status.busy": "2023-08-07T00:19:35.658328Z", - "iopub.status.idle": "2023-08-07T00:19:35.811796Z", - "shell.execute_reply": "2023-08-07T00:19:35.811449Z" + "iopub.execute_input": "2023-08-21T02:30:06.636188Z", + "iopub.status.busy": "2023-08-21T02:30:06.636081Z", + "iopub.status.idle": "2023-08-21T02:30:06.791856Z", + "shell.execute_reply": "2023-08-21T02:30:06.791521Z" } }, "outputs": [ @@ -2084,7 +2084,7 @@ }, { "cell_type": "markdown", - "id": "be6d37f7", + "id": "1b5a1230", "metadata": {}, "source": [ "Next, we stratify by `Time`." @@ -2093,13 +2093,13 @@ { "cell_type": "code", "execution_count": 30, - "id": "9625598d", + "id": "c1db6e15", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:35.813696Z", - "iopub.status.busy": "2023-08-07T00:19:35.813601Z", - "iopub.status.idle": "2023-08-07T00:19:36.041021Z", - "shell.execute_reply": "2023-08-07T00:19:36.040708Z" + "iopub.execute_input": "2023-08-21T02:30:06.793629Z", + "iopub.status.busy": "2023-08-21T02:30:06.793538Z", + "iopub.status.idle": "2023-08-21T02:30:06.992155Z", + "shell.execute_reply": "2023-08-21T02:30:06.991803Z" } }, "outputs": [ @@ -2136,7 +2136,7 @@ }, { "cell_type": "markdown", - "id": "1408ebc0", + "id": "deb73d38", "metadata": {}, "source": [ "It seems that calls at Call Center B take longer to be answered than\n", @@ -2149,13 +2149,13 @@ { "cell_type": "code", "execution_count": 31, - "id": "75a744ef", + "id": "02ea4212", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:36.043079Z", - "iopub.status.busy": "2023-08-07T00:19:36.042900Z", - "iopub.status.idle": "2023-08-07T00:19:36.061936Z", - "shell.execute_reply": "2023-08-07T00:19:36.061630Z" + "iopub.execute_input": "2023-08-21T02:30:06.993929Z", + "iopub.status.busy": "2023-08-21T02:30:06.993819Z", + "iopub.status.idle": "2023-08-21T02:30:07.011557Z", + "shell.execute_reply": "2023-08-21T02:30:07.011276Z" }, "lines_to_next_cell": 2 }, @@ -2247,7 +2247,7 @@ }, { "cell_type": "markdown", - "id": "be5055e4", + "id": "db9cc6ee", "metadata": {}, "source": [ "Next, we consider the effect of `Time`." @@ -2256,13 +2256,13 @@ { "cell_type": "code", "execution_count": 32, - "id": "9badb3e3", + "id": "0ac610d5", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:36.063627Z", - "iopub.status.busy": "2023-08-07T00:19:36.063519Z", - "iopub.status.idle": "2023-08-07T00:19:36.082451Z", - "shell.execute_reply": "2023-08-07T00:19:36.082161Z" + "iopub.execute_input": "2023-08-21T02:30:07.013331Z", + "iopub.status.busy": "2023-08-21T02:30:07.013187Z", + "iopub.status.idle": "2023-08-21T02:30:07.030401Z", + "shell.execute_reply": "2023-08-21T02:30:07.030073Z" }, "lines_to_next_cell": 2 }, @@ -2354,7 +2354,7 @@ }, { "cell_type": "markdown", - "id": "64b2bc33", + "id": "0946d3ef", "metadata": {}, "source": [ "As in the case of a categorical variable with 2 levels, these\n", @@ -2366,13 +2366,13 @@ { "cell_type": "code", "execution_count": 33, - "id": "026e9ff8", + "id": "107cedad", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:36.084076Z", - "iopub.status.busy": "2023-08-07T00:19:36.083964Z", - "iopub.status.idle": "2023-08-07T00:19:36.208409Z", - "shell.execute_reply": "2023-08-07T00:19:36.208076Z" + "iopub.execute_input": "2023-08-21T02:30:07.032008Z", + "iopub.status.busy": "2023-08-21T02:30:07.031887Z", + "iopub.status.idle": "2023-08-21T02:30:07.160931Z", + "shell.execute_reply": "2023-08-21T02:30:07.160639Z" }, "lines_to_next_cell": 2 }, @@ -2462,7 +2462,7 @@ }, { "cell_type": "markdown", - "id": "4ed54fe0", + "id": "10f2a0c1", "metadata": {}, "source": [ "Next, we look at the results for `Time`." @@ -2471,13 +2471,13 @@ { "cell_type": "code", "execution_count": 34, - "id": "7cab3789", + "id": "334eb331", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:36.210101Z", - "iopub.status.busy": "2023-08-07T00:19:36.209985Z", - "iopub.status.idle": "2023-08-07T00:19:36.334146Z", - "shell.execute_reply": "2023-08-07T00:19:36.333801Z" + "iopub.execute_input": "2023-08-21T02:30:07.162793Z", + "iopub.status.busy": "2023-08-21T02:30:07.162651Z", + "iopub.status.idle": "2023-08-21T02:30:07.291875Z", + "shell.execute_reply": "2023-08-21T02:30:07.291550Z" }, "lines_to_next_cell": 2 }, @@ -2567,7 +2567,7 @@ }, { "cell_type": "markdown", - "id": "2d250dc9", + "id": "774963d4", "metadata": {}, "source": [ "We find that differences between centers are highly significant, as\n", @@ -2579,13 +2579,13 @@ { "cell_type": "code", "execution_count": 35, - "id": "5cc4b898", + "id": "421811c5", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:36.336025Z", - "iopub.status.busy": "2023-08-07T00:19:36.335898Z", - "iopub.status.idle": "2023-08-07T00:19:36.561174Z", - "shell.execute_reply": "2023-08-07T00:19:36.559597Z" + "iopub.execute_input": "2023-08-21T02:30:07.293545Z", + "iopub.status.busy": "2023-08-21T02:30:07.293433Z", + "iopub.status.idle": "2023-08-21T02:30:07.532213Z", + "shell.execute_reply": "2023-08-21T02:30:07.531293Z" }, "lines_to_next_cell": 2 }, @@ -2684,7 +2684,7 @@ }, { "cell_type": "markdown", - "id": "bec9d61d", + "id": "3c65063f", "metadata": {}, "source": [ "The $p$-values for Center B and evening time\n", diff --git a/Ch12-unsup-lab.Rmd b/Ch12-unsup-lab.Rmd index 5af8e75..8f885f4 100644 --- a/Ch12-unsup-lab.Rmd +++ b/Ch12-unsup-lab.Rmd @@ -14,7 +14,7 @@ jupyter: # Chapter 12 - # Lab: Unsupervised Learning +# Lab: Unsupervised Learning In this lab we demonstrate PCA and clustering on several datasets. As in other labs, we import some of our libraries at this top level. This makes the code more readable, as scanning the first few @@ -819,7 +819,7 @@ linkage. Clearly cell lines within a single cancer type do tend to cluster together, although the clustering is not perfect. We will use complete linkage hierarchical clustering for the analysis that follows. - + We can cut the dendrogram at the height that will yield a particular number of clusters, say four: diff --git a/Ch12-unsup-lab.ipynb b/Ch12-unsup-lab.ipynb index 6fb862b..54b3379 100644 --- a/Ch12-unsup-lab.ipynb +++ b/Ch12-unsup-lab.ipynb @@ -2,13 +2,13 @@ "cells": [ { "cell_type": "markdown", - "id": "80f16ff6", + "id": "b1c6a137", "metadata": {}, "source": [ "\n", "# Chapter 12\n", "\n", - " # Lab: Unsupervised Learning\n", + "# Lab: Unsupervised Learning\n", "In this lab we demonstrate PCA and clustering on several datasets.\n", "As in other labs, we import some of our libraries at this top\n", "level. This makes the code more readable, as scanning the first few\n", @@ -19,13 +19,13 @@ { "cell_type": "code", "execution_count": 1, - "id": "24559be0", + "id": "6d5ba583", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:37.853212Z", - "iopub.status.busy": "2023-08-07T00:19:37.853110Z", - "iopub.status.idle": "2023-08-07T00:19:38.840274Z", - "shell.execute_reply": "2023-08-07T00:19:38.839771Z" + "iopub.execute_input": "2023-08-21T02:30:08.846762Z", + "iopub.status.busy": "2023-08-21T02:30:08.846653Z", + "iopub.status.idle": "2023-08-21T02:30:09.939364Z", + "shell.execute_reply": "2023-08-21T02:30:09.939004Z" }, "lines_to_next_cell": 0 }, @@ -42,7 +42,7 @@ }, { "cell_type": "markdown", - "id": "59b24a4b", + "id": "d01ab033", "metadata": {}, "source": [ "We also collect the new imports\n", @@ -52,13 +52,13 @@ { "cell_type": "code", "execution_count": 2, - "id": "06fff57d", + "id": "64c83257", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:38.842722Z", - "iopub.status.busy": "2023-08-07T00:19:38.842335Z", - "iopub.status.idle": "2023-08-07T00:19:39.050690Z", - "shell.execute_reply": "2023-08-07T00:19:39.050367Z" + "iopub.execute_input": "2023-08-21T02:30:09.941473Z", + "iopub.status.busy": "2023-08-21T02:30:09.941296Z", + "iopub.status.idle": "2023-08-21T02:30:10.036632Z", + "shell.execute_reply": "2023-08-21T02:30:10.036163Z" } }, "outputs": [], @@ -74,7 +74,7 @@ }, { "cell_type": "markdown", - "id": "f091de06", + "id": "da4201dc", "metadata": {}, "source": [ "## Principal Components Analysis\n", @@ -89,13 +89,13 @@ { "cell_type": "code", "execution_count": 3, - "id": "f425e07e", + "id": "04ec4481", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:39.052503Z", - "iopub.status.busy": "2023-08-07T00:19:39.052392Z", - "iopub.status.idle": "2023-08-07T00:19:40.034559Z", - "shell.execute_reply": "2023-08-07T00:19:40.034237Z" + "iopub.execute_input": "2023-08-21T02:30:10.038974Z", + "iopub.status.busy": "2023-08-21T02:30:10.038734Z", + "iopub.status.idle": "2023-08-21T02:30:11.214222Z", + "shell.execute_reply": "2023-08-21T02:30:11.213910Z" } }, "outputs": [ @@ -547,7 +547,7 @@ }, { "cell_type": "markdown", - "id": "e2942890", + "id": "02805a1a", "metadata": {}, "source": [ "The columns of the data set contain the four variables." @@ -556,13 +556,13 @@ { "cell_type": "code", "execution_count": 4, - "id": "b127d014", + "id": "1b66036a", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:40.036610Z", - "iopub.status.busy": "2023-08-07T00:19:40.036476Z", - "iopub.status.idle": "2023-08-07T00:19:40.039012Z", - "shell.execute_reply": "2023-08-07T00:19:40.038760Z" + "iopub.execute_input": "2023-08-21T02:30:11.216028Z", + "iopub.status.busy": "2023-08-21T02:30:11.215902Z", + "iopub.status.idle": "2023-08-21T02:30:11.218553Z", + "shell.execute_reply": "2023-08-21T02:30:11.218232Z" } }, "outputs": [ @@ -583,7 +583,7 @@ }, { "cell_type": "markdown", - "id": "68718331", + "id": "3decadf1", "metadata": {}, "source": [ "We first briefly examine the data. We notice that the variables have vastly different means." @@ -592,13 +592,13 @@ { "cell_type": "code", "execution_count": 5, - "id": "c7343f72", + "id": "52e900fd", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:40.040518Z", - "iopub.status.busy": "2023-08-07T00:19:40.040415Z", - "iopub.status.idle": "2023-08-07T00:19:40.043628Z", - "shell.execute_reply": "2023-08-07T00:19:40.043271Z" + "iopub.execute_input": "2023-08-21T02:30:11.220090Z", + "iopub.status.busy": "2023-08-21T02:30:11.219971Z", + "iopub.status.idle": "2023-08-21T02:30:11.223332Z", + "shell.execute_reply": "2023-08-21T02:30:11.223004Z" }, "lines_to_next_cell": 2 }, @@ -624,7 +624,7 @@ }, { "cell_type": "markdown", - "id": "171a1ee0", + "id": "27d011da", "metadata": {}, "source": [ "Dataframes have several useful methods for computing\n", @@ -635,13 +635,13 @@ { "cell_type": "code", "execution_count": 6, - "id": "34501140", + "id": "68684f78", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:40.045538Z", - "iopub.status.busy": "2023-08-07T00:19:40.045415Z", - "iopub.status.idle": "2023-08-07T00:19:40.048692Z", - "shell.execute_reply": "2023-08-07T00:19:40.048363Z" + "iopub.execute_input": "2023-08-21T02:30:11.225020Z", + "iopub.status.busy": "2023-08-21T02:30:11.224913Z", + "iopub.status.idle": "2023-08-21T02:30:11.228160Z", + "shell.execute_reply": "2023-08-21T02:30:11.227843Z" } }, "outputs": [ @@ -666,7 +666,7 @@ }, { "cell_type": "markdown", - "id": "5634db88", + "id": "ef3003e0", "metadata": {}, "source": [ "Not surprisingly, the variables also have vastly different variances.\n", @@ -689,13 +689,13 @@ { "cell_type": "code", "execution_count": 7, - "id": "daf119e8", + "id": "d2b7caf9", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:40.050181Z", - "iopub.status.busy": "2023-08-07T00:19:40.050071Z", - "iopub.status.idle": "2023-08-07T00:19:40.053916Z", - "shell.execute_reply": "2023-08-07T00:19:40.053514Z" + "iopub.execute_input": "2023-08-21T02:30:11.229847Z", + "iopub.status.busy": "2023-08-21T02:30:11.229717Z", + "iopub.status.idle": "2023-08-21T02:30:11.233108Z", + "shell.execute_reply": "2023-08-21T02:30:11.232828Z" }, "lines_to_next_cell": 0 }, @@ -708,7 +708,7 @@ }, { "cell_type": "markdown", - "id": "dd6e5f5b", + "id": "54c90b5c", "metadata": {}, "source": [ "Having scaled the data, we can then\n", @@ -719,13 +719,13 @@ { "cell_type": "code", "execution_count": 8, - "id": "a0eda7c9", + "id": "de8f57fa", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:40.055993Z", - "iopub.status.busy": "2023-08-07T00:19:40.055896Z", - "iopub.status.idle": "2023-08-07T00:19:40.057688Z", - "shell.execute_reply": "2023-08-07T00:19:40.057406Z" + "iopub.execute_input": "2023-08-21T02:30:11.234711Z", + "iopub.status.busy": "2023-08-21T02:30:11.234595Z", + "iopub.status.idle": "2023-08-21T02:30:11.241074Z", + "shell.execute_reply": "2023-08-21T02:30:11.239548Z" }, "lines_to_next_cell": 0 }, @@ -736,7 +736,7 @@ }, { "cell_type": "markdown", - "id": "e5758ee5", + "id": "42bd0a96", "metadata": {}, "source": [ "(By default, the `PCA()` transform centers the variables to have\n", @@ -748,13 +748,13 @@ { "cell_type": "code", "execution_count": 9, - "id": "1430fb3c", + "id": "26c45f1e", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:40.059093Z", - "iopub.status.busy": "2023-08-07T00:19:40.059009Z", - "iopub.status.idle": "2023-08-07T00:19:40.062720Z", - "shell.execute_reply": "2023-08-07T00:19:40.062341Z" + "iopub.execute_input": "2023-08-21T02:30:11.242595Z", + "iopub.status.busy": "2023-08-21T02:30:11.242489Z", + "iopub.status.idle": "2023-08-21T02:30:11.246323Z", + "shell.execute_reply": "2023-08-21T02:30:11.246064Z" } }, "outputs": [ @@ -778,7 +778,7 @@ }, { "cell_type": "markdown", - "id": "56890b11", + "id": "a68b81f5", "metadata": {}, "source": [ "After fitting, the `mean_` attribute corresponds to the means\n", @@ -789,13 +789,13 @@ { "cell_type": "code", "execution_count": 10, - "id": "6131d8d1", + "id": "3097e99d", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:40.064409Z", - "iopub.status.busy": "2023-08-07T00:19:40.064295Z", - "iopub.status.idle": "2023-08-07T00:19:40.066520Z", - "shell.execute_reply": "2023-08-07T00:19:40.066266Z" + "iopub.execute_input": "2023-08-21T02:30:11.247882Z", + "iopub.status.busy": "2023-08-21T02:30:11.247777Z", + "iopub.status.idle": "2023-08-21T02:30:11.250076Z", + "shell.execute_reply": "2023-08-21T02:30:11.249792Z" } }, "outputs": [ @@ -816,7 +816,7 @@ }, { "cell_type": "markdown", - "id": "3c1c34e7", + "id": "0c81e463", "metadata": {}, "source": [ "The scores can be computed using the `transform()` method\n", @@ -826,13 +826,13 @@ { "cell_type": "code", "execution_count": 11, - "id": "08246aad", + "id": "c071a242", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:40.067963Z", - "iopub.status.busy": "2023-08-07T00:19:40.067854Z", - "iopub.status.idle": "2023-08-07T00:19:40.069743Z", - "shell.execute_reply": "2023-08-07T00:19:40.069498Z" + "iopub.execute_input": "2023-08-21T02:30:11.251690Z", + "iopub.status.busy": "2023-08-21T02:30:11.251589Z", + "iopub.status.idle": "2023-08-21T02:30:11.253710Z", + "shell.execute_reply": "2023-08-21T02:30:11.253213Z" }, "lines_to_next_cell": 0 }, @@ -843,7 +843,7 @@ }, { "cell_type": "markdown", - "id": "574ed47f", + "id": "84581683", "metadata": {}, "source": [ "We will plot these scores a bit further down.\n", @@ -855,13 +855,13 @@ { "cell_type": "code", "execution_count": 12, - "id": "b682b632", + "id": "c9bcab06", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:40.071367Z", - "iopub.status.busy": "2023-08-07T00:19:40.071220Z", - "iopub.status.idle": "2023-08-07T00:19:40.073516Z", - "shell.execute_reply": "2023-08-07T00:19:40.073257Z" + "iopub.execute_input": "2023-08-21T02:30:11.255475Z", + "iopub.status.busy": "2023-08-21T02:30:11.255331Z", + "iopub.status.idle": "2023-08-21T02:30:11.257666Z", + "shell.execute_reply": "2023-08-21T02:30:11.257404Z" } }, "outputs": [ @@ -885,7 +885,7 @@ }, { "cell_type": "markdown", - "id": "fc8bfc99", + "id": "9dec4ca1", "metadata": {}, "source": [ "The `biplot` is a common visualization method used with\n", @@ -898,13 +898,13 @@ { "cell_type": "code", "execution_count": 13, - "id": "c165e990", + "id": "7375ab13", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:40.075045Z", - "iopub.status.busy": "2023-08-07T00:19:40.074930Z", - "iopub.status.idle": "2023-08-07T00:19:40.260577Z", - "shell.execute_reply": "2023-08-07T00:19:40.259910Z" + "iopub.execute_input": "2023-08-21T02:30:11.259208Z", + "iopub.status.busy": "2023-08-21T02:30:11.259106Z", + "iopub.status.idle": "2023-08-21T02:30:11.411821Z", + "shell.execute_reply": "2023-08-21T02:30:11.411424Z" }, "lines_to_next_cell": 0 }, @@ -935,7 +935,7 @@ }, { "cell_type": "markdown", - "id": "eaef3e98", + "id": "4dacec4b", "metadata": {}, "source": [ "Notice that this figure is a reflection of Figure 12.1 through the $y$-axis. Recall that the\n", @@ -948,13 +948,13 @@ { "cell_type": "code", "execution_count": 14, - "id": "848c9f35", + "id": "4c1988de", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:40.266938Z", - "iopub.status.busy": "2023-08-07T00:19:40.266653Z", - "iopub.status.idle": "2023-08-07T00:19:40.403287Z", - "shell.execute_reply": "2023-08-07T00:19:40.402947Z" + "iopub.execute_input": "2023-08-21T02:30:11.413868Z", + "iopub.status.busy": "2023-08-21T02:30:11.413708Z", + "iopub.status.idle": "2023-08-21T02:30:11.510731Z", + "shell.execute_reply": "2023-08-21T02:30:11.510392Z" } }, "outputs": [ @@ -986,7 +986,7 @@ }, { "cell_type": "markdown", - "id": "e380e98d", + "id": "f96f4f26", "metadata": {}, "source": [ "The standard deviations of the principal component scores are as follows:" @@ -995,13 +995,13 @@ { "cell_type": "code", "execution_count": 15, - "id": "34fdfe21", + "id": "965c6320", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:40.404992Z", - "iopub.status.busy": "2023-08-07T00:19:40.404880Z", - "iopub.status.idle": "2023-08-07T00:19:40.407457Z", - "shell.execute_reply": "2023-08-07T00:19:40.407174Z" + "iopub.execute_input": "2023-08-21T02:30:11.512534Z", + "iopub.status.busy": "2023-08-21T02:30:11.512382Z", + "iopub.status.idle": "2023-08-21T02:30:11.515359Z", + "shell.execute_reply": "2023-08-21T02:30:11.514710Z" }, "lines_to_next_cell": 2 }, @@ -1023,7 +1023,7 @@ }, { "cell_type": "markdown", - "id": "c24b8ca2", + "id": "0aa2cebf", "metadata": {}, "source": [ "The variance of each score can be extracted directly from the `pcaUS` object via\n", @@ -1033,13 +1033,13 @@ { "cell_type": "code", "execution_count": 16, - "id": "31b43c57", + "id": "cd5e1663", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:40.409206Z", - "iopub.status.busy": "2023-08-07T00:19:40.409061Z", - "iopub.status.idle": "2023-08-07T00:19:40.411699Z", - "shell.execute_reply": "2023-08-07T00:19:40.411382Z" + "iopub.execute_input": "2023-08-21T02:30:11.517105Z", + "iopub.status.busy": "2023-08-21T02:30:11.516982Z", + "iopub.status.idle": "2023-08-21T02:30:11.519375Z", + "shell.execute_reply": "2023-08-21T02:30:11.519076Z" }, "lines_to_next_cell": 0 }, @@ -1061,7 +1061,7 @@ }, { "cell_type": "markdown", - "id": "d2dcf543", + "id": "ef559fde", "metadata": {}, "source": [ "The proportion of variance explained by each principal \n", @@ -1071,13 +1071,13 @@ { "cell_type": "code", "execution_count": 17, - "id": "68e47d3a", + "id": "e711d1be", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:40.413200Z", - "iopub.status.busy": "2023-08-07T00:19:40.413101Z", - "iopub.status.idle": "2023-08-07T00:19:40.415302Z", - "shell.execute_reply": "2023-08-07T00:19:40.415021Z" + "iopub.execute_input": "2023-08-21T02:30:11.520951Z", + "iopub.status.busy": "2023-08-21T02:30:11.520847Z", + "iopub.status.idle": "2023-08-21T02:30:11.523283Z", + "shell.execute_reply": "2023-08-21T02:30:11.523005Z" }, "lines_to_next_cell": 0 }, @@ -1099,7 +1099,7 @@ }, { "cell_type": "markdown", - "id": "831b19b7", + "id": "567f5027", "metadata": {}, "source": [ "We see that the first principal component explains 62.0% of the\n", @@ -1112,13 +1112,13 @@ { "cell_type": "code", "execution_count": 18, - "id": "e87fe198", + "id": "e122eb41", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:40.416840Z", - "iopub.status.busy": "2023-08-07T00:19:40.416734Z", - "iopub.status.idle": "2023-08-07T00:19:40.552815Z", - "shell.execute_reply": "2023-08-07T00:19:40.552349Z" + "iopub.execute_input": "2023-08-21T02:30:11.524835Z", + "iopub.status.busy": "2023-08-21T02:30:11.524733Z", + "iopub.status.idle": "2023-08-21T02:30:11.658787Z", + "shell.execute_reply": "2023-08-21T02:30:11.658413Z" }, "lines_to_next_cell": 0 }, @@ -1139,7 +1139,7 @@ }, { "cell_type": "markdown", - "id": "2ed96395", + "id": "5de6bff0", "metadata": {}, "source": [ "Notice the use of `%%capture`, which suppresses the displaying of the partially completed figure." @@ -1148,13 +1148,13 @@ { "cell_type": "code", "execution_count": 19, - "id": "409fb0c6", + "id": "bef47d90", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:40.554888Z", - "iopub.status.busy": "2023-08-07T00:19:40.554718Z", - "iopub.status.idle": "2023-08-07T00:19:40.664487Z", - "shell.execute_reply": "2023-08-07T00:19:40.664052Z" + "iopub.execute_input": "2023-08-21T02:30:11.661199Z", + "iopub.status.busy": "2023-08-21T02:30:11.661017Z", + "iopub.status.idle": "2023-08-21T02:30:11.782427Z", + "shell.execute_reply": "2023-08-21T02:30:11.781635Z" }, "lines_to_next_cell": 0 }, @@ -1185,7 +1185,7 @@ }, { "cell_type": "markdown", - "id": "496fb6be", + "id": "5815db80", "metadata": {}, "source": [ "The result is similar to that shown in Figure 12.3. Note\n", @@ -1196,13 +1196,13 @@ { "cell_type": "code", "execution_count": 20, - "id": "e563e41b", + "id": "f3300d9e", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:40.666198Z", - "iopub.status.busy": "2023-08-07T00:19:40.666084Z", - "iopub.status.idle": "2023-08-07T00:19:40.668537Z", - "shell.execute_reply": "2023-08-07T00:19:40.668242Z" + "iopub.execute_input": "2023-08-21T02:30:11.785513Z", + "iopub.status.busy": "2023-08-21T02:30:11.785329Z", + "iopub.status.idle": "2023-08-21T02:30:11.789028Z", + "shell.execute_reply": "2023-08-21T02:30:11.788419Z" }, "lines_to_next_cell": 0 }, @@ -1225,7 +1225,7 @@ }, { "cell_type": "markdown", - "id": "6794b1a3", + "id": "954cd9f7", "metadata": {}, "source": [ "## Matrix Completion\n", @@ -1245,13 +1245,13 @@ { "cell_type": "code", "execution_count": 21, - "id": "f83ad0bc", + "id": "20e6009f", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:40.670153Z", - "iopub.status.busy": "2023-08-07T00:19:40.670010Z", - "iopub.status.idle": "2023-08-07T00:19:40.672783Z", - "shell.execute_reply": "2023-08-07T00:19:40.672475Z" + "iopub.execute_input": "2023-08-21T02:30:11.791569Z", + "iopub.status.busy": "2023-08-21T02:30:11.791444Z", + "iopub.status.idle": "2023-08-21T02:30:11.795478Z", + "shell.execute_reply": "2023-08-21T02:30:11.794972Z" }, "lines_to_next_cell": 0 }, @@ -1275,7 +1275,7 @@ }, { "cell_type": "markdown", - "id": "f9c71e57", + "id": "53e9a370", "metadata": {}, "source": [ "The `np.linalg.svd()` function returns three components, `U`, `D` and `V`. The matrix `V` is equivalent to the\n", @@ -1286,13 +1286,13 @@ { "cell_type": "code", "execution_count": 22, - "id": "cb9bdc46", + "id": "7d9937cf", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:40.674352Z", - "iopub.status.busy": "2023-08-07T00:19:40.674236Z", - "iopub.status.idle": "2023-08-07T00:19:40.676540Z", - "shell.execute_reply": "2023-08-07T00:19:40.676276Z" + "iopub.execute_input": "2023-08-21T02:30:11.797640Z", + "iopub.status.busy": "2023-08-21T02:30:11.797509Z", + "iopub.status.idle": "2023-08-21T02:30:11.800846Z", + "shell.execute_reply": "2023-08-21T02:30:11.800294Z" } }, "outputs": [ @@ -1317,13 +1317,13 @@ { "cell_type": "code", "execution_count": 23, - "id": "f23c101e", + "id": "e58f83a3", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:40.677938Z", - "iopub.status.busy": "2023-08-07T00:19:40.677820Z", - "iopub.status.idle": "2023-08-07T00:19:40.680147Z", - "shell.execute_reply": "2023-08-07T00:19:40.679807Z" + "iopub.execute_input": "2023-08-21T02:30:11.808398Z", + "iopub.status.busy": "2023-08-21T02:30:11.808136Z", + "iopub.status.idle": "2023-08-21T02:30:11.811679Z", + "shell.execute_reply": "2023-08-21T02:30:11.811074Z" }, "lines_to_next_cell": 0 }, @@ -1348,7 +1348,7 @@ }, { "cell_type": "markdown", - "id": "a5d9e0ae", + "id": "22f7625f", "metadata": {}, "source": [ "The matrix `U` corresponds to a *standardized* version of the PCA score matrix (each column standardized to have sum-of-squares one). If we multiply each column of `U` by the corresponding element of `D`, we recover the PCA scores exactly (up to a meaningless sign flip)." @@ -1357,13 +1357,13 @@ { "cell_type": "code", "execution_count": 24, - "id": "4cc49622", + "id": "5c4f9b34", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:40.681817Z", - "iopub.status.busy": "2023-08-07T00:19:40.681713Z", - "iopub.status.idle": "2023-08-07T00:19:40.684186Z", - "shell.execute_reply": "2023-08-07T00:19:40.683881Z" + "iopub.execute_input": "2023-08-21T02:30:11.813485Z", + "iopub.status.busy": "2023-08-21T02:30:11.813382Z", + "iopub.status.idle": "2023-08-21T02:30:11.816392Z", + "shell.execute_reply": "2023-08-21T02:30:11.815967Z" } }, "outputs": [ @@ -1387,13 +1387,13 @@ { "cell_type": "code", "execution_count": 25, - "id": "c96c9fe1", + "id": "0ce84f1b", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:40.685613Z", - "iopub.status.busy": "2023-08-07T00:19:40.685513Z", - "iopub.status.idle": "2023-08-07T00:19:40.687604Z", - "shell.execute_reply": "2023-08-07T00:19:40.687323Z" + "iopub.execute_input": "2023-08-21T02:30:11.818183Z", + "iopub.status.busy": "2023-08-21T02:30:11.818037Z", + "iopub.status.idle": "2023-08-21T02:30:11.820586Z", + "shell.execute_reply": "2023-08-21T02:30:11.820295Z" }, "lines_to_next_cell": 0 }, @@ -1417,7 +1417,7 @@ }, { "cell_type": "markdown", - "id": "6b7002cb", + "id": "ccc66247", "metadata": {}, "source": [ "While it would be possible to carry out this lab using the `PCA()` estimator,\n", @@ -1432,13 +1432,13 @@ { "cell_type": "code", "execution_count": 26, - "id": "574409d6", + "id": "cd8b4bed", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:40.689075Z", - "iopub.status.busy": "2023-08-07T00:19:40.688979Z", - "iopub.status.idle": "2023-08-07T00:19:40.691538Z", - "shell.execute_reply": "2023-08-07T00:19:40.691269Z" + "iopub.execute_input": "2023-08-21T02:30:11.822223Z", + "iopub.status.busy": "2023-08-21T02:30:11.822124Z", + "iopub.status.idle": "2023-08-21T02:30:11.824710Z", + "shell.execute_reply": "2023-08-21T02:30:11.824451Z" } }, "outputs": [], @@ -1457,7 +1457,7 @@ }, { "cell_type": "markdown", - "id": "fd4a5fdf", + "id": "ff75324d", "metadata": {}, "source": [ "Here the array `r_idx`\n", @@ -1472,13 +1472,13 @@ { "cell_type": "code", "execution_count": 27, - "id": "89f190ae", + "id": "7f3bc8f9", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:40.693076Z", - "iopub.status.busy": "2023-08-07T00:19:40.692974Z", - "iopub.status.idle": "2023-08-07T00:19:40.694962Z", - "shell.execute_reply": "2023-08-07T00:19:40.694708Z" + "iopub.execute_input": "2023-08-21T02:30:11.826294Z", + "iopub.status.busy": "2023-08-21T02:30:11.826188Z", + "iopub.status.idle": "2023-08-21T02:30:11.828326Z", + "shell.execute_reply": "2023-08-21T02:30:11.827946Z" }, "lines_to_next_cell": 0 }, @@ -1492,7 +1492,7 @@ }, { "cell_type": "markdown", - "id": "a04129d0", + "id": "ff7e6ca1", "metadata": {}, "source": [ "To conduct Step 1 of the algorithm, we initialize `Xhat` --- this is $\\tilde{\\bf X}$ in Algorithm 12.1 --- by replacing\n", @@ -1505,13 +1505,13 @@ { "cell_type": "code", "execution_count": 28, - "id": "322f339c", + "id": "771a46a7", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:40.696660Z", - "iopub.status.busy": "2023-08-07T00:19:40.696543Z", - "iopub.status.idle": "2023-08-07T00:19:40.698585Z", - "shell.execute_reply": "2023-08-07T00:19:40.698324Z" + "iopub.execute_input": "2023-08-21T02:30:11.830112Z", + "iopub.status.busy": "2023-08-21T02:30:11.829990Z", + "iopub.status.idle": "2023-08-21T02:30:11.832019Z", + "shell.execute_reply": "2023-08-21T02:30:11.831653Z" } }, "outputs": [], @@ -1523,7 +1523,7 @@ }, { "cell_type": "markdown", - "id": "357041e8", + "id": "30a6e972", "metadata": {}, "source": [ "Before we begin Step 2, we set ourselves up to measure the progress of our\n", @@ -1533,13 +1533,13 @@ { "cell_type": "code", "execution_count": 29, - "id": "7e106d1a", + "id": "1416f048", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:40.700112Z", - "iopub.status.busy": "2023-08-07T00:19:40.700007Z", - "iopub.status.idle": "2023-08-07T00:19:40.702027Z", - "shell.execute_reply": "2023-08-07T00:19:40.701767Z" + "iopub.execute_input": "2023-08-21T02:30:11.834018Z", + "iopub.status.busy": "2023-08-21T02:30:11.833888Z", + "iopub.status.idle": "2023-08-21T02:30:11.836065Z", + "shell.execute_reply": "2023-08-21T02:30:11.835740Z" }, "lines_to_next_cell": 0 }, @@ -1555,7 +1555,7 @@ }, { "cell_type": "markdown", - "id": "105ac73f", + "id": "40dbfa78", "metadata": {}, "source": [ "Here `ismiss` is a logical matrix with the same dimensions as `Xna`;\n", @@ -1573,13 +1573,13 @@ { "cell_type": "code", "execution_count": 30, - "id": "7cb05ce4", + "id": "9eff34aa", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:40.703581Z", - "iopub.status.busy": "2023-08-07T00:19:40.703476Z", - "iopub.status.idle": "2023-08-07T00:19:40.706441Z", - "shell.execute_reply": "2023-08-07T00:19:40.706179Z" + "iopub.execute_input": "2023-08-21T02:30:11.838230Z", + "iopub.status.busy": "2023-08-21T02:30:11.838081Z", + "iopub.status.idle": "2023-08-21T02:30:11.841552Z", + "shell.execute_reply": "2023-08-21T02:30:11.841240Z" } }, "outputs": [ @@ -1616,7 +1616,7 @@ }, { "cell_type": "markdown", - "id": "5cd8edf2", + "id": "b005a639", "metadata": {}, "source": [ "We see that after eight iterations, the relative error has fallen below `thresh = 1e-7`, and so the algorithm terminates. When this happens, the mean squared error of the non-missing elements equals 0.381.\n", @@ -1628,13 +1628,13 @@ { "cell_type": "code", "execution_count": 31, - "id": "6f245188", + "id": "7815b948", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:40.708006Z", - "iopub.status.busy": "2023-08-07T00:19:40.707901Z", - "iopub.status.idle": "2023-08-07T00:19:40.710450Z", - "shell.execute_reply": "2023-08-07T00:19:40.710194Z" + "iopub.execute_input": "2023-08-21T02:30:11.843245Z", + "iopub.status.busy": "2023-08-21T02:30:11.843118Z", + "iopub.status.idle": "2023-08-21T02:30:11.846592Z", + "shell.execute_reply": "2023-08-21T02:30:11.846200Z" }, "lines_to_next_cell": 2 }, @@ -1656,7 +1656,7 @@ }, { "cell_type": "markdown", - "id": "f22444ff", + "id": "9091b3ad", "metadata": {}, "source": [ "In this lab, we implemented Algorithm 12.1 ourselves for didactic purposes. However, a reader who wishes to apply matrix completion to their data might look to more specialized `Python` implementations." @@ -1664,7 +1664,7 @@ }, { "cell_type": "markdown", - "id": "7da441a1", + "id": "e528e2a6", "metadata": {}, "source": [ "## Clustering" @@ -1672,7 +1672,7 @@ }, { "cell_type": "markdown", - "id": "ef4903d6", + "id": "8ba3f642", "metadata": {}, "source": [ "### $K$-Means Clustering\n", @@ -1686,13 +1686,13 @@ { "cell_type": "code", "execution_count": 32, - "id": "345fb41e", + "id": "f63cf4b8", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:40.712093Z", - "iopub.status.busy": "2023-08-07T00:19:40.711979Z", - "iopub.status.idle": "2023-08-07T00:19:40.713935Z", - "shell.execute_reply": "2023-08-07T00:19:40.713674Z" + "iopub.execute_input": "2023-08-21T02:30:11.848430Z", + "iopub.status.busy": "2023-08-21T02:30:11.848311Z", + "iopub.status.idle": "2023-08-21T02:30:11.850755Z", + "shell.execute_reply": "2023-08-21T02:30:11.850430Z" }, "lines_to_next_cell": 0 }, @@ -1706,7 +1706,7 @@ }, { "cell_type": "markdown", - "id": "6ed3587f", + "id": "4bb54e06", "metadata": {}, "source": [ "We now perform $K$-means clustering with $K=2$." @@ -1715,13 +1715,13 @@ { "cell_type": "code", "execution_count": 33, - "id": "3a8c21a2", + "id": "f973c2d4", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:40.715319Z", - "iopub.status.busy": "2023-08-07T00:19:40.715219Z", - "iopub.status.idle": "2023-08-07T00:19:41.035873Z", - "shell.execute_reply": "2023-08-07T00:19:41.035293Z" + "iopub.execute_input": "2023-08-21T02:30:11.852603Z", + "iopub.status.busy": "2023-08-21T02:30:11.852463Z", + "iopub.status.idle": "2023-08-21T02:30:12.419856Z", + "shell.execute_reply": "2023-08-21T02:30:12.416814Z" }, "lines_to_next_cell": 0 }, @@ -1734,7 +1734,7 @@ }, { "cell_type": "markdown", - "id": "df4fb0eb", + "id": "eeca2ae3", "metadata": {}, "source": [ "We specify `random_state` to make the results reproducible. The cluster assignments of the 50 observations are contained in `kmeans.labels_`." @@ -1743,13 +1743,13 @@ { "cell_type": "code", "execution_count": 34, - "id": "e3e35b5d", + "id": "e980954b", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:41.038578Z", - "iopub.status.busy": "2023-08-07T00:19:41.038393Z", - "iopub.status.idle": "2023-08-07T00:19:41.041820Z", - "shell.execute_reply": "2023-08-07T00:19:41.041365Z" + "iopub.execute_input": "2023-08-21T02:30:12.436151Z", + "iopub.status.busy": "2023-08-21T02:30:12.434738Z", + "iopub.status.idle": "2023-08-21T02:30:12.484691Z", + "shell.execute_reply": "2023-08-21T02:30:12.459324Z" }, "lines_to_next_cell": 0 }, @@ -1773,7 +1773,7 @@ }, { "cell_type": "markdown", - "id": "6632fa4c", + "id": "d796ee94", "metadata": {}, "source": [ "The $K$-means clustering perfectly separated the observations into two\n", @@ -1785,13 +1785,13 @@ { "cell_type": "code", "execution_count": 35, - "id": "d928650a", + "id": "a94d452c", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:41.043940Z", - "iopub.status.busy": "2023-08-07T00:19:41.043807Z", - "iopub.status.idle": "2023-08-07T00:19:41.152788Z", - "shell.execute_reply": "2023-08-07T00:19:41.152394Z" + "iopub.execute_input": "2023-08-21T02:30:12.510741Z", + "iopub.status.busy": "2023-08-21T02:30:12.510582Z", + "iopub.status.idle": "2023-08-21T02:30:12.636062Z", + "shell.execute_reply": "2023-08-21T02:30:12.635730Z" } }, "outputs": [ @@ -1814,7 +1814,7 @@ }, { "cell_type": "markdown", - "id": "1f6a6d01", + "id": "6463d546", "metadata": {}, "source": [ "Here the observations can be easily plotted because they are\n", @@ -1832,13 +1832,13 @@ { "cell_type": "code", "execution_count": 36, - "id": "92e5175c", + "id": "94ff654c", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:41.154810Z", - "iopub.status.busy": "2023-08-07T00:19:41.154695Z", - "iopub.status.idle": "2023-08-07T00:19:41.278338Z", - "shell.execute_reply": "2023-08-07T00:19:41.277867Z" + "iopub.execute_input": "2023-08-21T02:30:12.638065Z", + "iopub.status.busy": "2023-08-21T02:30:12.637921Z", + "iopub.status.idle": "2023-08-21T02:30:12.806481Z", + "shell.execute_reply": "2023-08-21T02:30:12.805717Z" }, "lines_to_next_cell": 0 }, @@ -1865,7 +1865,7 @@ }, { "cell_type": "markdown", - "id": "82317a30", + "id": "52dceb84", "metadata": {}, "source": [ "When $K=3$, $K$-means clustering splits up the two clusters.\n", @@ -1881,13 +1881,13 @@ { "cell_type": "code", "execution_count": 37, - "id": "4911ecc7", + "id": "b3561317", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:41.280637Z", - "iopub.status.busy": "2023-08-07T00:19:41.280494Z", - "iopub.status.idle": "2023-08-07T00:19:41.296485Z", - "shell.execute_reply": "2023-08-07T00:19:41.296101Z" + "iopub.execute_input": "2023-08-21T02:30:12.808756Z", + "iopub.status.busy": "2023-08-21T02:30:12.808647Z", + "iopub.status.idle": "2023-08-21T02:30:12.868305Z", + "shell.execute_reply": "2023-08-21T02:30:12.867287Z" }, "lines_to_next_cell": 0 }, @@ -1915,7 +1915,7 @@ }, { "cell_type": "markdown", - "id": "96e6df1f", + "id": "e32af47d", "metadata": {}, "source": [ "Note that `kmeans.inertia_` is the total within-cluster sum\n", @@ -1935,7 +1935,7 @@ }, { "cell_type": "markdown", - "id": "904ea858", + "id": "a34ddf89", "metadata": {}, "source": [ "### Hierarchical Clustering\n", @@ -1954,13 +1954,13 @@ { "cell_type": "code", "execution_count": 38, - "id": "1b42a700", + "id": "be9e4f9c", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:41.298559Z", - "iopub.status.busy": "2023-08-07T00:19:41.298421Z", - "iopub.status.idle": "2023-08-07T00:19:41.304986Z", - "shell.execute_reply": "2023-08-07T00:19:41.304678Z" + "iopub.execute_input": "2023-08-21T02:30:12.871403Z", + "iopub.status.busy": "2023-08-21T02:30:12.871255Z", + "iopub.status.idle": "2023-08-21T02:30:12.877754Z", + "shell.execute_reply": "2023-08-21T02:30:12.877453Z" } }, "outputs": [ @@ -1991,7 +1991,7 @@ }, { "cell_type": "markdown", - "id": "22199f4d", + "id": "efa0aecd", "metadata": {}, "source": [ "This computes the entire dendrogram.\n", @@ -2001,13 +2001,13 @@ { "cell_type": "code", "execution_count": 39, - "id": "50ef7eea", + "id": "f80d8563", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:41.306962Z", - "iopub.status.busy": "2023-08-07T00:19:41.306831Z", - "iopub.status.idle": "2023-08-07T00:19:41.310423Z", - "shell.execute_reply": "2023-08-07T00:19:41.310047Z" + "iopub.execute_input": "2023-08-21T02:30:12.879743Z", + "iopub.status.busy": "2023-08-21T02:30:12.879627Z", + "iopub.status.idle": "2023-08-21T02:30:12.883455Z", + "shell.execute_reply": "2023-08-21T02:30:12.883063Z" } }, "outputs": [], @@ -2024,7 +2024,7 @@ }, { "cell_type": "markdown", - "id": "7e8db256", + "id": "d51b36f5", "metadata": {}, "source": [ "To use a precomputed distance matrix, we provide an additional\n", @@ -2034,13 +2034,13 @@ { "cell_type": "code", "execution_count": 40, - "id": "bf7a2408", + "id": "83e7ccf8", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:41.312244Z", - "iopub.status.busy": "2023-08-07T00:19:41.312117Z", - "iopub.status.idle": "2023-08-07T00:19:41.317488Z", - "shell.execute_reply": "2023-08-07T00:19:41.317168Z" + "iopub.execute_input": "2023-08-21T02:30:12.885091Z", + "iopub.status.busy": "2023-08-21T02:30:12.884985Z", + "iopub.status.idle": "2023-08-21T02:30:12.890499Z", + "shell.execute_reply": "2023-08-21T02:30:12.890138Z" } }, "outputs": [ @@ -2075,7 +2075,7 @@ }, { "cell_type": "markdown", - "id": "8cd7fb7c", + "id": "d2bfc639", "metadata": {}, "source": [ "We use\n", @@ -2094,13 +2094,13 @@ { "cell_type": "code", "execution_count": 41, - "id": "a118c0ab", + "id": "56ee8cbf", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:41.319281Z", - "iopub.status.busy": "2023-08-07T00:19:41.319164Z", - "iopub.status.idle": "2023-08-07T00:19:41.547955Z", - "shell.execute_reply": "2023-08-07T00:19:41.547603Z" + "iopub.execute_input": "2023-08-21T02:30:12.892483Z", + "iopub.status.busy": "2023-08-21T02:30:12.892271Z", + "iopub.status.idle": "2023-08-21T02:30:13.132407Z", + "shell.execute_reply": "2023-08-21T02:30:13.132103Z" } }, "outputs": [ @@ -2127,7 +2127,7 @@ }, { "cell_type": "markdown", - "id": "a325a001", + "id": "03438b18", "metadata": {}, "source": [ "We may want to color branches of the tree above\n", @@ -2139,13 +2139,13 @@ { "cell_type": "code", "execution_count": 42, - "id": "b1ff41c0", + "id": "10f4fc97", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:41.549650Z", - "iopub.status.busy": "2023-08-07T00:19:41.549522Z", - "iopub.status.idle": "2023-08-07T00:19:41.777366Z", - "shell.execute_reply": "2023-08-07T00:19:41.776967Z" + "iopub.execute_input": "2023-08-21T02:30:13.134084Z", + "iopub.status.busy": "2023-08-21T02:30:13.133962Z", + "iopub.status.idle": "2023-08-21T02:30:13.363909Z", + "shell.execute_reply": "2023-08-21T02:30:13.363594Z" } }, "outputs": [ @@ -2170,7 +2170,7 @@ }, { "cell_type": "markdown", - "id": "e774708c", + "id": "9b64a78f", "metadata": {}, "source": [ "To determine the cluster labels for each observation associated with a\n", @@ -2181,13 +2181,13 @@ { "cell_type": "code", "execution_count": 43, - "id": "c2752a96", + "id": "3aed342a", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:41.779450Z", - "iopub.status.busy": "2023-08-07T00:19:41.779300Z", - "iopub.status.idle": "2023-08-07T00:19:41.783422Z", - "shell.execute_reply": "2023-08-07T00:19:41.783033Z" + "iopub.execute_input": "2023-08-21T02:30:13.365591Z", + "iopub.status.busy": "2023-08-21T02:30:13.365487Z", + "iopub.status.idle": "2023-08-21T02:30:13.368978Z", + "shell.execute_reply": "2023-08-21T02:30:13.368698Z" } }, "outputs": [ @@ -2210,7 +2210,7 @@ }, { "cell_type": "markdown", - "id": "d501d220", + "id": "0b986d91", "metadata": {}, "source": [ "This can also be achieved by providing an argument `n_clusters`\n", @@ -2223,13 +2223,13 @@ { "cell_type": "code", "execution_count": 44, - "id": "1407f7a4", + "id": "49c6db0c", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:41.785112Z", - "iopub.status.busy": "2023-08-07T00:19:41.785008Z", - "iopub.status.idle": "2023-08-07T00:19:41.788913Z", - "shell.execute_reply": "2023-08-07T00:19:41.788641Z" + "iopub.execute_input": "2023-08-21T02:30:13.370508Z", + "iopub.status.busy": "2023-08-21T02:30:13.370414Z", + "iopub.status.idle": "2023-08-21T02:30:13.373767Z", + "shell.execute_reply": "2023-08-21T02:30:13.373373Z" } }, "outputs": [ @@ -2299,7 +2299,7 @@ }, { "cell_type": "markdown", - "id": "469bbad6", + "id": "8ff90643", "metadata": {}, "source": [ "To scale the variables before performing hierarchical clustering of\n", @@ -2309,13 +2309,13 @@ { "cell_type": "code", "execution_count": 45, - "id": "2d74f224", + "id": "0ef4b7ec", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:41.790458Z", - "iopub.status.busy": "2023-08-07T00:19:41.790357Z", - "iopub.status.idle": "2023-08-07T00:19:42.031301Z", - "shell.execute_reply": "2023-08-07T00:19:42.030904Z" + "iopub.execute_input": "2023-08-21T02:30:13.375598Z", + "iopub.status.busy": "2023-08-21T02:30:13.375476Z", + "iopub.status.idle": "2023-08-21T02:30:13.613632Z", + "shell.execute_reply": "2023-08-21T02:30:13.613228Z" } }, "outputs": [ @@ -2344,7 +2344,7 @@ }, { "cell_type": "markdown", - "id": "3caaa1a5", + "id": "671f8aaf", "metadata": {}, "source": [ "Correlation-based distances between observations can be used for\n", @@ -2364,13 +2364,13 @@ { "cell_type": "code", "execution_count": 46, - "id": "b7f7da12", + "id": "51761ef3", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:42.033202Z", - "iopub.status.busy": "2023-08-07T00:19:42.033063Z", - "iopub.status.idle": "2023-08-07T00:19:42.217388Z", - "shell.execute_reply": "2023-08-07T00:19:42.217021Z" + "iopub.execute_input": "2023-08-21T02:30:13.616266Z", + "iopub.status.busy": "2023-08-21T02:30:13.616114Z", + "iopub.status.idle": "2023-08-21T02:30:13.807244Z", + "shell.execute_reply": "2023-08-21T02:30:13.806904Z" }, "lines_to_next_cell": 2 }, @@ -2402,7 +2402,7 @@ }, { "cell_type": "markdown", - "id": "5b00804e", + "id": "f2f77cb2", "metadata": {}, "source": [ "## NCI60 Data Example\n", @@ -2416,13 +2416,13 @@ { "cell_type": "code", "execution_count": 47, - "id": "b94424fc", + "id": "3dbe7baf", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:42.219256Z", - "iopub.status.busy": "2023-08-07T00:19:42.219115Z", - "iopub.status.idle": "2023-08-07T00:19:42.227039Z", - "shell.execute_reply": "2023-08-07T00:19:42.226704Z" + "iopub.execute_input": "2023-08-21T02:30:13.808881Z", + "iopub.status.busy": "2023-08-21T02:30:13.808757Z", + "iopub.status.idle": "2023-08-21T02:30:13.815572Z", + "shell.execute_reply": "2023-08-21T02:30:13.815234Z" } }, "outputs": [], @@ -2434,7 +2434,7 @@ }, { "cell_type": "markdown", - "id": "7313fea6", + "id": "6f03fcd9", "metadata": {}, "source": [ "Each cell line is labeled with a cancer type. We do not make use of\n", @@ -2449,13 +2449,13 @@ { "cell_type": "code", "execution_count": 48, - "id": "cea54566", + "id": "8f4e9db0", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:42.228793Z", - "iopub.status.busy": "2023-08-07T00:19:42.228704Z", - "iopub.status.idle": "2023-08-07T00:19:42.231034Z", - "shell.execute_reply": "2023-08-07T00:19:42.230727Z" + "iopub.execute_input": "2023-08-21T02:30:13.817455Z", + "iopub.status.busy": "2023-08-21T02:30:13.817327Z", + "iopub.status.idle": "2023-08-21T02:30:13.819934Z", + "shell.execute_reply": "2023-08-21T02:30:13.819588Z" }, "lines_to_next_cell": 2 }, @@ -2477,7 +2477,7 @@ }, { "cell_type": "markdown", - "id": "6ebf27f1", + "id": "7fad9a75", "metadata": {}, "source": [ "We begin by examining the cancer types for the cell lines.\n" @@ -2486,13 +2486,13 @@ { "cell_type": "code", "execution_count": 49, - "id": "4dac41bb", + "id": "6373db4d", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:42.232626Z", - "iopub.status.busy": "2023-08-07T00:19:42.232514Z", - "iopub.status.idle": "2023-08-07T00:19:42.236205Z", - "shell.execute_reply": "2023-08-07T00:19:42.235893Z" + "iopub.execute_input": "2023-08-21T02:30:13.821622Z", + "iopub.status.busy": "2023-08-21T02:30:13.821498Z", + "iopub.status.idle": "2023-08-21T02:30:13.825550Z", + "shell.execute_reply": "2023-08-21T02:30:13.825258Z" }, "lines_to_next_cell": 2 }, @@ -2529,7 +2529,7 @@ }, { "cell_type": "markdown", - "id": "8f16f96a", + "id": "c75ae01f", "metadata": {}, "source": [ "### PCA on the NCI60 Data\n", @@ -2542,13 +2542,13 @@ { "cell_type": "code", "execution_count": 50, - "id": "d8ebadd6", + "id": "9f185f83", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:42.237776Z", - "iopub.status.busy": "2023-08-07T00:19:42.237686Z", - "iopub.status.idle": "2023-08-07T00:19:42.764811Z", - "shell.execute_reply": "2023-08-07T00:19:42.760096Z" + "iopub.execute_input": "2023-08-21T02:30:13.827046Z", + "iopub.status.busy": "2023-08-21T02:30:13.826963Z", + "iopub.status.idle": "2023-08-21T02:30:15.128422Z", + "shell.execute_reply": "2023-08-21T02:30:15.127267Z" } }, "outputs": [], @@ -2561,7 +2561,7 @@ }, { "cell_type": "markdown", - "id": "8a8c9932", + "id": "e859fa7c", "metadata": {}, "source": [ "We now plot the first few principal component score vectors, in order\n", @@ -2574,13 +2574,13 @@ { "cell_type": "code", "execution_count": 51, - "id": "63b5efe3", + "id": "b044b197", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:42.771948Z", - "iopub.status.busy": "2023-08-07T00:19:42.771506Z", - "iopub.status.idle": "2023-08-07T00:19:42.971788Z", - "shell.execute_reply": "2023-08-07T00:19:42.971058Z" + "iopub.execute_input": "2023-08-21T02:30:15.132319Z", + "iopub.status.busy": "2023-08-21T02:30:15.130836Z", + "iopub.status.idle": "2023-08-21T02:30:15.450531Z", + "shell.execute_reply": "2023-08-21T02:30:15.450148Z" }, "lines_to_next_cell": 0 }, @@ -2619,7 +2619,7 @@ }, { "cell_type": "markdown", - "id": "87b33a9c", + "id": "01debda9", "metadata": {}, "source": [ "On the whole, cell lines corresponding to a single cancer type do tend to\n", @@ -2633,7 +2633,7 @@ }, { "cell_type": "markdown", - "id": "890fdb54", + "id": "8695f122", "metadata": {}, "source": [ "We can also plot the percent variance\n", @@ -2644,13 +2644,13 @@ { "cell_type": "code", "execution_count": 52, - "id": "e20c3cc1", + "id": "b2450bb2", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:42.976556Z", - "iopub.status.busy": "2023-08-07T00:19:42.975788Z", - "iopub.status.idle": "2023-08-07T00:19:43.134142Z", - "shell.execute_reply": "2023-08-07T00:19:43.133869Z" + "iopub.execute_input": "2023-08-21T02:30:15.453108Z", + "iopub.status.busy": "2023-08-21T02:30:15.452934Z", + "iopub.status.idle": "2023-08-21T02:30:15.641832Z", + "shell.execute_reply": "2023-08-21T02:30:15.641441Z" }, "lines_to_next_cell": 0 }, @@ -2685,7 +2685,7 @@ }, { "cell_type": "markdown", - "id": "cb6eb4f8", + "id": "6c9d8235", "metadata": {}, "source": [ "We see that together, the first seven principal components explain\n", @@ -2702,7 +2702,7 @@ }, { "cell_type": "markdown", - "id": "8962791f", + "id": "a4de7a0d", "metadata": {}, "source": [ "### Clustering the Observations of the NCI60 Data\n", @@ -2717,13 +2717,13 @@ { "cell_type": "code", "execution_count": 53, - "id": "622de805", + "id": "f3f85512", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:43.135947Z", - "iopub.status.busy": "2023-08-07T00:19:43.135742Z", - "iopub.status.idle": "2023-08-07T00:19:43.138541Z", - "shell.execute_reply": "2023-08-07T00:19:43.138181Z" + "iopub.execute_input": "2023-08-21T02:30:15.645761Z", + "iopub.status.busy": "2023-08-21T02:30:15.645577Z", + "iopub.status.idle": "2023-08-21T02:30:15.648982Z", + "shell.execute_reply": "2023-08-21T02:30:15.648549Z" } }, "outputs": [], @@ -2746,7 +2746,7 @@ }, { "cell_type": "markdown", - "id": "9cf5f836", + "id": "3f24eed8", "metadata": {}, "source": [ "Let’s plot our results." @@ -2755,13 +2755,13 @@ { "cell_type": "code", "execution_count": 54, - "id": "54d40449", + "id": "5cbeeb19", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:43.140415Z", - "iopub.status.busy": "2023-08-07T00:19:43.140161Z", - "iopub.status.idle": "2023-08-07T00:19:44.449125Z", - "shell.execute_reply": "2023-08-07T00:19:44.448816Z" + "iopub.execute_input": "2023-08-21T02:30:15.651172Z", + "iopub.status.busy": "2023-08-21T02:30:15.651062Z", + "iopub.status.idle": "2023-08-21T02:30:17.138064Z", + "shell.execute_reply": "2023-08-21T02:30:17.137456Z" }, "lines_to_next_cell": 0 }, @@ -2786,7 +2786,7 @@ }, { "cell_type": "markdown", - "id": "1703afbb", + "id": "91af9aad", "metadata": {}, "source": [ "We see that the\n", @@ -2800,7 +2800,7 @@ "cluster together, although the clustering is not perfect. We will use\n", "complete linkage hierarchical clustering for the analysis that\n", "follows.\n", - "\n", + " \n", "We can cut the dendrogram at the height that will yield a particular\n", "number of clusters, say four:" ] @@ -2808,13 +2808,13 @@ { "cell_type": "code", "execution_count": 55, - "id": "dc80afc8", + "id": "1eb3c92e", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:44.450952Z", - "iopub.status.busy": "2023-08-07T00:19:44.450828Z", - "iopub.status.idle": "2023-08-07T00:19:44.462134Z", - "shell.execute_reply": "2023-08-07T00:19:44.461872Z" + "iopub.execute_input": "2023-08-21T02:30:17.141105Z", + "iopub.status.busy": "2023-08-21T02:30:17.140950Z", + "iopub.status.idle": "2023-08-21T02:30:17.153308Z", + "shell.execute_reply": "2023-08-21T02:30:17.152985Z" }, "lines_to_next_cell": 2 }, @@ -2989,7 +2989,7 @@ }, { "cell_type": "markdown", - "id": "d8ecae69", + "id": "194d0034", "metadata": {}, "source": [ "There are some clear patterns. All the leukemia cell lines fall in\n", @@ -3002,13 +3002,13 @@ { "cell_type": "code", "execution_count": 56, - "id": "40ff59f9", + "id": "e3c2841c", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:44.463951Z", - "iopub.status.busy": "2023-08-07T00:19:44.463834Z", - "iopub.status.idle": "2023-08-07T00:19:44.884205Z", - "shell.execute_reply": "2023-08-07T00:19:44.883879Z" + "iopub.execute_input": "2023-08-21T02:30:17.155262Z", + "iopub.status.busy": "2023-08-21T02:30:17.155100Z", + "iopub.status.idle": "2023-08-21T02:30:17.595981Z", + "shell.execute_reply": "2023-08-21T02:30:17.595541Z" } }, "outputs": [ @@ -3031,7 +3031,7 @@ }, { "cell_type": "markdown", - "id": "1c03368c", + "id": "f0154576", "metadata": {}, "source": [ "The `axhline()` function draws a horizontal line line on top of any\n", @@ -3051,13 +3051,13 @@ { "cell_type": "code", "execution_count": 57, - "id": "1587e83b", + "id": "94dfe5a0", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:44.886050Z", - "iopub.status.busy": "2023-08-07T00:19:44.885932Z", - "iopub.status.idle": "2023-08-07T00:19:46.259058Z", - "shell.execute_reply": "2023-08-07T00:19:46.257441Z" + "iopub.execute_input": "2023-08-21T02:30:17.598183Z", + "iopub.status.busy": "2023-08-21T02:30:17.598049Z", + "iopub.status.idle": "2023-08-21T02:30:46.877046Z", + "shell.execute_reply": "2023-08-21T02:30:46.874804Z" } }, "outputs": [ @@ -3152,7 +3152,7 @@ }, { "cell_type": "markdown", - "id": "b49c4a73", + "id": "54c529ff", "metadata": {}, "source": [ "We see that the four clusters obtained using hierarchical clustering\n", @@ -3176,13 +3176,13 @@ { "cell_type": "code", "execution_count": 58, - "id": "b09ceeab", + "id": "abd51940", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:46.265164Z", - "iopub.status.busy": "2023-08-07T00:19:46.264638Z", - "iopub.status.idle": "2023-08-07T00:19:46.685470Z", - "shell.execute_reply": "2023-08-07T00:19:46.685151Z" + "iopub.execute_input": "2023-08-21T02:30:46.888673Z", + "iopub.status.busy": "2023-08-21T02:30:46.888240Z", + "iopub.status.idle": "2023-08-21T02:30:47.344737Z", + "shell.execute_reply": "2023-08-21T02:30:47.344286Z" }, "lines_to_next_cell": 0 }, @@ -3379,7 +3379,7 @@ }, { "cell_type": "markdown", - "id": "5e1733b5", + "id": "2e388ef2", "metadata": {}, "source": [ "\n", diff --git a/Ch13-multiple-lab.Rmd b/Ch13-multiple-lab.Rmd index ef5db15..bee30c3 100644 --- a/Ch13-multiple-lab.Rmd +++ b/Ch13-multiple-lab.Rmd @@ -121,7 +121,7 @@ amounts to quite a weak signal, and it resulted in a high number of Type II errors. Let’s instead simulate data with a stronger signal, so that the ratio of the mean to the standard deviation for the false null hypotheses equals $1$. We make only 10 Type II errors. - + ```{python} true_mean = np.array([1]*50 + [0]*50) @@ -244,6 +244,7 @@ mult_test(fund_mini_pvals, method = "holm", alpha=0.05)[:2] As discussed previously, Manager One seems to perform particularly well, whereas Manager Two has poor performance. + ```{python} fund_mini.mean() @@ -575,5 +576,5 @@ ax.set_xlabel("Number of Rejections") ax.set_ylabel("False Discovery Rate"); ``` - + diff --git a/Ch13-multiple-lab.ipynb b/Ch13-multiple-lab.ipynb index 65c7fd0..bb9684d 100644 --- a/Ch13-multiple-lab.ipynb +++ b/Ch13-multiple-lab.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "75b2d75c", + "id": "687e9b80", "metadata": {}, "source": [ "\n", @@ -14,7 +14,7 @@ }, { "cell_type": "markdown", - "id": "34e410a6", + "id": "9f594a41", "metadata": {}, "source": [ "We include our usual imports seen in earlier labs." @@ -23,13 +23,13 @@ { "cell_type": "code", "execution_count": 1, - "id": "1f928b2d", + "id": "7cc4fbeb", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:48.489971Z", - "iopub.status.busy": "2023-08-07T00:19:48.489727Z", - "iopub.status.idle": "2023-08-07T00:19:50.216508Z", - "shell.execute_reply": "2023-08-07T00:19:50.215573Z" + "iopub.execute_input": "2023-08-21T02:29:16.417394Z", + "iopub.status.busy": "2023-08-21T02:29:16.417287Z", + "iopub.status.idle": "2023-08-21T02:29:17.613483Z", + "shell.execute_reply": "2023-08-21T02:29:17.613156Z" } }, "outputs": [], @@ -43,7 +43,7 @@ }, { "cell_type": "markdown", - "id": "12319e0a", + "id": "08ba7bed", "metadata": {}, "source": [ "We also collect the new imports\n", @@ -53,13 +53,13 @@ { "cell_type": "code", "execution_count": 2, - "id": "eb4b32aa", + "id": "595efc18", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:50.219989Z", - "iopub.status.busy": "2023-08-07T00:19:50.219429Z", - "iopub.status.idle": "2023-08-07T00:19:50.223239Z", - "shell.execute_reply": "2023-08-07T00:19:50.222392Z" + "iopub.execute_input": "2023-08-21T02:29:17.615551Z", + "iopub.status.busy": "2023-08-21T02:29:17.615375Z", + "iopub.status.idle": "2023-08-21T02:29:17.617379Z", + "shell.execute_reply": "2023-08-21T02:29:17.617087Z" }, "lines_to_next_cell": 2 }, @@ -78,7 +78,7 @@ }, { "cell_type": "markdown", - "id": "a2747e58", + "id": "69e5023e", "metadata": {}, "source": [ "## Review of Hypothesis Tests\n", @@ -92,13 +92,13 @@ { "cell_type": "code", "execution_count": 3, - "id": "e12ac0cd", + "id": "985d1d6e", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:50.225454Z", - "iopub.status.busy": "2023-08-07T00:19:50.225335Z", - "iopub.status.idle": "2023-08-07T00:19:50.228651Z", - "shell.execute_reply": "2023-08-07T00:19:50.228301Z" + "iopub.execute_input": "2023-08-21T02:29:17.618995Z", + "iopub.status.busy": "2023-08-21T02:29:17.618887Z", + "iopub.status.idle": "2023-08-21T02:29:17.620921Z", + "shell.execute_reply": "2023-08-21T02:29:17.620629Z" } }, "outputs": [], @@ -111,7 +111,7 @@ }, { "cell_type": "markdown", - "id": "70d37233", + "id": "9ae561c4", "metadata": {}, "source": [ "To begin, we use `ttest_1samp()` from the\n", @@ -122,13 +122,13 @@ { "cell_type": "code", "execution_count": 4, - "id": "04d0f49e", + "id": "753d612a", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:50.230854Z", - "iopub.status.busy": "2023-08-07T00:19:50.230727Z", - "iopub.status.idle": "2023-08-07T00:19:50.236745Z", - "shell.execute_reply": "2023-08-07T00:19:50.236388Z" + "iopub.execute_input": "2023-08-21T02:29:17.622537Z", + "iopub.status.busy": "2023-08-21T02:29:17.622429Z", + "iopub.status.idle": "2023-08-21T02:29:17.626063Z", + "shell.execute_reply": "2023-08-21T02:29:17.625801Z" } }, "outputs": [ @@ -150,7 +150,7 @@ }, { "cell_type": "markdown", - "id": "cf83426f", + "id": "5d9dc17f", "metadata": {}, "source": [ "The $p$-value comes out to 0.931, which is not low enough to\n", @@ -169,13 +169,13 @@ { "cell_type": "code", "execution_count": 5, - "id": "d1f0c695", + "id": "facd6569", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:50.238822Z", - "iopub.status.busy": "2023-08-07T00:19:50.238685Z", - "iopub.status.idle": "2023-08-07T00:19:50.263876Z", - "shell.execute_reply": "2023-08-07T00:19:50.263508Z" + "iopub.execute_input": "2023-08-21T02:29:17.627714Z", + "iopub.status.busy": "2023-08-21T02:29:17.627617Z", + "iopub.status.idle": "2023-08-21T02:29:17.651726Z", + "shell.execute_reply": "2023-08-21T02:29:17.651448Z" }, "lines_to_next_cell": 0 }, @@ -195,7 +195,7 @@ }, { "cell_type": "markdown", - "id": "3d8e0d96", + "id": "4094daa7", "metadata": {}, "source": [ "Since this is a simulated data set, we can create a $2 \\times 2$ table\n", @@ -205,13 +205,13 @@ { "cell_type": "code", "execution_count": 6, - "id": "7a9594a0", + "id": "e89ef3eb", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:50.266708Z", - "iopub.status.busy": "2023-08-07T00:19:50.266387Z", - "iopub.status.idle": "2023-08-07T00:19:50.280831Z", - "shell.execute_reply": "2023-08-07T00:19:50.280194Z" + "iopub.execute_input": "2023-08-21T02:29:17.653344Z", + "iopub.status.busy": "2023-08-21T02:29:17.653256Z", + "iopub.status.idle": "2023-08-21T02:29:17.662644Z", + "shell.execute_reply": "2023-08-21T02:29:17.662346Z" }, "lines_to_next_cell": 0 }, @@ -282,7 +282,7 @@ }, { "cell_type": "markdown", - "id": "9610c817", + "id": "a10ba423", "metadata": {}, "source": [ "Therefore, at level $\\alpha=0.05$, we reject 15 of the 50 false\n", @@ -299,19 +299,20 @@ "amounts to quite a weak signal, and it resulted in a high number of\n", "Type II errors. Let’s instead simulate data with a stronger signal,\n", "so that the ratio of the mean to the standard deviation for the false\n", - "null hypotheses equals $1$. We make only 10 Type II errors.\n" + "null hypotheses equals $1$. We make only 10 Type II errors.\n", + " " ] }, { "cell_type": "code", "execution_count": 7, - "id": "25f7fc5d", + "id": "ae184aaf", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:50.283336Z", - "iopub.status.busy": "2023-08-07T00:19:50.283198Z", - "iopub.status.idle": "2023-08-07T00:19:50.317664Z", - "shell.execute_reply": "2023-08-07T00:19:50.317356Z" + "iopub.execute_input": "2023-08-21T02:29:17.664327Z", + "iopub.status.busy": "2023-08-21T02:29:17.664213Z", + "iopub.status.idle": "2023-08-21T02:29:17.690928Z", + "shell.execute_reply": "2023-08-21T02:29:17.690657Z" }, "lines_to_next_cell": 0 }, @@ -394,7 +395,7 @@ }, { "cell_type": "markdown", - "id": "bb70c597", + "id": "7ca15d3f", "metadata": {}, "source": [ " " @@ -402,7 +403,7 @@ }, { "cell_type": "markdown", - "id": "f6953d33", + "id": "9e9f5977", "metadata": {}, "source": [ "## Family-Wise Error Rate\n", @@ -417,13 +418,13 @@ { "cell_type": "code", "execution_count": 8, - "id": "369b5bd3", + "id": "0295fe68", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:50.319399Z", - "iopub.status.busy": "2023-08-07T00:19:50.319268Z", - "iopub.status.idle": "2023-08-07T00:19:50.674219Z", - "shell.execute_reply": "2023-08-07T00:19:50.673887Z" + "iopub.execute_input": "2023-08-21T02:29:17.692568Z", + "iopub.status.busy": "2023-08-21T02:29:17.692459Z", + "iopub.status.idle": "2023-08-21T02:29:17.899403Z", + "shell.execute_reply": "2023-08-21T02:29:17.899081Z" } }, "outputs": [ @@ -454,7 +455,7 @@ }, { "cell_type": "markdown", - "id": "3a81479e", + "id": "fecaca9e", "metadata": {}, "source": [ "As discussed previously, even for moderate values of $m$ such as $50$,\n", @@ -473,13 +474,13 @@ { "cell_type": "code", "execution_count": 9, - "id": "9ce7a19f", + "id": "406e59a8", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:50.676029Z", - "iopub.status.busy": "2023-08-07T00:19:50.675909Z", - "iopub.status.idle": "2023-08-07T00:19:50.715451Z", - "shell.execute_reply": "2023-08-07T00:19:50.715145Z" + "iopub.execute_input": "2023-08-21T02:29:17.901146Z", + "iopub.status.busy": "2023-08-21T02:29:17.901041Z", + "iopub.status.idle": "2023-08-21T02:29:17.939312Z", + "shell.execute_reply": "2023-08-21T02:29:17.939019Z" } }, "outputs": [ @@ -505,7 +506,7 @@ }, { "cell_type": "markdown", - "id": "7561e3a3", + "id": "87bab88b", "metadata": {}, "source": [ "The $p$-values are low for Managers One and Three, and high for the\n", @@ -530,7 +531,7 @@ }, { "cell_type": "markdown", - "id": "5b608e46", + "id": "d0c7a2a0", "metadata": {}, "source": [ "The `mult_test()` function takes $p$-values and a `method` argument, as well as an optional\n", @@ -541,13 +542,13 @@ { "cell_type": "code", "execution_count": 10, - "id": "de6cffed", + "id": "d4f6a247", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:50.717476Z", - "iopub.status.busy": "2023-08-07T00:19:50.717258Z", - "iopub.status.idle": "2023-08-07T00:19:50.719841Z", - "shell.execute_reply": "2023-08-07T00:19:50.719577Z" + "iopub.execute_input": "2023-08-21T02:29:17.941032Z", + "iopub.status.busy": "2023-08-21T02:29:17.940919Z", + "iopub.status.idle": "2023-08-21T02:29:17.943369Z", + "shell.execute_reply": "2023-08-21T02:29:17.943081Z" }, "lines_to_next_cell": 2 }, @@ -570,7 +571,7 @@ }, { "cell_type": "markdown", - "id": "5135c6b9", + "id": "4d5bc7e7", "metadata": {}, "source": [ "The $p$-values `bonf` are simply the `fund_mini_pvalues` multiplied by 5 and truncated to be less than\n", @@ -580,13 +581,13 @@ { "cell_type": "code", "execution_count": 11, - "id": "0de71500", + "id": "01a29d71", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:50.721450Z", - "iopub.status.busy": "2023-08-07T00:19:50.721342Z", - "iopub.status.idle": "2023-08-07T00:19:50.723962Z", - "shell.execute_reply": "2023-08-07T00:19:50.723691Z" + "iopub.execute_input": "2023-08-21T02:29:17.944859Z", + "iopub.status.busy": "2023-08-21T02:29:17.944760Z", + "iopub.status.idle": "2023-08-21T02:29:17.946888Z", + "shell.execute_reply": "2023-08-21T02:29:17.946639Z" } }, "outputs": [ @@ -608,7 +609,7 @@ }, { "cell_type": "markdown", - "id": "1f0bc112", + "id": "e68c9051", "metadata": {}, "source": [ "Therefore, using Bonferroni’s method, we are able to reject the null hypothesis only for Manager\n", @@ -622,13 +623,13 @@ { "cell_type": "code", "execution_count": 12, - "id": "f7e87bdb", + "id": "95454eb4", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:50.725450Z", - "iopub.status.busy": "2023-08-07T00:19:50.725349Z", - "iopub.status.idle": "2023-08-07T00:19:50.777055Z", - "shell.execute_reply": "2023-08-07T00:19:50.776612Z" + "iopub.execute_input": "2023-08-21T02:29:17.948474Z", + "iopub.status.busy": "2023-08-21T02:29:17.948372Z", + "iopub.status.idle": "2023-08-21T02:29:17.990740Z", + "shell.execute_reply": "2023-08-21T02:29:17.990464Z" }, "lines_to_next_cell": 2 }, @@ -651,23 +652,24 @@ }, { "cell_type": "markdown", - "id": "f762fecd", + "id": "587b5b48", "metadata": {}, "source": [ "As discussed previously, Manager One seems to perform particularly\n", - "well, whereas Manager Two has poor performance." + "well, whereas Manager Two has poor performance.\n", + " " ] }, { "cell_type": "code", "execution_count": 13, - "id": "e88be376", + "id": "1f1ac764", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:50.779763Z", - "iopub.status.busy": "2023-08-07T00:19:50.779554Z", - "iopub.status.idle": "2023-08-07T00:19:50.783798Z", - "shell.execute_reply": "2023-08-07T00:19:50.783418Z" + "iopub.execute_input": "2023-08-21T02:29:17.992261Z", + "iopub.status.busy": "2023-08-21T02:29:17.992149Z", + "iopub.status.idle": "2023-08-21T02:29:17.995141Z", + "shell.execute_reply": "2023-08-21T02:29:17.994894Z" }, "lines_to_next_cell": 2 }, @@ -694,7 +696,7 @@ }, { "cell_type": "markdown", - "id": "88dbf0a6", + "id": "e3c4b716", "metadata": {}, "source": [ "Is there evidence of a meaningful difference in performance between\n", @@ -705,13 +707,13 @@ { "cell_type": "code", "execution_count": 14, - "id": "41149af6", + "id": "298d975d", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:50.786752Z", - "iopub.status.busy": "2023-08-07T00:19:50.786580Z", - "iopub.status.idle": "2023-08-07T00:19:50.791095Z", - "shell.execute_reply": "2023-08-07T00:19:50.790607Z" + "iopub.execute_input": "2023-08-21T02:29:17.996686Z", + "iopub.status.busy": "2023-08-21T02:29:17.996590Z", + "iopub.status.idle": "2023-08-21T02:29:17.999332Z", + "shell.execute_reply": "2023-08-21T02:29:17.999076Z" } }, "outputs": [ @@ -733,7 +735,7 @@ }, { "cell_type": "markdown", - "id": "1aca6122", + "id": "3908d7d2", "metadata": {}, "source": [ "The test results in a $p$-value of 0.038,\n", @@ -757,13 +759,13 @@ { "cell_type": "code", "execution_count": 15, - "id": "61aabda7", + "id": "be117713", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:50.793577Z", - "iopub.status.busy": "2023-08-07T00:19:50.793394Z", - "iopub.status.idle": "2023-08-07T00:19:51.318999Z", - "shell.execute_reply": "2023-08-07T00:19:51.318071Z" + "iopub.execute_input": "2023-08-21T02:29:18.000853Z", + "iopub.status.busy": "2023-08-21T02:29:18.000747Z", + "iopub.status.idle": "2023-08-21T02:29:18.487357Z", + "shell.execute_reply": "2023-08-21T02:29:18.487078Z" }, "lines_to_next_cell": 2 }, @@ -799,7 +801,7 @@ }, { "cell_type": "markdown", - "id": "e0084fc5", + "id": "0fdf963f", "metadata": {}, "source": [ "The `pairwise_tukeyhsd()` function provides confidence intervals\n", @@ -817,13 +819,13 @@ { "cell_type": "code", "execution_count": 16, - "id": "cbcad4de", + "id": "537c4ea8", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:51.321200Z", - "iopub.status.busy": "2023-08-07T00:19:51.321046Z", - "iopub.status.idle": "2023-08-07T00:19:51.411142Z", - "shell.execute_reply": "2023-08-07T00:19:51.410682Z" + "iopub.execute_input": "2023-08-21T02:29:18.489069Z", + "iopub.status.busy": "2023-08-21T02:29:18.488949Z", + "iopub.status.idle": "2023-08-21T02:29:18.570869Z", + "shell.execute_reply": "2023-08-21T02:29:18.570427Z" } }, "outputs": [ @@ -845,7 +847,7 @@ }, { "cell_type": "markdown", - "id": "6278d13c", + "id": "8590f246", "metadata": {}, "source": [ "## False Discovery Rate\n", @@ -858,13 +860,13 @@ { "cell_type": "code", "execution_count": 17, - "id": "b5842190", + "id": "2c88ec87", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:51.413331Z", - "iopub.status.busy": "2023-08-07T00:19:51.413176Z", - "iopub.status.idle": "2023-08-07T00:19:51.848427Z", - "shell.execute_reply": "2023-08-07T00:19:51.847956Z" + "iopub.execute_input": "2023-08-21T02:29:18.572454Z", + "iopub.status.busy": "2023-08-21T02:29:18.572341Z", + "iopub.status.idle": "2023-08-21T02:29:19.005707Z", + "shell.execute_reply": "2023-08-21T02:29:19.005387Z" } }, "outputs": [], @@ -876,7 +878,7 @@ }, { "cell_type": "markdown", - "id": "80fc2fcc", + "id": "80e77fab", "metadata": {}, "source": [ "There are far too many managers to consider trying to control the FWER.\n", @@ -887,13 +889,13 @@ { "cell_type": "code", "execution_count": 18, - "id": "7c9d8bed", + "id": "b6d56819", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:51.850663Z", - "iopub.status.busy": "2023-08-07T00:19:51.850523Z", - "iopub.status.idle": "2023-08-07T00:19:51.854777Z", - "shell.execute_reply": "2023-08-07T00:19:51.854196Z" + "iopub.execute_input": "2023-08-21T02:29:19.007847Z", + "iopub.status.busy": "2023-08-21T02:29:19.007564Z", + "iopub.status.idle": "2023-08-21T02:29:19.010742Z", + "shell.execute_reply": "2023-08-21T02:29:19.010371Z" } }, "outputs": [ @@ -916,7 +918,7 @@ }, { "cell_type": "markdown", - "id": "4f73096d", + "id": "b4662444", "metadata": {}, "source": [ "The *q-values* output by the\n", @@ -932,13 +934,13 @@ { "cell_type": "code", "execution_count": 19, - "id": "bfa39f7c", + "id": "b00da3a1", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:51.856795Z", - "iopub.status.busy": "2023-08-07T00:19:51.856678Z", - "iopub.status.idle": "2023-08-07T00:19:51.859719Z", - "shell.execute_reply": "2023-08-07T00:19:51.859327Z" + "iopub.execute_input": "2023-08-21T02:29:19.012400Z", + "iopub.status.busy": "2023-08-21T02:29:19.012298Z", + "iopub.status.idle": "2023-08-21T02:29:19.015314Z", + "shell.execute_reply": "2023-08-21T02:29:19.014978Z" }, "lines_to_next_cell": 0 }, @@ -960,7 +962,7 @@ }, { "cell_type": "markdown", - "id": "ccb44c8d", + "id": "fdccb808", "metadata": {}, "source": [ "We find that 146 of the 2,000 fund managers have a $q$-value below\n", @@ -976,13 +978,13 @@ { "cell_type": "code", "execution_count": 20, - "id": "70b69b47", + "id": "1c230117", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:51.861924Z", - "iopub.status.busy": "2023-08-07T00:19:51.861522Z", - "iopub.status.idle": "2023-08-07T00:19:51.864394Z", - "shell.execute_reply": "2023-08-07T00:19:51.863987Z" + "iopub.execute_input": "2023-08-21T02:29:19.016857Z", + "iopub.status.busy": "2023-08-21T02:29:19.016769Z", + "iopub.status.idle": "2023-08-21T02:29:19.019332Z", + "shell.execute_reply": "2023-08-21T02:29:19.019032Z" }, "lines_to_next_cell": 2 }, @@ -1004,7 +1006,7 @@ }, { "cell_type": "markdown", - "id": "c8a969f4", + "id": "6112239d", "metadata": {}, "source": [ "Figure 13.6 displays the ordered\n", @@ -1026,13 +1028,13 @@ { "cell_type": "code", "execution_count": 21, - "id": "4c0ddea1", + "id": "62289650", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:51.865978Z", - "iopub.status.busy": "2023-08-07T00:19:51.865869Z", - "iopub.status.idle": "2023-08-07T00:19:51.868792Z", - "shell.execute_reply": "2023-08-07T00:19:51.868357Z" + "iopub.execute_input": "2023-08-21T02:29:19.021112Z", + "iopub.status.busy": "2023-08-21T02:29:19.020904Z", + "iopub.status.idle": "2023-08-21T02:29:19.023622Z", + "shell.execute_reply": "2023-08-21T02:29:19.023338Z" } }, "outputs": [], @@ -1051,7 +1053,7 @@ }, { "cell_type": "markdown", - "id": "ddeb3900", + "id": "c36b13b7", "metadata": {}, "source": [ "We now reproduce the middle panel of Figure 13.6." @@ -1060,13 +1062,13 @@ { "cell_type": "code", "execution_count": 22, - "id": "0314eac9", + "id": "18b3c0ed", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:51.871473Z", - "iopub.status.busy": "2023-08-07T00:19:51.871214Z", - "iopub.status.idle": "2023-08-07T00:19:52.126671Z", - "shell.execute_reply": "2023-08-07T00:19:52.126261Z" + "iopub.execute_input": "2023-08-21T02:29:19.025191Z", + "iopub.status.busy": "2023-08-21T02:29:19.025074Z", + "iopub.status.idle": "2023-08-21T02:29:19.262207Z", + "shell.execute_reply": "2023-08-21T02:29:19.261823Z" }, "lines_to_next_cell": 2 }, @@ -1096,7 +1098,7 @@ }, { "cell_type": "markdown", - "id": "83416f4a", + "id": "d87198e4", "metadata": {}, "source": [ "## A Re-Sampling Approach\n", @@ -1110,13 +1112,13 @@ { "cell_type": "code", "execution_count": 23, - "id": "b59b8137", + "id": "eb79e606", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:52.129167Z", - "iopub.status.busy": "2023-08-07T00:19:52.128842Z", - "iopub.status.idle": "2023-08-07T00:19:52.208320Z", - "shell.execute_reply": "2023-08-07T00:19:52.207936Z" + "iopub.execute_input": "2023-08-21T02:29:19.264174Z", + "iopub.status.busy": "2023-08-21T02:29:19.264030Z", + "iopub.status.idle": "2023-08-21T02:29:19.339232Z", + "shell.execute_reply": "2023-08-21T02:29:19.338912Z" }, "lines_to_next_cell": 2 }, @@ -1145,7 +1147,7 @@ }, { "cell_type": "markdown", - "id": "5534c8d4", + "id": "659ee2b8", "metadata": {}, "source": [ "There are four classes of cancer. For each gene, we compare the mean\n", @@ -1161,13 +1163,13 @@ { "cell_type": "code", "execution_count": 24, - "id": "96fb2f61", + "id": "1afbcf47", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:52.210235Z", - "iopub.status.busy": "2023-08-07T00:19:52.210101Z", - "iopub.status.idle": "2023-08-07T00:19:52.215004Z", - "shell.execute_reply": "2023-08-07T00:19:52.214604Z" + "iopub.execute_input": "2023-08-21T02:29:19.341009Z", + "iopub.status.busy": "2023-08-21T02:29:19.340889Z", + "iopub.status.idle": "2023-08-21T02:29:19.344670Z", + "shell.execute_reply": "2023-08-21T02:29:19.344391Z" }, "lines_to_next_cell": 2 }, @@ -1195,7 +1197,7 @@ }, { "cell_type": "markdown", - "id": "3131124e", + "id": "61f24919", "metadata": {}, "source": [ "However, this $p$-value relies on the assumption that under the null\n", @@ -1214,13 +1216,13 @@ { "cell_type": "code", "execution_count": 25, - "id": "fdc229fa", + "id": "f73f4c6d", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:52.217206Z", - "iopub.status.busy": "2023-08-07T00:19:52.217085Z", - "iopub.status.idle": "2023-08-07T00:19:54.776066Z", - "shell.execute_reply": "2023-08-07T00:19:54.775642Z" + "iopub.execute_input": "2023-08-21T02:29:19.346368Z", + "iopub.status.busy": "2023-08-21T02:29:19.346227Z", + "iopub.status.idle": "2023-08-21T02:29:21.776569Z", + "shell.execute_reply": "2023-08-21T02:29:21.776267Z" }, "lines_to_next_cell": 2 }, @@ -1253,7 +1255,7 @@ }, { "cell_type": "markdown", - "id": "c7fc4557", + "id": "a97f74af", "metadata": {}, "source": [ "This fraction, 0.0398,\n", @@ -1265,13 +1267,13 @@ { "cell_type": "code", "execution_count": 26, - "id": "e3894695", + "id": "062daf19", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:54.778563Z", - "iopub.status.busy": "2023-08-07T00:19:54.778388Z", - "iopub.status.idle": "2023-08-07T00:19:55.017161Z", - "shell.execute_reply": "2023-08-07T00:19:55.016821Z" + "iopub.execute_input": "2023-08-21T02:29:21.778366Z", + "iopub.status.busy": "2023-08-21T02:29:21.778242Z", + "iopub.status.idle": "2023-08-21T02:29:21.990476Z", + "shell.execute_reply": "2023-08-21T02:29:21.989965Z" }, "lines_to_next_cell": 0 }, @@ -1307,7 +1309,7 @@ }, { "cell_type": "markdown", - "id": "3bd21158", + "id": "e81b939b", "metadata": {}, "source": [ "The re-sampling-based null distribution is almost identical to the theoretical null distribution, which is displayed in red.\n", @@ -1325,13 +1327,13 @@ { "cell_type": "code", "execution_count": 27, - "id": "3b7392cb", + "id": "6d14fcad", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:55.019036Z", - "iopub.status.busy": "2023-08-07T00:19:55.018920Z", - "iopub.status.idle": "2023-08-07T00:39:19.291005Z", - "shell.execute_reply": "2023-08-07T00:39:19.287314Z" + "iopub.execute_input": "2023-08-21T02:29:21.992665Z", + "iopub.status.busy": "2023-08-21T02:29:21.992515Z", + "iopub.status.idle": "2023-08-21T02:34:05.930300Z", + "shell.execute_reply": "2023-08-21T02:34:05.929181Z" } }, "outputs": [], @@ -1358,7 +1360,7 @@ }, { "cell_type": "markdown", - "id": "1b92df1b", + "id": "06286699", "metadata": {}, "source": [ "Next, we compute the number of rejected null hypotheses $R$, the\n", @@ -1371,13 +1373,13 @@ { "cell_type": "code", "execution_count": 28, - "id": "cac15616", + "id": "8f0ec909", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:39:19.314420Z", - "iopub.status.busy": "2023-08-07T00:39:19.313452Z", - "iopub.status.idle": "2023-08-07T00:39:19.544251Z", - "shell.execute_reply": "2023-08-07T00:39:19.543932Z" + "iopub.execute_input": "2023-08-21T02:34:05.935513Z", + "iopub.status.busy": "2023-08-21T02:34:05.935323Z", + "iopub.status.idle": "2023-08-21T02:34:06.118079Z", + "shell.execute_reply": "2023-08-21T02:34:06.117633Z" } }, "outputs": [], @@ -1394,7 +1396,7 @@ }, { "cell_type": "markdown", - "id": "f6779ea0", + "id": "e26b64c6", "metadata": {}, "source": [ "Now, for any given FDR, we can find the genes that will be\n", @@ -1412,13 +1414,13 @@ { "cell_type": "code", "execution_count": 29, - "id": "9661eb10", + "id": "f11339e5", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:39:19.546693Z", - "iopub.status.busy": "2023-08-07T00:39:19.546543Z", - "iopub.status.idle": "2023-08-07T00:39:19.549970Z", - "shell.execute_reply": "2023-08-07T00:39:19.549697Z" + "iopub.execute_input": "2023-08-21T02:34:06.120138Z", + "iopub.status.busy": "2023-08-21T02:34:06.119994Z", + "iopub.status.idle": "2023-08-21T02:34:06.123846Z", + "shell.execute_reply": "2023-08-21T02:34:06.123478Z" } }, "outputs": [ @@ -1457,7 +1459,7 @@ }, { "cell_type": "markdown", - "id": "001e3fc1", + "id": "e145621b", "metadata": {}, "source": [ "At an FDR threshold of 0.2, more genes are selected, at the cost of having a higher expected\n", @@ -1467,13 +1469,13 @@ { "cell_type": "code", "execution_count": 30, - "id": "18ad4900", + "id": "d2600773", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:39:19.552090Z", - "iopub.status.busy": "2023-08-07T00:39:19.552004Z", - "iopub.status.idle": "2023-08-07T00:39:19.554743Z", - "shell.execute_reply": "2023-08-07T00:39:19.554473Z" + "iopub.execute_input": "2023-08-21T02:34:06.126460Z", + "iopub.status.busy": "2023-08-21T02:34:06.126346Z", + "iopub.status.idle": "2023-08-21T02:34:06.129561Z", + "shell.execute_reply": "2023-08-21T02:34:06.129124Z" } }, "outputs": [ @@ -1524,7 +1526,7 @@ }, { "cell_type": "markdown", - "id": "8767f70c", + "id": "32e600ff", "metadata": {}, "source": [ "The next line generates Figure 13.11, which is similar\n", @@ -1535,13 +1537,13 @@ { "cell_type": "code", "execution_count": 31, - "id": "28c276b6", + "id": "924b7705", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:39:19.556715Z", - "iopub.status.busy": "2023-08-07T00:39:19.556515Z", - "iopub.status.idle": "2023-08-07T00:39:19.650514Z", - "shell.execute_reply": "2023-08-07T00:39:19.650181Z" + "iopub.execute_input": "2023-08-21T02:34:06.131323Z", + "iopub.status.busy": "2023-08-21T02:34:06.131207Z", + "iopub.status.idle": "2023-08-21T02:34:06.216626Z", + "shell.execute_reply": "2023-08-21T02:34:06.216270Z" }, "lines_to_next_cell": 0 }, @@ -1566,10 +1568,10 @@ }, { "cell_type": "markdown", - "id": "e4b5d621", + "id": "b9f54695", "metadata": {}, "source": [ - "\n" + " \n" ] } ], diff --git a/README.md b/README.md index c8867b2..e3d1f97 100644 --- a/README.md +++ b/README.md @@ -1,25 +1,23 @@ # ISLP_labs -[![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/intro-stat-learning/ISLP_labs/v2) +[![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/intro-stat-learning/ISLP_labs/v2.1) Up-to-date version of labs for ISLP. This repo will track labs for ISLP as their source code changes. The intent is that building a conda environment with -`requirements.txt` will reproduce -the results in this repo. +`requirements.txt` will reproduce the results in this repo. To install the current version of the requirements run ``` -pip install -r https://raw.githubusercontent.com/intro-stat-learning/ISLP_labs/v2/requirements.txt; +pip install -r https://raw.githubusercontent.com/intro-stat-learning/ISLP_labs/v2.1/requirements.txt; ``` The labs can now be run from this directory: ``` -cd notebook; jupyter lab Ch02-statlearning-lab.ipynb ``` diff --git a/requirements.txt b/requirements.txt index f591d4d..c917f5a 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,17 +1,16 @@ -numpy>=1.7.1 -scipy>=0.9 -pandas>=0.20 -pandas<=1.9 -lxml # pandas needs this for html -scikit-learn>=1.2 -joblib -statsmodels>=0.13 -lifelines -pygam # for GAM in Ch7 -l0bnb==1.0.0 # for bestsubsets -ISLP -torch -pytorch_lightning -torchmetrics -torchvision -torchinfo +numpy==1.24.2 +scipy==1.11.1 +pandas==1.5.3 +lxml==4.9.3 +scikit-learn==1.3.0 +joblib==1.3.1 +statsmodels==0.14.0 +lifelines==0.27.7 +pygam==0.9.0 +l0bnb==1.0.0 +torch==2.0.1 +torchvision==0.15.2 +pytorch-lightning==2.0.6 +torchinfo==1.8.0 +torchmetrics==1.0.1 +ISLP==0.3.19