--- 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} ```