アプリ版:「スタンプのみでお礼する」機能のリリースについて

いつもこちらではお世話になっております。

媒介分析をするにあたり、相関係数を算出したいと思っています。

曜日 → 治療内容 → アウトカム

において、まず
 曜日 → アウトカム 
の関連を調べたいです。
(下記のようなデータです)
(do = 治療内容)
(Fri,Sat,Sunのいずれかに1が入り、他は0になります)
(do,outcomeは1 or 0の値をとります)

曜日(Fri,Sat,Sun)は名義尺度なのでこういった形をとりましたが、
曜日 → アウトカム
の相関係数の算出のやり方が分かりません。
(名義尺度ではなく、1~3位などの順位なら簡単なのですが)

実際のデータは数万行あります。
使用ソフトはRです。

よろしくお願いします。

Fri Sat Sun do outcome
1 0 0 1 1
1 0 0 1 1
1 0 0 1 1
0 1 0 0 1
0 1 0 0 1
0 0 1 0 1
0 0 1 0 0
0 0 1 1 0
0 0 1 1 0

質問者からの補足コメント

  • うれしい

    ちょっと仕事で忙しかった間に、たくさんのコメントありがとうございます。
    時間をかけて読ませていただき、ちゃんとお礼をさせていただきますので、少々お待ちください。

      補足日時:2023/03/22 15:43

A 回答 (14件中1~10件)

# テトラコリック相関



library(MASS)
library(polycor)

data <- data.frame(matrix(c(
1, 0, 0, 1, 1,
1, 0, 0, 1, 1,
1, 0, 0, 1, 1,
0, 1, 0, 0, 1,
0, 1, 0, 0, 1,
0, 0, 1, 0, 1,
0, 0, 1, 0, 0,
0, 0, 1, 1, 0,
0, 0, 1, 1, 0),
byrow = T, ncol = 5))

colnames(data) <- c("Fri", "Sat", "Sun", "do", "outcome")


# ggplot2を使用せずバブルチャートを描画する関数(共通)

plotsymbol <- function(name){
symbols(
w[,1:2], # 横・縦のプロット位置指定
circles = w[,3], # データ(大きさ)になる列の指定
inches = max(w[,3]) / 10, # バブルの大きさ感の指定
bg = "black", # バブルの色の設定
las = 1, # Y軸の字の向きを変更
cex.axis= 1, # 軸の数字の大きさを設定
cex.lab = 1, # 軸ラベルの字の大きさを設定
lwd = 2,
mgp = c(2.5,0.5,0), # 軸ラベル位置を近め調整デフォルト(3,1,0)
xlab = colnames(x)[1],
ylab = colnames(x)[2],
#xlim = c(1,4), # 他のグラフと同じ軸の両端にしたいとき
#ylim = c(1,5), # 〃
tck = 0, # 格子を入れる
main = name
)
}


par(mfrow = c(2, 2))

for(k in 1:4){
x <- data[, c(k, 5)]

z <- table(x) # 集計する
z
c <- range(as.numeric(x[, 1])) # 横軸のカテゴリ範囲
C <- range(as.numeric(x[, 2])) # 縦軸のカテゴリ範囲

# 座標値とウェイトに変更

w <- expand.grid(x = seq(c[1], c[2]), y = seq(C[1], C[2]))
w$z <- 0

for(i in 1:nrow(z)){
for(j in 1:ncol(z)){
index.x <- as.numeric(rownames(z)[i])
index.y <- as.numeric(colnames(z)[j])
w[w$x == index.x & w$y == index.y, 3] <- z[i, j]
}}


w[, 3] <- sqrt(w[, 3])

p <- polychor(x[, 1], x[, 2], ML = TRUE)

# バブルチャートの関数を呼び出し
plotsymbol(paste("ポリコリック相関 r=",round(p, digits = 3)))

}
    • good
    • 1
この回答へのお礼

コードまでありがとうございました。
分析のモデルは勉強しているのですが、Rは手段として用いているのでなかなか使い慣れません(自分のやりたい分析のみを調べて使っているので、根本的なこととかが分かっていないことが多いです)。
用語についてもありがとうございました。

お礼日時:2023/04/07 11:00

あと、調べていて分かったことですが、


バイシリアルは、library(ltm)のbiserial.cor()関数ですね。

私も勉強になりました。

で、やってみましたが、値がヘンですね。
    • good
    • 0

スピアマンの計算結果がピアソンと同じになるんだけど、私のRがヘン?



#1さんへのお礼で、ご質問者はどんなデータで計算されたんですか?
    • good
    • 0
この回答へのお礼

あ、私も再挑戦してみましたが、どうやってあの結果がでたのか分からなくなってしまいました(汗。
得られた結果も、私が記載したものとは別のものでしたし、、、なんだったのでしょう。。。。

お礼日時:2023/03/23 15:35

出力を添付し忘れました。



> stats::cor(data, method = c("spearman"))
Fri Sat Sun do outcome
Fri 1.0000000 -0.3779645 -0.6324555 0.6324555 0.5000000
Sat -0.3779645 1.0000000 -0.4780914 -0.5976143 0.3779645
Sun -0.6324555 -0.4780914 1.0000000 -0.1000000 -0.7905694
do 0.6324555 -0.5976143 -0.1000000 1.0000000 -0.1581139
outcome 0.5000000 0.3779645 -0.7905694 -0.1581139 1.0000000


> cor(data[, 1:3], data$outcome, method = "spearman")
[,1]
Fri 0.5000000
Sat 0.3779645
Sun -0.7905694
    • good
    • 0

蛇足ですが、


二値対二値:テトラコリック相関
多値対多値:ポリコリック相関
多値対連続値:ポリシリアル相関
と言いますが、ポリコリック相関で総称されます。

Rのライブラリ、library(polycor)のpolychor()関数で全てできます。



あと、#1さんへの質問は、私のスクリプト実行後に、

cor(data, method = "spearman")
あるいは、
cor(data[, 1:3], data$outcome, method = "spearman")

で相関係数行列が出来ますが(このサイトはスペースを勝手に消すのでガタガタですが・・・)、でも、ご質問者の結果と違う出力が出てしまいました。
    • good
    • 0

面積比例にしない方が、負相関のイメージは強く感じますね。

「ダミー変数での相関係数の算出にやり方(疫」の回答画像10
    • good
    • 2

#3です。



バブルの大きさを面積比例にすべく、

w[, 3] <- sqrt(w[, 3])

としましたが、大きさ比較として直感的じゃないので、その行をコメントアウトしてもらえれば、と思います。

このときは、「大きさ感の指定」を20で割って下さい。
すみません。自動調整じゃなくて・・・(汗)
チャットGPTに負けてるし。
    • good
    • 0

てか、チャットGPTって、あそこまで提示できるってことですか。


恐るべし。
    • good
    • 2

「ポイント・バイシリアル相関(point-biserial相関、双点対相関)」と言うべきところを「ポイントビスリアル」とか言ってるChatGPTに「お礼」したって無駄ですよ。

    • good
    • 3
この回答へのお礼

あ、あれはchatGPTだったのですね。
「ポイントビスリアル」とか、なんか変だなと思っていました。
ありがとうございます。

お礼日時:2023/03/22 15:41

曜日と治療の交互作用は、それらを掛け合わせ、両方1が立っているところだけ1にすれば良いですね。

それ以外は0です。

なお、その時は、交互作用は主効果(曜日単独とか治療単独の効果)と交絡しますので、主効果と併せた解析は出来ません。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!