```{r setup, echo=FALSE}
knitr::opts_chunk$set(echo = TRUE,
                      message = FALSE,
                      warning = FALSE)
```

# 7.1 推定と不確実性

---

## STAR データの読み込み (1)

* 推定の不確実性を評価するため、STARプロジェクトのデータを読み込みます。

\scriptsize
```{r}
# 1. ローカルに保存したデータの読み込み（推奨）
star <- read.csv("STAR.csv")

# （参考）URLから直接読み込むことも可能
# star <- read.csv("https://ayumu-tanaka.github.io/QSS/QSS_Data/STAR.csv")
```
\normalsize

---

## 標準誤差 (Standard Error) (2)

* 推定値のばらつき（標準偏差）を**標準誤差**と呼びます。

\scriptsize
```{r}
# 小人数学級 (1) の読解力スコアの標準誤差を計算
n.small <- sum(star$classtype == 1 & !is.na(star$g4reading))
est.small <- mean(star$g4reading[star$classtype == 1], na.rm = TRUE)
se.small <- sd(star$g4reading[star$classtype == 1], na.rm = TRUE) / sqrt(n.small)

est.small
se.small
```
\normalsize

# 7.2 信頼区間 (Confidence Intervals)

---

## 95%信頼区間の算出

* 母集団の真の値が一定の確率（例：95%）で含まれると期待される範囲。
* 公式: $\text{推定値} \pm 1.96 \times \text{標準誤差}$

\scriptsize
```{r}
# 95% 信頼区間 (小人数学級の平均)
ci.small <- c(est.small - 1.96 * se.small, est.small + 1.96 * se.small)
ci.small

# 平均の差 (ATE) の信頼区間
n.reg <- sum(star$classtype == 2 & !is.na(star$g4reading))
est.reg <- mean(star$g4reading[star$classtype == 2], na.rm = TRUE)
se.reg <- sd(star$g4reading[star$classtype == 2], na.rm = TRUE) / sqrt(n.reg)
ate.est <- est.small - est.reg
ate.se <- sqrt(se.small^2 + se.reg^2)
c(ate.est - 1.96 * ate.se, ate.est + 1.96 * ate.se)
```
\normalsize

# 7.3 仮説検定 (Hypothesis Testing)

---

## p値 (p-value)

* **帰無仮説** ($H_0$): 「効果がない（差はゼロである）」という仮定。
* **p値**: $H_0$ が正しい場合に、観測された結果（またはそれ以上に極端な結果）が得られる確率。
* p値 < 0.05 であれば、「統計的に有意」と判断し、帰無仮説を棄却する。

\scriptsize
```{r}
# 平均の差の検定 (Z検定)
z.score <- ate.est / ate.se
2 * pnorm(-abs(z.score)) # 2面p値

# t.test 関数を用いた検定
t.test(star$g4reading[star$classtype == 1], 
       star$g4reading[star$classtype == 2])
```
\normalsize

# 7.4 回帰分析における不確実性

---

## resume データの読み込み (1)

* 回帰係数の有意性を確認するため、履歴書実験データを読み込みます。

\scriptsize
```{r}
# 1. ローカルに保存したデータの読み込み（推奨）
resume <- read.csv("resume.csv")

# （参考）URLから直接読み込むことも可能
# resume <- read.csv("https://ayumu-tanaka.github.io/QSS/QSS_Data/resume.csv")
```
\normalsize

---

## 回帰係数の有意性 (2)

* `summary()` で各係数の標準誤差、t値、p値を確認できます。

\scriptsize
```{r}
# 人種とコールバック率の回帰
fit <- lm(call ~ race, data = resume)
summary(fit)$coefficients
```
\normalsize

---

## 選挙データの読み込みと誤差計算 (1)

* 予測の不確実性を視覚化するため、選挙結果と世論調査データを読み込みます。

\scriptsize
```{r}
# 1. ローカルに保存したデータの読み込み（推奨）
pres08 <- read.csv("pres08.csv")
polls08 <- read.csv("polls08.csv")

# （参考）URLから直接読み込むことも可能
# pres08 <- read.csv("https://ayumu-tanaka.github.io/QSS/QSS_Data/pres08.csv")
# polls08 <- read.csv("https://ayumu-tanaka.github.io/QSS/QSS_Data/polls08.csv")

# 2. 予測誤差の計算
errors <- pres08$Obama - 
  tapply(polls08$Obama, polls08$state, mean)[pres08$state]
```
\normalsize

---

## 信頼区間のプロット (2)

\scriptsize
```{r, echo=FALSE, fig.height=8, out.height="75%", fig.align="center"}
hist(errors, main = "Poll Prediction Error", xlab = "Error (%)")
```
\normalsize

# 7.5 まとめ

---

## 第7章のまとめ

* **不確実性**: 標本から母集団を推測する際には、常に誤差が伴う。
* **標準誤差**: 推定値の精度を測る尺度。
* **信頼区間**: 真の値が含まれる可能性が高い範囲を提示する。
* **仮説検定**: 観測された結果が偶然によるものかどうかを確率的に判断する。
* **統計的有意性**: p値が基準（0.05など）を下回るかどうかで判断するが、その解釈には注意が必要。
* Rの操作: `sd()`, `qt()`, `qnorm()`, `t.test()`, `confint()` などを習得した。
