ケィオスの時系列解析メモランダム

時系列解析、生体情報解析などをやわらかく語ります

【R】ちょっとした演習問題

R言語の入門演習です。

問題1:ベクトルの作成と基本統計量

問題: 1から10までの整数を含むベクトル x を作成し、その平均、合計、最大値、最小値を求めよ。

模範解答:

x <- 1:10
mean(x)
sum(x)
max(x)
min(x)

解説: 1:10 は1から10までの整数を生成します。mean()sum()max()min() でそれぞれ統計量を計算します。

問題2:指数関数の計算

問題: 1から5までの整数 x に対し、指数関数 exp(x) を計算し、 その結果を (1) 離散的に点プロット、(2) 関数として滑らかな曲線でプロットせよ。

# 離散データの計算とプロット
x <- 1:5
y <- exp(x)
plot(x, y, type = "p", main = "exp(x) 離散点プロット", xlab = "x", ylab = "exp(x)")

# 関数プロット(連続)
curve(exp(x), from = 0, to = 5, col = "blue", lwd = 2, add=TRUE, 
      main = "exp(x) の関数グラフ", xlab = "x", ylab = "exp(x)")

解説: exp(x) は e の x 乗を要素ごとに計算します。plot(type = "p") を使えば離散的な点を描けます。curve() を使えば連続的な関数としてプロットできます。

問題3:データフレームと平均計算

問題: 以下のようなデータフレームを作成し、各教科の平均点を求めよ。

df <- data.frame(
  name = c("A", "B", "C", "D", "E"),
  math = c(80, 70, 90, 85, 75),
  english = c(78, 82, 88, 76, 90),
  science = c(85, 70, 92, 88, 80)
)
colMeans(df[ , 2:4])

解説: データフレームで複数列の平均を計算するには colMeans() を使います。

問題4:ヒストグラムの作成

問題: 正規分布に従う乱数100個のヒストグラムを描け。

x <- rnorm(100)
hist(x)

解説: rnorm(n) は平均0、標準偏差1の正規乱数を生成します。hist()ヒストグラムを描きます。

問題5:中央値と四分位数

x <- rnorm(100)
median(x)
quantile(x)

解説: quantile() 関数で Q1, Q2(中央値), Q3 などの四分位数が得られます。

問題6:カテゴリデータの頻度表

gender <- c("M", "F", "F", "M", "M", "F", "F", "F")
table(gender)

解説: table() はベクトルのカテゴリ頻度を集計する関数です。

問題7:散布図と相関係数

問題: 指定した相関係数 r に従う2変量正規分布のデータを生成し、散布図を描き、実際の相関係数を確認せよ。

# 指定した相関係数 r
r <- 0.8

# サンプル数
n <- 100

# 独立な標準正規乱数
x <- rnorm(n)
noise <- rnorm(n, sd = sqrt(1 - r^2))

# 相関係数 r に基づく y の生成
y <- r * x + noise

# 散布図と相関係数
plot(x, y, main = paste("相関係数 r ≈", round(cor(x, y), 2)), xlab = "x", ylab = "y")
cor(x, y)

解説: y = r * x + noise という形で、標準正規乱数 x と独立ノイズを組み合わせることで、相関係数がおおよそ r となるデータを生成できます。cor(x, y) で実際の相関係数を確認します。

問題8:データのフィルタリング

df <- data.frame(name = c("A", "B", "C", "D"), score = c(45, 78, 88, 60))
subset(df, score >= 70)

解説: 条件で行を抽出するには subset() が便利です。代わりに df[df$score >= 70, ] も可。

問題9:\displaystyle{{ } _ 5 {\rm C} _ 2} 5!を計算せよ。

choose(5, 2)     # 組み合わせ
factorial(5)     # 順列

解説: 順列と組合せは choose()factorial() で簡単に求められます。

問題10:CSVファイルの作成と読み込み

問題: 自分でデータを含むCSVファイルを作成・保存し、それをRで読み込んで1列目の平均と標準偏差を求めよ。

# サンプルデータの作成と保存
values <- c(65, 70, 75, 80, 85)
data <- data.frame(score = values)
write.csv(data, file = "sample.csv", row.names = FALSE)

# 作成したCSVファイルの読み込み
loaded_data <- read.csv("sample.csv")

# 平均と標準偏差の計算
mean(loaded_data$score)
sd(loaded_data$score)

解説: write.csv() 関数でCSVファイルとしてデータを書き出し、そのファイルを read.csv() で再び読み込みます。列にアクセスして mean()sd() を使って基本統計量を計算します。read.csv() で読み込んだデータフレームの列にアクセスして平均・標準偏差を求めます。