R言語で分散が未知のときの母平均の信頼区間を算出する関数やその実行例について解説します。
実行例では、母平均の信頼区間だけでなく母平均の差の信頼区間の求め方について見ていきます。2つの母集団の分散が同じときや異なるとき、さらに対応のあるデータの母平均の差の信頼区間の計算の仕方も紹介します。
この記事で扱うプログラミングコードは以下からダウンロードできます。
R言語 分散が未知のときの母平均の信頼区間
母平均および母平均の差の信頼区間差については、次の記事を参照してください。
【統計学】母平均の信頼区間
標本が正規分布に従う場合の母平均の信頼区間の導出についてみていきます。 母分散が既知または未知である場合についてそれぞれの信頼区間を解説します。 母平均の差の信頼区間については以下を参照。 信頼区間 ...
続きを見る
【統計学】母平均の差の信頼区間
標本が正規分布に従う場合の母平均の差の信頼区間の導出についてみていきます。 母分散が既知または未知である場合について二群の母平均の差の信頼区間を解説します。 母平均の信頼区間については以下の記事を参照 ...
続きを見る
分散が未知のときの母平均の信頼区間
分散が未知のときの母平均の信頼区間とR言語の母平均んの信頼区間の関数についてまとめました。
母平均と母平均の差の信頼区間の概要について列挙しています。
母平均の信頼区間
\(x_1, x_2, \ldots, x_n\)を\(N(\mu, \sigma^2)\)からの\(n\)個の無作為標本とする。また、標本平均と不偏標本分散を次とする。
母平均の信頼区間
母平均\(\mu\)の\(100(1 - \alpha)\)%信頼区間は次で与えられる。
母平均の差の信頼区間
\(x_{11}, x_{12}, \ldots, x_{1n_1}\)を\(N(\mu_1, \sigma_1^2)\)からの\(n_1\)個の無作為標本、\(x_{21}, x_{22}, \ldots, x_{2n_2}\)を\(N(\mu_2, \sigma_2^2)\)からの\(n_2\)個の無作為標本とし、それぞれの標本平均と不偏標本分散、プールした不偏標本分散を次とする。
母平均の差の信頼区間
分散が等しいとき
\(\sigma_1^2 = \sigma_2^2\)のとき、母平均の差\(\mu_1 - \mu_2\)の\(100(1 - \alpha)\)%信頼区間は次で与えられる。
分散が異なるとき
\(\sigma_1^2 \neq \sigma_2^2\)のとき、母平均の差\(\mu_1 - \mu_2\)の\(100(1 -\alpha)\)%信頼区間は次で与えられる。
ここに、\(\nu\)は次で与えられる。
対応のあるデータのとき
2変量正規母集団\(N(\boldsymbol{\mu}, \boldsymbol{\Sigma})\)からの大きさ\(n\)の無作為標本\((x_{11}, x_{21}), \ldots, (x_{1n}, x_{2n})\)が得られたとする。ここに
共分散行列\(\boldsymbol{\Sigma}\)が未知であり対応のあるとき、母平均の差\(\mu_1 - \mu_2\)の\(100(1 - \alpha)\)%信頼区間は次で与えられる。
ここに\(n_1 = n_2 = n\)、\(x_{di} = x_{1i} - x_{2i},\ i = 1, \ldots, n\)、
関数t.test
関数t.testで母平均および母平均の差の信頼区間を計算することができます。以下、t.testとその引数です。
t.test(x, y = NULL, alternative = c("two.sided", "less", "greater"), mu = 0, paired = FALSE, var.equal = FALSE, conf.level = 0.95, …)
# S3 method for formula
t.test(formula, data, subset, na.action, …)
x | numeric型のベクトル。1つ目のグループの標本(観測値)。 |
y | numeric型のベクトル。2つ目のグループの標本(観測値)。 |
alternative | character型。"two.sided"で両側検定、"greater"で右片側検定、"less"で左片側検定を指定できる。 |
mu | numeric型。帰無仮説の下での母平均、または母平均の差の値。 |
paired | logical型。TRUEのとき対応のある2標本検定を行う。 |
var.equal | logical型。TRUEのとき等分散性を仮定する。 |
conf.level | numeric型。信頼区間を計算する際の信頼度数。 |
formula | formula型。lhs ~ rhsと書き、lhsはnumeric型の変数でrhsは2つのlevelsから成るfactor型の変数。 |
data | データフレーム。検定に用いるデータセット。 |
subset | どの観測値を検定に用いるか指定するためのベクトル。 |
na.action | dataがNAを含む場合どうするか。 |
実行例
母平均の信頼区間の実行例について紹介します。
グラフの作成の際に次のパッケージggplot2を用います。あらかじめインストールしておいてください。
1 2 | install.packages("ggplot2") library(ggplot2) |
母平均の信頼区間
次の木に関するデータセットtreesを例に母平均の信頼区間の計算を行っていきます。
1 2 3 4 5 6 7 8 9 | > dataset <- trees > head(dataset) Girth Height Volume 1 8.3 70 10.3 2 8.6 65 10.3 3 8.8 63 10.2 4 10.5 72 16.4 5 10.7 81 18.8 6 10.8 83 19.7 |
Heightの95%信頼区間を算出するには、次のように関数t.testのオブジェクトの後ろに$conf.intを付けます。
1 2 | conf_level <- 0.95 ci <- t.test(dataset$Height, conf.level = conf_level)$conf.int |
ciを参照すると信頼区間の下限と上限、また信頼水準が格納されているのが分かります。
1 2 3 4 | > ci [1] 73.6628 78.3372 attr(,"conf.level") [1] 0.95 |
信頼区間の上限と下限を取得するには、次のようにciの1番目と2番目をインデックスで参照すれば大丈夫です。
1 2 | ci_lower <- ci[1] #信頼区間の下限 ci_upper <- ci[2] #信頼区間の上限 |
計算した信頼区間を他のファイルに保存したいときは、次のように関数data.frameでデータフレームに計算した値を格納しwrite.csvなどで他のファイルへ保存します。
1 2 3 | resultTable <- data.frame(sample.mean = mean(dataset$Height), c.i.lower = ci[1], c.i.upper = ci[2], row.names = NULL) write.csv(resultTable, "母平均の信頼区間_分散未知.csv", row.names = FALSE) |
上で算出した信頼区間をグラフにすると下の画像のようになります。
1 2 3 4 5 6 7 8 9 10 11 12 | ggplot(dataset, aes(x = 1, y = Height)) + geom_dotplot(binaxis = "y", stackdir = "center") + stat_summary(aes(x = 1, y = Height), fun = mean, fun.min = function(x) mean(x), fun.max = function(x) mean(x), geom = "crossbar", width = 0.3, color = "#F8766D") + stat_summary(aes(x = 1, y = Height), fun.min = function(x) ci[1], fun.max = function(x) ci[2], geom = 'errorbar', width = 0.25, color = "#00BFC4", size = 1) + geom_text(data = data.frame(x = c(mean(dataset$Height), ci), name = factor(c("sample mean", paste0(100 * conf_level, rep("% c.i.", 2))), levels = c("sample mean", paste0(100 * conf_level, "% c.i.")))), aes(x = 0.7, y = x, color = name, label = paste0(c("sample mean", "c.i.lower", "c.i.upper"), ": ", round(x, 3)))) + labs(color = "") |
- 赤線はHeightの標本平均
- 青線はHeightの母平均の上限と下限
を表しています。
母平均はだいたい73から78の範囲にあることを推定できました。
母平均は母集団のパラメータであり、上の図の赤線の標本平均ではないことに注意してください。
母平均の差の信頼区間(分散が等しいとき、異なるとき)
続いて母平均の差の信頼区間の算出例について見ていきます。
次のデータセットToothGrowthのsuppがVCであるグループとOJであるグループのLenの母平均の差の信頼区間を求めたいと思います。
1 2 3 4 5 6 7 8 9 | > dataset <- ToothGrowth > head(dataset) len supp dose 1 4.2 VC 0.5 2 11.5 VC 0.5 3 7.3 VC 0.5 4 5.8 VC 0.5 5 6.4 VC 0.5 6 10.0 VC 0.5 |
母平均の差の信頼区間を計算するには、関数t.testの引数を次のように与えます。
ポイント
引数var.equalがTRUEのとき母分散が等しいとき、FALSEのとき母分散が異なるときの母平均の差の信頼区間が計算されます。
1 2 3 4 | conf_level <- 0.95 ci_equalVar <- t.test(len ~ supp, data = dataset, conf.level = conf_level, var.equal = TRUE)$conf.int ci_notEqualVar <- t.test(len ~ supp, data = dataset, conf.level = conf_level, var.equal = FALSE)$conf.int |
また、引数formulaとdataを用いた書き方ではなく、 次のように2つのグループのベクトルを与えても同様の結果が得られます。
1 2 3 | len_VC <- dataset$len[dataset$supp == "VC"] len_OJ <- dataset$len[dataset$supp == "OJ"] t.test(len_VC, len_OJ, conf.level = conf_level, var.equal = TRUE) #formulaを用いない場合 |
母分散が等しいときと異なるときのそれぞれのsuppがVCであるグループとOJであるグループの母平均の差の信頼区間は次の画像の通りです。
1 2 3 4 5 | resultTable <- data.frame(c.i.lower = c(ci_equalVar[1], ci_notEqualVar[1]), c.i.upper = c(ci_equalVar[2], ci_notEqualVar[2]), row.names = c("equal variances", "not equal variances")) write.csv(resultTable, "母平均の差の信頼区間_分散未知.csv") |
母平均の差の信頼区間の概要で解説したように、母分散が等しいときと異なるときではt分布の自由度が異なるため、信頼区間の上限と下限が若干異なります。
2つのグループの信頼区間をプロットする際は、次のようにggplotを実行します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | ci_OJ <- t.test(len_OJ, conf.level = conf_level)$conf.int ci_VC <- t.test(len_VC, conf.level = conf_level)$conf.int dataset_ci <- data.frame(mean_len = tapply(dataset$len, dataset$supp, mean), supp = as.factor(c("OJ", "VC")), ci = c(dist(ci_OJ), dist(ci_VC)) / 2) ggplot() + geom_dotplot(data = dataset, aes(x = supp, y = len, color = supp, fill = supp), binaxis = "y", stackdir = "center") + geom_line(data = dataset_ci, aes(x = supp, y = mean_len, group = 1), size = 1, alpha = 0.5) + geom_point(data = dataset_ci, aes(x = supp, y = mean_len, group = 1), size = 2, alpha = 0.5) + geom_errorbar(data = dataset_ci, aes(x = supp, y = mean_len, ymin = mean_len - ci, ymax = mean_len + ci), width = 0.25, size = 1, alpha = 0.5) + geom_text(data = dataset_ci, aes(x = supp, y = mean_len - ci + 1, label = paste0(conf_level, "% c.i.lower: ", round(mean_len - ci, 3)))) + geom_text(data = dataset_ci, aes(x = supp, y = mean_len + ci + 1, label = paste0(conf_level, "% c.i.upper: ", round(mean_len + ci, 3)))) + geom_text(data = dataset_ci, aes(x = supp, y = mean_len + 1, label = paste0("Sample mean: ", round(mean_len, 3)))) |
上の画像から分かるように、赤のOJのグループの上限と青のVCのグループの下限の差が母平均の差の信頼区間の上限、OJのグループの下限と青のVCのグループの上限の差が母平均の差の信頼区間の下限に近い値をとっているのが分かります。
各グループの母平均の信頼区間を描画したものであり母平均の差の信頼区間のプロットでないことに注意してください。
母平均の差の信頼区間(対応のあるデータ)
最後に対応のあるデータの母平均の差の信頼区間の計算例を紹介します。
次のデータのsleepについて母平均の差の信頼区間を計算していきます。
1 2 3 4 5 6 7 8 9 | > dataset <- sleep > head(dataset) extra group ID 1 0.7 1 1 2 -1.6 1 2 3 -0.2 1 3 4 -1.2 1 4 5 -0.1 1 5 6 3.4 1 6 |
対応のあるデータの母平均の差の信頼区間を計算するには、関数t.testの引数を次のように与えます。
ポイント
対応のあるデータの母平均の差の信頼区間を計算したい場合は、次のように引数pairedをTRUEにします。
1 2 | conf_level <- 0.95 ci_paired <- t.test(extra ~ group, data = dataset, conf.level = conf_level, paried = TRUE)$conf.int |
次のように、母平均の信頼区間と同様に母平均の差の信頼区間の上限と下限の取得が可能です。
1 2 | ci_lower <- ci_paired[1] #信頼区間の下限 ci_upper <- ci_paired[2] #信頼区間の上限 |
まとめ
R言語で分散が未知のときの母平均の信頼区間を計算する関数やその実行例をみていきました。
母平均の検定のための関数t.testを用いることで分散が未知のときの母平均の信頼区間を計算することができます。
引数var.equalによって分散が等しい、または異なるときの母平均の差の信頼区間、pairedで対応のあるデータの母平均の差の信頼区間が算出できます。