統計分析のRでの実現ガイド
Rを用いた統計分析では、記述統計量の計算、クロス集計、各種検定、グラフ描画などがある。baseパッケージによる基本的な統計処理から、momentsパッケージによる分布解析まで、多様な分析手法が提供されている。データフレーム構造を基盤とし、データ処理と結果の可視化が可能である。
【目次】
記述統計量
記述統計量は、データセットの特徴を数値的に要約する統計指標である。データ全体の特性を把握し、適切な分析手法の選択を支援する。
基本的な統計量として以下が挙げられる。
- 平均値(データの中心傾向を示す指標)
- 標準偏差(データのばらつきを定量化する指標)
- 中央値(データを二分する代表値)
- 四分位点(分布の形状を特徴づける統計量)
- 最大値(データの上限を示す値)
- 最小値(データの下限を示す値)
- 分散(データの変動の大きさを示す指標)
- 歪度(分布の非対称性を評価する指標)
- 尖度(分布の尖り具合を示す指標)
統計処理の比較
| 処理内容 | SPSS | Python (pandas/scipy) | R |
|---|---|---|---|
| 記述統計量 | FREQUENCIES |
df.describe()、stats.skew()、stats.kurtosis() |
summary、sd、skewness、kurtosis |
| 頻度表 | FREQUENCIES |
value_counts() |
table |
| クロス集計表 | CROSSTABS |
pd.crosstab() |
table |
| 集約 | AGGREGATE |
groupby().agg() |
aggregate |
| Welchのt検定 | T-TEST |
stats.ttest_ind(equal_var=False) |
t.test |
| 一元配置分散分析 | ONEWAY |
stats.f_oneway() |
oneway.test |
| Wilcoxon検定 | NPAR TESTS /M-W= |
stats.mannwhitneyu() |
wilcox.test |
Rプログラム例
以下のデータセットを使用する。
| 科目 | 受講者 | 得点 |
|---|---|---|
| 国語 | A | 90 |
| 国語 | B | 80 |
| 算数 | A | 95 |
| 算数 | B | 90 |
| 理科 | A | 80 |
データフレームの作成
ベクトルでデータを定義し、data.frame関数でデータフレームに変換する。
# データの作成
科目 <- c('国語', '国語', '算数', '算数', '理科')
受講者 <- c('A', 'B', 'A', 'B', 'A')
得点 <- c(90, 80, 95, 90, 80)
# データフレームの作成
df <- data.frame(科目 = 科目, 受講者 = 受講者, 得点 = 得点)
print(df)
個別の統計量計算
baseパッケージの関数を使用して、基本統計量を個別に算出する。
scores <- df$得点
print(paste("平均値:", mean(scores)))
print(paste("標準偏差:", sd(scores)))
print(paste("中央値:", median(scores)))
print(paste("最大値:", max(scores)))
print(paste("最小値:", min(scores)))
print(paste("第1四分位数:", quantile(scores, 0.25)))
print(paste("第3四分位数:", quantile(scores, 0.75)))
summary関数による統計分析
summary関数で複数の統計量を同時に算出する。aggregate関数でカテゴリ別の集計も可能である。
# 総合的な統計量
print(summary(df$得点))
# 科目別の統計量
print(aggregate(得点 ~ 科目, data = df, FUN = summary))
ヒストグラム
baseパッケージのグラフィック機能でデータの分布を可視化する。
# 日本語フォントの設定
par(family = "HiraKakuProN-W3")
# 箱ひげ図
png("score_distribution.png", width = 800, height = 600)
boxplot(得点 ~ 科目, data = df, main = "科目別得点分布", ylab = "得点")
dev.off()
# ヒストグラム
png("score_histogram.png", width = 800, height = 600)
hist(df$得点, breaks = 5, main = "得点分布", xlab = "得点", ylab = "頻度")
dev.off()
歪度と尖度
momentsパッケージを使用して、分布の形状特性を計算する。
library(moments)
set.seed(42)
normal_data <- rnorm(10000)
print(paste("歪度:", round(skewness(normal_data), 3)))
print(paste("尖度:", round(kurtosis(normal_data), 3)))
クロス集計表
table関数で2変数間の関係を集計する。
グループ1 <- c('a', 'b', 'c', 'a', 'b')
グループ2 <- c('d', 'd', 'e', 'e', 'e')
df <- data.frame(グループ1 = グループ1, グループ2 = グループ2)
print(table(df$グループ1, df$グループ2))
Welchのt検定
t.test関数で2群間の平均値の差を検定する。
set.seed(42)
group1 <- rnorm(100)
group2 <- rnorm(100, 0.5)
test_result <- t.test(group1, group2)
print(paste("t値:", round(test_result$statistic, 3)))
print(paste("p値:", round(test_result$p.value, 3)))
一元配置分散分析
oneway.test関数で3群以上の平均値の差を検定する。
group_a <- c(3.42, 3.84, 3.96, 3.76)
group_b <- c(3.17, 3.63, 3.47, 3.44, 3.39)
group_c <- c(3.64, 3.72, 3.91)
data <- data.frame(
値 = c(group_a, group_b, group_c),
グループ = factor(c(rep("A", 4), rep("B", 5), rep("C", 3)))
)
result <- oneway.test(値 ~ グループ, data = data)
print(paste("F値:", round(result$statistic, 3)))
print(paste("p値:", round(result$p.value, 3)))
正規性の検定
shapiro.test関数でデータの正規性を検定する。
set.seed(42)
data <- rnorm(100)
result <- shapiro.test(data)
print(paste("検定統計量:", round(result$statistic, 3)))
print(paste("p値:", round(result$p.value, 3)))
用語説明
- 記述統計量:データの特性を数値指標として要約したもの。平均値、標準偏差、中央値などを含む。
- 平均値:データの総和をデータ数で除した値。分布の中心傾向を示す。外れ値の影響を受けやすい。
- 標準偏差:データの散らばりを示す指標。平均値からの平均的な距離を表す。
- 中央値:順序付けられたデータの中央に位置する値。外れ値の影響を受けにくい。
- 四分位数:データを4等分する境界値。第1四分位数、中央値、第3四分位数から構成される。
- 最大値:データセット内の最も大きい値。
- 最小値:データセット内の最も小さい値。
- 分散:各データ点と平均値の差の二乗平均。標準偏差の二乗値である。
- 歪度:分布の非対称性を示す指標。正規分布では0となる。
- 尖度:分布の尖り具合を示す指標。正規分布では3となる。
- データフレーム:行と列で構成される2次元のデータ構造。Rで主に使用される。
- 外れ値:他のデータから著しく離れた値。統計分析結果に影響を与える可能性がある。
- ヒストグラム:データの分布を視覚的に表現するグラフ。各区間の頻度を棒グラフで表示する。
- クロス集計表:2変数間の関係を表形式で示したもの。組み合わせごとの度数を表示する。
- t検定:2群の平均値の差の統計的有意性を評価する検定手法。
- Welchのt検定:等分散を仮定しないt検定。分散が異なる2群の比較に適用される。
- ノンパラメトリック検定:母集団分布の形状を仮定しない検定手法。順位や符号を用いる。
- 一元配置分散分析:3群以上の平均値の差を同時に検定する手法。
- Shapiro-Wilk検定:データの正規性を評価する検定手法。
- p値:帰無仮説が真の場合に、観測データ以上に極端なデータが得られる確率。有意水準(例:0.05)と比較して判断する。