---
title: "統計データ解析"
subtitle: "第9講 実習"
date: "`r Sys.Date()`"
format:
    html: 
      toc: true
      html-math-method: katex
      self-contained: true
      grid: 
        margin-width: 350px
execute: 
  echo: true
  warning: false
reference-location: margin
citation-location: margin
tbl-cap-location: margin
fig-cap-location: margin
editor: visual
editor_options: 
  chunk_output_type: console
---

## 準備

以下で利用する共通パッケージを読み込む．

```{r}
library(conflicted) # 関数名の衝突を警告
conflicts_prefer(   # 優先的に使う関数を指定
    dplyr::filter(),
    dplyr::select(),
    dplyr::lag(),
    yardstick::spec(),
    yardstick::precision(),
    yardstick::recall(),
    )
library(tidyverse)  
library(MASS)
library(broom)      # 解析結果を tibble 形式に集約
library(tidymodels)
```

## 判別結果の評価

### 問題

前回と同様に東京の気候データの線形判別を行い，以下を確認しなさい．

-   9月と10月の気温と湿度のデータを抽出する．

    ``` r
    tw_data <- read_csv("data/tokyo_weather.csv") 
    tw_subset  <- tw_data |>
        filter(month %in% c(9,10)) |>
        select(temp, humid, month) |>
        mutate(month = as_factor(month)) # 月を因子化
    ```

-   線形判別関数を構成する．

	``` r
    tw_lda <- lda(formula = month ~ temp + humid, data = tw_subset)
	```

-   混同行列を用いて構成した判別関数の評価を行う．[^1]

	[^1]: 関数 `lda()` の返値の `class` は vector 型なので，関数 `mutate()` を用いてデータフレームの列として加えることができる．
	
	``` r
    tw_lda_fitted <- predict(tw_lda)              # あてはめ値を求める
    tw_subset |>
        mutate(fitted = tw_lda_fitted[["class"]]) # あてはめ値を加えたデータフレーム
	```

-   ROC曲線を描画しAUCを求める．[^2]

	[^2]: 関数 `lda()` の返値の `posterior` は matrix 型なので，関数 `bind_cols()` を用いてデータフレームとして結合することができる．

	``` r
    tw_subset |>
        bind_cols(tw_lda_fitted[["posterior"]])
	```


```{r}

```

## 訓練・試験データによる評価

### 問題

Wine Quality Data Set を用いて，以下を確認しなさい．

-   8:2の比率で訓練データと試験データに分割する ．

	``` r
	wq_split <-
        initial_split(wq_data, prop = 0.8, strata = grade)
    training(wq_split))
    testing(wq_split)
	```

-   訓練データを用いて線形・2次判別関数を構成する．
-   訓練データを用いて評価を行う．
-   試験データを用いて評価を行う．

```{r}

```

## LOO交叉検証法による予測誤差の評価

### 問題

データセット `MASS::biopsy` を用いて2次判別の分析を行いなさい．

``` r
bio_data <- as_tibble(biopsy) |>
    na.omit() |> # NA を除く
    select(-ID)  # IDを除く
```

-   全てのデータを用いて訓練誤差を評価する．
	
-   LOO交叉検証法を用いて予測誤差を評価する．
	
	``` r
    bio_qda_loo <- qda(class ~ ., data = bio_data, CV = TRUE)
	```

```{r}

```

## k-重交叉検証法による予測誤差の評価

### 問題

Wine Quality Data Set を用いて 線形判別と2次判別の分析を行いなさい．

-   LOO交叉検証法を用いて予測誤差を評価する．

	``` r
	wq_lda_loo <- lda(formula = wq_formula, data = training(wq_split), CV = TRUE)
    wq_qda_loo <- qda(formula = wq_formula, data = training(wq_split), CV = TRUE)
	```

-   k-重交叉検証法を用いて予測誤差を評価する．

```{r}

```
