データフレームから中央値を使った抽出の仕方
概要
最近は分析時にもベイズ的な観点を持って作業を行う事があり、
モデルを複数作成し、分析結果をbroomでデータフレームに保存し、
その中から各説明変数の評価を取り出したいと思った。
その際に、p.valueから適切なスコアを取り出したいと思ったが、
p値は最小値が0に収束していくのに対して、最大値は0.7などの値を取るため、
平均を取り出して評価すると説明変数を過小評価することになるため、
中央値を取り出すこととした。
だが中央値をsummariseで取り出してしまうと、それとペアとなっているestimateが取り出せないため、
事前にmedianで取り出したp値とイコールとなるp値を取り出そうとしてみるが、
変数の数が奇数であれば、中央値は一意に定まるが、偶数だと平均を作ってしまうため、
イコールで一意に定まらず、取り出せない事があったので、別の解を検討してみる。
使用していたライブラリ
- tidyverse
うまく行かなかったケース
broomed_DF %>%
group_by(term) %>% # 説明変数をグループ化する
mutate(median_pvalue = median(p.value)) %>%
filter(p.value == median_pvalue) # ここで想定したレコード数よりも減りすぎている
行ったこと
- filter時にround関数をかけてn桁までで一致するものを取り出そうとしてみるがうまくいかない
うまく行った方法
broomed_DF %>%
group_by(term) %>% # 説明変数をグループ化する
mutate(rank_pvalue = rank(p.value)) %>% # rank関数で整数の順序をつける
mutate(rank_median_pvalue = as.integer(median(rank_pvalue))) %>% # median関数で中央値を取り出すが、同時に整数にすることで偶数時にも一意にスコアを取り出せる
# この方法はどちらか片方に任意にすることには向いていないため、どちらでも大きく影響しないだろうというときに利用すると良い
filter(rank_pvalue == rank_median_pvalue) # すべての変数について中央値を抽出できる