データを可視化する

1ページ 2ページ

1週間の血圧測定

例)日常の臨床記録で見かける1週間のデータを統計学的に考えてみます。
以下のようなサンプルを使用します(架空のデータです)。患者Aさんの収縮期血圧を考えます。1週間(月曜日~土曜日)PT前後に血圧を測定したときの結果です。

月曜日, AM, 屋外歩行の前後で測定
火曜日, PM, 屋内歩行の前後で測定
水曜日, AM, 屋内歩行の前後で測定
木曜日, AM, 屋内歩行の前後で測定
金曜日, PM, 屋外歩行の前後で測定
土曜日, PM, 屋内歩行の前後で測定

このデータを見たときに、さてどう考えるか・・・ということです.毎日の状態を観察して、そのデータに潜む何かを掴むのです(観察研究).理学療法の世界でよく行われているランダム化や割付けを行わない研究なので、様々なバイアスが含まれています.

理学療法前後で変化があるか
曜日に何か関連はあるか
時間帯に何か関連はあるか
練習内容に何か関連はあるか

といった具合に、このデータだけでも4項目の考えるべき課題がありそうです.それでは実際に統計ソフトRを使いながら検証してみます.

データセットの作成

以下のプログラムをRにペーストします

R
pre <- c(112, 138, 124, 120, 136, 142)
post <- c(138, 139, 136, 130, 143, 140)
day <- c("月曜日", "火曜日", "水曜日", "木曜日", "金曜日", "土曜日")
time <- c("AM", "PM", "AM", "AM", "PM", "PM")
place <- c("屋外", "室内", "室内", "室内", "屋外", "室内")
data <- data.frame(pre, post, day, time, place)
print(data)

前後比較

各曜日の前後比較
R
# 描画領域を調整
par(mar = c(5, 4, 4, 6))  # 右側の余白を広げる (右側が8)

# preとpostを比較する棒グラフを作成
barplot(rbind(pre, post),
        beside = TRUE,
        names.arg = day,
        col = c("lightblue", "pink"),
        main = "preとpostの比較",
        xlab = "曜日",
        ylab = "")

# 凡例を右外に配置
legend("topright", 
       legend = c("pre", "post"),
       fill = c("lightblue", "pink"),
       xpd = TRUE,          # 描画領域外に凡例を描く
       inset = c(-0.2, 0.2))  # insetで右外に移動
経時変化
R
# 折れ線グラフの作成
plot(1:6, pre, type = "o", col = "blue", pch = 16, ylim = c(min(pre, post) - 10, max(pre, post) + 10),
     xaxt = "n", xlab = "曜日", ylab = "", main = "preとpostの比較 (折れ線グラフ)")
lines(1:6, post, type = "o", col = "red", pch = 16)

# x軸のラベルを追加
axis(1, at = 1:6, labels = day)

# 凡例を追加
legend("bottomright", legend = c("pre", "post"), col = c("blue", "red"), pch = 16, lty = 1)
前後比較
R
par(mar = c(5, 4, 4, 2)) 
# preとpostを比較する箱ひげ図の作成
# 箱ひげ図の作成
boxplot(pre, post,
        names = c("pre", "post"),
        col = c("lightblue", "pink"),
        main = "preとpostの比較 (箱ひげ図)",
        ylab = "")

# 平均値を計算
pre_mean <- mean(pre)
post_mean <- mean(post)

# 平均値を箱ひげ図に追加 (赤い点)
points(1, pre_mean, col = "red", pch = 19)  # preの平均
points(2, post_mean, col = "red", pch = 19) # postの平均
各曜日の前後比較
R
#余白調整
par(mar = c(5, 4, 4, 8)) 
# グラフの描画領域を設定
plot(c(1, 2), range(c(pre, post)), type = "n", 
     xlab = "歩行練習前後", ylab = "", 
     main = "各曜日のpreとpostの比較", 
     xaxt = "n")

# x軸のラベルを設定
axis(1, at = c(1, 2), labels = c("pre", "post"))

# パステルカラーの設定
colors <- c("#FFB3BA", "#FFDFBA", "#FFC3FF", "#BAFFC9", "#BAE1FF", "#DABFFF")   # パステルカラー

# 各曜日のデータを描画
for (i in 1:length(day)) {
  lines(c(1, 2), c(pre[i], post[i]), col = colors[i], lwd = 2)  # preとpostを線で結ぶ
  points(c(1, 2), c(pre[i], post[i]), col = colors[i], pch = 16)  # 点を追加
}


# 凡例を追加
legend(
  "topright",
  legend = day, col = colors,
  lty = 1, pch = 16,
  lwd = 2,
  xpd = TRUE, # 描画領域外に凡例を描く
  inset = c(-0.5, 0.2)
)
dayとplaceを考慮した比較
R
#余白調整
par(mar = c(5, 4, 4, 9)) 
# グラフの描画領域を設定
plot(c(1, 2), range(c(pre, post)), type = "n", 
     xlab = "歩行練習前後", ylab = "", 
     main = "屋内と屋外でのpreとpostの比較", 
     xaxt = "n")

# x軸のラベルを設定
axis(1, at = c(1, 2), labels = c("pre", "post"))

# 色分けの設定 (屋外と屋内)
colors <- c("blue", "red")  # 屋外を青、屋内を緑
color_map <- ifelse(place == "屋外", colors[1], colors[2])  # 各データの色を決定

# 各曜日に対応するポイントの形状を設定
shapes <- c(16, 15, 17, 18, 19, 4)  # 丸、四角、三角などの形状
shape_map <- setNames(shapes, day)  # 曜日と形状を対応付け

# 各曜日のデータを描画
for (i in 1:length(day)) {
  col <- color_map[i]  # 屋外か屋内で色を選択
  pch <- shape_map[day[i]]  # 曜日に対応する形状を取得
  lines(c(1, 2), c(pre[i], post[i]), col = col, lwd = 2)  # preとpostを線で結ぶ
  points(c(1, 2), c(pre[i], post[i]), col = col, pch = pch)  # 点を追加
}

# 凡例用ラベルを作成 (曜日と場所を組み合わせる)
legend_labels <- paste(day, "(", place, ")", sep = "")
# 凡例を追加
legend(
  "topright",
  legend = legend_labels, col = colors,
  lty = 1, pch = shapes,
  lwd = 2,
  xpd = TRUE, # 描画領域外に凡例を描く
  inset = c(-0.45, 0.2)
)

コメント欄 『間違い』や『分かりにくい部分』などのご意見もお寄せください

タイトルとURLをコピーしました