---
title: "統計データ解析I"
subtitle: "第1講 練習問題 解答例"
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 Script/Quarto を作成し保存しなさい．

-   $123\times456-789$
-   $(2^{2^5}+1)\div641$
-   $\sin^2(\pi/3)+\cos^2(\pi/3)$
-   適当な数学関数を用いた計算

### 解答例

新規ファイルを作成し，以下をエディタで実行する． Quarto の場合は `chunk` を作成して，その中に記述する必要がある．

```{r}
123 * 456 - 789
(2^2^5 + 1) / 641         # 羃乗の優先順位に注意
sin(pi/3)^2 + cos(pi/3)^2
log(exp(2)+1)             # 適当な数学関数の例．好きな計算を実行する
```

::: callout-tip
コンソールで実行した場合は `History` タブから実行したコマンドを選択し， ファイルにコピーすることができる．
:::

## パッケージの操作

### 問題

パッケージを導入して，含まれている関数について調べなさい．

-   `e1071` をインストールする
-   関数 `kurtosis()` (尖度) を調べる
-   関数 `kurtosis()` を呼び出す

パッケージ群の導入を行いなさい．

-   `tidyverse` をインストールする

### 解答例

パッケージのインストールはRStudioのUIを用いることを推奨する．

-   Package タブから `e1071`/`tidyverse` をインストール

コンソールからインストールする場合は以下を実行すれば良い．

-   `install.packages("e1071")`
-   `install.packages("tidyverse")`

利用するには関数 `library()` を用いて読み込む．

```{r}
library(e1071) # パッケージの読み込み
help(kurtosis) # 関数を調べる
kurtosis(Nile) # 関数を用いる
```

::: callout-note
`datasets::Nile` は起動時に自動的に読み込まれるデータセットの一つ． `help(Nile)` でデータの概要を知ることができる． また `plot(Nile)` で簡単な視覚化ができる．
:::

## データフレームの操作

### 問題

以下に指定する操作を行いなさい．

-   次の表に対応するデータフレームを作成しなさい

    | name  | math | phys | chem | bio |
    |:------|-----:|-----:|-----:|----:|
    | Alice |   90 |   25 |   65 |  70 |
    | Bob   |   80 |   50 |  100 |  50 |
    | Carol |   70 |   75 |   70 |  30 |
    | Dave  |   60 |  100 |   40 |  80 |
    | Eve   |   50 |   80 |   75 | 100 |

-   データフレームの要素の選択を試みなさい

### 解答例

各項目が同じ長さのベクトルを並べて作成すればよい．

```{r}
library(tidyverse) # 関数 tibble() を利用するためにパッケージを読み込む
foo <- tibble( # 変数名は自由に決めてよい
    name = c("Alice", "Bob", "Carol", "Dave", "Eve"),
    math = c(90, 80, 70, 60, 50),
    phys = c(25, 50, 75,100, 80),
    chem = c(65,100, 70, 40, 75),
    bio  = c(70, 50, 30, 80,100))
print(foo) # 中身を表示
```

例えば以下のような操作を行うことができる．

```{r}
foo[2,3]      # 特定の要素を数値で参照する
foo[2,"phys"] # 列を名前で参照する (上記と同じ結果)
foo[3,]       # 特定の行を表示 (データフレームになる)
foo["bio"]    # 特定の列を表示 (データフレームになる)
foo[,"bio"]   # 上記と同じ結果
foo[["bio"]]  # ベクトルとして取り出す (リストとしての処理)
foo$bio       # 上記と同じ結果
```

::: callout-warning
上記のように同じ要素を選択してもデータ構造が異なる場合があるので注意する．
:::
