見出し画像

Rではじめる統計基礎講座 #03:推計統計編

前回に引き続き、UdemyのRではじめる統計基礎講座の学習が進みました。今回はRの関数を使った点推定・区間推定、仮設検定の手法について学びました。

正規分布に従う乱数を発生

library(ggplot2)
library(dplyr)
library(MASS)
library(kernlab)

setwd("C:/Users/user/Desktop/統計学習用資料")

n <- 10000
m <- 170
s <- 5.5

#正規分布に従う乱数をサンプル分だけ発生させる
p <- rnorm(n, mean = m, sd = s)
hist(p)

#pから100個のデータを無作為抽出する
#無作為抽出を繰り返し、分布・平均・標準偏差の値が大体どの値になるかをチェックする
x <- sample(p, 100)
hist(x)
mean(x)
sd(x)

点推定

library(ggplot2)
library(dplyr)
library(MASS)
library(kernlab)

#点推定 - 母集団の平均、分散、標準偏差を標本集団からピンポイントで予測する
#標本集団が少ない際には、母分散の推定値として不偏分散を使う

n <- 300000
m <- 70
s <- 10

#正規分布に従う乱数をサンプル分だけ発生させる
d <- rnorm(n, mean = m, sd = s)
hist(d)

#標本データを使った点推定で求めらられるのは母集団の平均、不偏分散の2つ
x <- sample(d, 3)
x
mean(x)
var(x)
sd(x)

1サンプルの区間推定

library(ggplot2)
library(dplyr)
library(MASS)
library(kernlab)

 #区間推定 - 母集団から得たサンプルがどれくらいの確率でどれほどの範囲に現れるかを確率で表現する
#標準化した値がどの値を取るか計算し、その間の標準正規分布の確率密度と比較するという手法で推定できる

n <- 300000
m <- 70
s <- 10

#正規分布に従う乱数をサンプル分だけ発生させる
d <- rnorm(n, mean = m, sd = s)
hist(d)

#区間推定で1つのサンプルが平均(70)の95%信頼区間に入っているかを推計する
#サンプルは5%の確率で95%信頼区間から外れる
x <- sample(d, 1)
r1 = x - 1.96*s
r2 = x + 1.96*s

x
c(r1, r2)

母平均の区間推定

library(ggplot2)
library(dplyr)
library(MASS)
library(kernlab)

#標本平均の値の分布は正規分布となる、という性質を利用して標本手段から母平均の値を区間推定することができる

n <- 300000
m <- 70
s <- 10

#正規分布に従う乱数をサンプル分だけ発生させる
d <- rnorm(n, mean = m, sd = s)

#母平均の区間推定に用いるサンプル数で信頼区間が変わることを検証する
n1 <- 1
n2 <- 15

x1 <- sample(d, n1)
x2 <- sample(d, n2)
xb <- mean(x2)

rl1 <- x1 - 1.96*(s / sqrt(n1))
ru1 <- x1 + 1.96*(s / sqrt(n1))
rl2 <- xb - 1.96*(s / sqrt(n2))
ru2 <- xb + 1.96*(s / sqrt(n2))

#標本数が多いほど信頼区間は狭まり、より正確な区間推定ができる
x1
c(rl1, ru1, ru1 - rl1)
xb
c(rl2, ru2, ru2 - rl2)

仮設検定

#仮説が正しいか否かを標本から得られる推計値、検証に使う有意水準を使って検証する。
#仮説がどれだけの確率で発生する事象かを計算 → 有意水準を下回る場合は棄却、という帰謬法の手法をつかう。

library(ggplot2)
library(dplyr)
library(MASS)
library(kernlab)

#xb = 98, s =5, m=100, n = 30の時、帰無仮説H0: μ = 100, 対立仮設H1: μ < 100を仮設検定する
#標本平均を標準化した値が標準正規分布の上方95%区間(-1.64)を下回っているかを算出する

xb = 98 
s =5
m=100
n = 30
pnorm(-1.64, mean=0, sd=1)

#有意水準から推計に用いる確率密度変数を知りたい場合はqnormを用いる
qnorm(0.05, mean =0, sd =1)

#zの値から、帰無仮説は棄却され対立仮設が採用される
z <- (xb - m) / (s / sqrt(n) )
z

t分布を使った仮設検定

#区間推定をする際、母集団の分散が不明 + 標本数が少ない(5 ~30程)場合は代わりに
#不偏分散に基づいたt分布を確率密度変数とする推定を行う。
#R言語にはt.test()という、t分布で区間推定・仮設検定ができる関数が付属している。

library(ggplot2)
library(dplyr)
library(MASS)
library(kernlab)

#30個のサンプルからt分布を使った区間推定を行う。
x <- rnorm(30, mean = 98, sd = 5)
t.test(x, conf.level = 0.95)

#conf.levelを使うと有意水準を任意の値に変更できる
t.test(x, conf.level = 0.99)
t.test(x, conf.level = 0.999)

#母平均が100であるという帰無仮説を採用するか否かを検定する(片側検定)
t.test(x, mu = 100, alternative = "less")

#母平均が100であるという帰無仮説を採用するか否かを検定する(両側検定)
t.test(x, mu = 100, alternative = "two.sided")

ナイル川の流量で推計・仮設検定をする

library(ggplot2)
library(dplyr)
library(MASS)
library(kernlab)
setwd("C:/Users/user/Desktop/統計学習用資料")

d <- Nile
hist(d)
d.mean = mean(d)

#サンプルを30個抽出し、母平均の95%信頼区間と一致するかをt分布で両側仮設検定する
#p値が5%以上なので、帰無仮説を棄却 → 標本平均は母平均にほぼ一致する
s <-sample(d, 30)
t.test(s, mu = d.mean, conf.level = 0.95, alternative = "two.sided")

なんか地味な図が多いですが(笑)、これで推計統計の手法は盤石になりました。次回は相関・回帰分析編を頑張ろうと思います。お楽しみに!





























この記事が気に入ったらサポートをしてみませんか?