統計分析のRでの実現ガイド

Rを用いた統計分析では、記述統計量の計算、クロス集計、各種検定、グラフ描画などがある。baseパッケージによる基本的な統計処理から、momentsパッケージによる高度な分布解析まで、さまざまな分析手法が提供されている。データフレーム構造を基盤とし、データ処理と結果の可視化が可能である。

統計手法

  1. 記述統計量
  2. ヒストグラム
  3. クロス集計表
  4. 検定

記述統計量

記述統計量は、データセットの特徴を数値的に要約する統計指標である。データ全体の特性を把握し、適切な分析手法の選択を支援する役割を果たす。

基本的な統計量として以下が挙げられる。

用語説明

統計処理の比較

処理内容 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
one-way ANOVA 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

基本的なデータ構造とデータフレームの作成

本プログラムは、baseパッケージを活用してデータフレームを構築する基本的な実装例である。ベクトルでデータを定義し、data.frame関数でデータフレーム構造に変換することで、データ操作の基盤を作成する。データ構造の理解と操作の基礎となる例である。また、データの整合性チェックや初期分析にも活用できる実装方法を示している。


# データの作成
科目 <- c('国語', '国語', '算数', '算数', '理科')
受講者 <- c('A', 'B', 'A', 'B', 'A')
得点 <- c(90, 80, 95, 90, 80)

# データフレームの作成
df <- data.frame(科目 = 科目, 受講者 = 受講者, 得点 = 得点)
print("基本データ:")
print(df)

個別の統計量計算

baseパッケージの統計関数群を使用して、データの基本統計量を個別に算出する実装例である。平均値、標準偏差、中央値、四分位数などの統計指標を計算し、データの特性を把握する。各統計量の計算過程が明示的であり、データ分析の基礎を理解する上で参考となる例である。また、結果のフォーマット指定により、可読性のある出力を実現している。


# 基本統計量の個別計算
scores <- df$得点

print("基本統計量:")
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)))

総合的な統計分析

baseパッケージのsummary関数を用いて、データの統計分析を行う実装例である。一回の処理で複数の統計量を同時に算出し、データ概要の把握を可能にする。さらに、aggregate関数と組み合わせることで、カテゴリ別の統計分析も実現している。データ分析の初期段階におけるアプローチの一つを示している。


# summary関数による総合的な統計量の算出
print("\n総合的な統計量:")
print(summary(df$得点))

# 科目別の統計量
print("\n科目別の統計量:")
print(aggregate(得点 ~ 科目, data = df, FUN = summary))

データの可視化,ヒストグラム

baseパッケージのグラフィック機能を使用して、データの分布を視覚的に表現する実装例である。箱ひげ図とヒストグラムという2つの可視化手法を用いて、データの特徴を把握する。日本語表示対応や軸ラベル、グリッド線の追加など、可視化の要素も含まれている。データの理解とプレゼンテーションを支援する実装となっている。


# 日本語フォントの設定
par(family = "HiraKakuProN-W3")

# 箱ひげ図の作成
png("score_distribution.png", width = 800, height = 600)
boxplot(得点 ~ 科目, data = df, main = "科目別得点分布",
        ylab = "得点", grid = TRUE)
dev.off()

# ヒストグラム
png("score_histogram.png", width = 800, height = 600)
hist(df$得点, breaks = 5, main = "得点分布のヒストグラム",
     xlab = "得点", ylab = "頻度", border = "black")
grid()
dev.off()

歪度,尖度

momentsパッケージを使用して、データの歪度と尖度を計算する実装例である。乱数生成により正規分布に従うデータを作成し、分布の形状特性を定量的に評価する。シード値の固定による再現性の確保や、基本統計量との組み合わせにより、データ特性の把握を可能にしている。分布の非対称性や尖り具合を数値的に理解するための一例である。


# momentsパッケージの読み込み
library(moments)

# 乱数のシードを固定して再現性を確保
set.seed(42)

# データ生成
normal_data <- rnorm(10000)
df <- data.frame(値 = normal_data)

# 基本統計量の計算
print(summary(df))
print(paste("歪度:", round(skewness(normal_data), 3)))
print(paste("尖度:", round(kurtosis(normal_data), 3)))

クロス集計表の例

baseパッケージの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))

t検定

baseパッケージのt.test関数を使用して、2群間の平均値の差を検定する実装例である。Welchのt検定を実装し、分散が等しくない場合でも検定を可能にしている。乱数生成によるサンプルデータの作成から、検定統計量とp値の算出まで、統計的仮説検定の一連のプロセスを示している。データ分析における統計手法の一実装例である。


# データ生成
set.seed(42)
group1 <- rnorm(100)
group2 <- rnorm(100, 0.5)

# Welchのt検定実行
test_result <- t.test(group1, group2)
print(paste("t値:", round(test_result$statistic, 3)))
print(paste("p値:", round(test_result$p.value, 3)))

一元配置分散分析

baseパッケージのoneway.test関数を用いて、3群以上の平均値の差を同時に検定する実装例である。一元配置分散分析(One-way ANOVA)を実装し、複数群間の差の統計的有意性を評価する。サンプルデータを準備し、F値とp値の算出過程を明示している。集団間の差異を統計的に評価する際のアプローチの一つを示す例である。


# サンプルデータ
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)))

正規性の検定

baseパッケージのshapiro.test関数を使用して、データの正規性を検定する実装例である。Shapiro-Wilk検定を実装し、データが正規分布に従うかどうかを統計的に評価する。乱数生成による検証用データの作成から、検定統計量とp値の算出まで、正規性検定の基本的なプロセスを示している。データ分析の前提条件を確認する際に用いられる統計手法の実装例である。


# データ生成
set.seed(42)
data <- rnorm(100)

# Shapiro-Wilk検定
result <- shapiro.test(data)
print(paste("検定統計量:", round(result$statistic, 3)))
print(paste("p値:", round(result$p.value, 3)))