#Rで求めた2つの回帰曲線との交点座標を求めたいです。
以下のようなcsvファイルデータから左と回答する確率(ans_left)と、右と回答する確率(ans_right)を、degを説明変数とするロジスティック回帰を求めました。
そこでそれら回帰曲線らの交点を求めたいです。
csv
1 imagename ans_left ans_direct ans_right direction deg 20 any_0_+20 0 0 1 0 20 31 any_0_-15 1 0 0 0 -15 42 any_+30_-5 0 1 0 30 -5 5...
- ans_left:左と回答したかどうか(0 or 1)←従属変数
- ans_right:右と回答したかどうか(0 or 1)←従属変数
- deg: 角度(-20~20) ←説明変数
- 赤曲線:glm()で求めたロジスティック回帰曲線1
- 緑曲線:glm()で求めたロジスティック回帰曲線2
- 青曲線: 1- 赤曲線 - 緑曲線
求めたいこと
- 赤曲線と青曲線の交点座標
- 緑曲線と青曲線の交点座標
- 青曲線の最大値とその座標
現在のコード
曲線をプロットすることは出来ましたが、交点座標の求め方がわかりません。
R
1HEAD_L = -30 2HEAD_D = 0 3HEAD_R = 30 4 5# plotする図のx軸(deg)の上下限 # 6xMin = -30 # x軸の下限 7xMax = +30 # x軸の上限 8 9 10# データの読み込み # 11df_long <- read.csv('log/gomi.csv',header=T) # 1列目(header)=列名(True) 12df_short <- read.csv('log/0826_2/0826_2_short.csv',header=T) 13 14# 関数宣言 # 15f_ansL <- function(ansData){ #ansData:列名"direction"の値=-30の行の、列3("ans_left"), 7("deg")のデータ 16 ans <- glm(ans_left~deg, data = ansData, family=binomial(logit)) 17 summary(ans) # 要約 18 return (ans) 19} 20 21f_ansR <- function(ansData){ #ansData:列名"direction"の値=-30の行の、列3("ans_left"), 7("deg")のデータ 22 ans <- glm(ans_right~deg, data = ansData, family=binomial(logit)) 23 summary(ans) # 要約 24 return (ans) 25} 26 27long_headL_ansL_data <- df_long[df_long$direction== HEAD_L, c(3,7)] # 列名"direction"の値=-30の行の、列3("ans_left"), 7("deg")の値を取得 # 列の値が条件を満たす行データだけ抽出 28long_headL_ansL = f_ansL(long_headL_ansL_data) 29 30long_headL_ansR_data <- df_long[df_long$direction== HEAD_L, c(5,7)] # 列名"direction"の値=-30の行の、列3("ans_left"), 7("deg")の値を取得 31long_headL_ansR = f_ansR(long_headL_ansR_data) 32 33 34 35y <- tapply(long_headL_ansL_data$ans_left, long_headL_ansL_data$deg, mean) 36x <- names(y) 37points(x, y,col=2) 38 39par(new = TRUE) # 図の重ね合わせを許可 40 41y_long_headL_ansR <- predict(long_headL_ansR, data.frame(deg), type = "response") 42plot(deg, y_long_headL_ansR, type = "l", xlim = c(xMin, xMax), ylim = c(0, 1), ann = F , col = 3) 43 44 45deg <- seq(xMin, xMax, length = 100) 46 47y_long_headL_ansL <- predict(long_headL_ansL, data.frame(deg), type = "response") 48png("logisticGlm0000.png") 49plot(deg, y_long_headL_ansL, type = "l", xlim = c(xMin, xMax), ylim = c(0, 1), xlab="direcion of gaze[deg]", ylab="Prop. of resposes", col = 2) 50 51 52y <- tapply(long_headL_ansR_data$ans_right, long_headL_ansR_data$deg, mean) 53x <- names(y) 54points(x, y,col=3) 55par(new = TRUE) # 図の重ね合わせを許可 56plot(deg, 1- y_long_headL_ansL - y_long_headL_ansR, type = "l", xlim = c(xMin, xMax), ylim = c(0, 1), ann = F , col = 4)
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。