🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
R

R言語は、「S言語」をオープンソースとして実装なおした、統計解析向けのプログラミング言語です。 計算がとても速くグラフィックも充実しているため、数値計算に向いています。 文法的には、統計解析部分はS言語を参考にしており、データ処理部分はSchemeの影響を受けています。 世界中の専門家が開発に関わり、日々新しい手法やアルゴリズムが追加されています。

Q&A

解決済

2回答

7477閲覧

近似直線の数式をplot画面内に表示したい。

KonbuKonbu

総合スコア7

R

R言語は、「S言語」をオープンソースとして実装なおした、統計解析向けのプログラミング言語です。 計算がとても速くグラフィックも充実しているため、数値計算に向いています。 文法的には、統計解析部分はS言語を参考にしており、データ処理部分はSchemeの影響を受けています。 世界中の専門家が開発に関わり、日々新しい手法やアルゴリズムが追加されています。

0グッド

0クリップ

投稿2019/10/31 16:31

編集2019/11/01 07:49

お世話になっております。
ggplot2を使わずに近似直線の数式をplot画面内に表示する方法が分からず、困っております。

R

1 2y1 = as.data.frame(read.csv("・・・.csv") 3 4x = y1[,"・・・"] 5y = y1[,"・・・"] 6lm.obj = lm(y~x) 7 8# 近似直線の相関係数と切片 9a = lm.obj[["coefficients"]][["x"]] 10b = lm.obj[["coefficients"]][["(Intercept)"]] 11 12plot(x,y) 13abline(lm.obj) 14

近似直線に使用する切片と相関係数がlm.objに入っていることは確認できました。

しかし、そこからmtext()関数を用いてplot画面内に「y = ax+b」の形で表記させ、
近似直線付近にどうやって配置させるのかが分かりません。

ご教授のほど、よろしくお願い致します。

///// 11月1日 16時49分追記 /////

@KojiDoi様から頂いたご回答と、下記のURLを参考にここまで進みました。

R

1 2y1 = as.data.frame(read.csv("・・・.csv")) 3x = y1[,"・・・"] 4y = y1[,"・・・"] 5 6lm.obj = lm(y~x) 7a = c(lm.obj[["coefficients"]][["x"]])       # a = -0.0014341 8b = c(lm.obj[["coefficients"]][["(Intercept)"]])  # b = 0.629453 9 10plot(x,y) 11abline(lm.obj) 12 13# https://cell-innovation.nig.ac.jp/surfers/R_scatter_plot.htmlを参考にR^2値を描画 14mtext(substitute(paste(R^2,"=",x),list(x=round(summary(lm.obj)$r.squared,digits=5))),line=-5,col=1,adj=0) 15 16# R^2値を参考に近似直線の数式を描画(失敗) 17text(20,0.7,expression(paste(y=a*x+b), 18 list(a=lm.obj[["coefficients"]][["x"]],digits=5, 19 b=lm.obj[["coefficients"]][["(Intercept)"]],digits=5)),col=2)

1101_質問

現在、困っている箇所が図中赤文字の部分です。

@KojiDoi様より頂いたご回答と参考URLより相関係数R^2値をlm.objから抽出し描画することができました。
ところが近似直線でも同様に行おうとすると、lm.objから上手く抽出できず、
プログラムの後半部分(list以降)がテキストとして認識され、プログラムの前半部分に重なって描画されてしまいます(図中赤文字)。

どうすればtext・espression関数内でオブジェクトを数式に与えれるのかが分かりません。
ご教授のほど、よろしくお願い致します。

参考URL
① 散布図に近似直線(回帰直線)を付ける - NGS Surfer's Wiki(https://cell-innovation.nig.ac.jp/surfers/R_scatter_plot.html)
➁ Rによる作図のアドバイス - 玉木一郎(https://www.agr.nagoya-u.ac.jp/~seitai/document/R_intro2008/R_intro2008presen2.pdf)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

@KojiDoi様より頂いたご回答より、無事質問が解決致しました。
自己解決では決してありませんが、この欄を利用して解決したプログラムを下記に記させて頂きます。

R

1options(digits=3) 2 3y1 = as.data.frame(read.csv("・・・.csv")) 4x = y1[,"・・・"] 5y = y1[,"・・・"] 6 7lm.obj = lm(y~x) 8a = c(lm.obj[["coefficients"]][["x"]]) 9b = c(lm.obj[["coefficients"]][["(Intercept)"]]) 10R2 = round(summary(lm.obj)$r.squared,digits=3) 11 12plot(x,y) 13abline(lm.obj,col=2,lwd=2) 14 15text(20,0.57,bquote(y==~.(a)*~x+.(b)~~~R^2==.(R2)),col=2)

近似直線の数式を描画する

参考URL
Rの数式描画の中で変数を展開したいときはbquoteを使う-Rプログラミングの小ネタ(http://tips-r.blogspot.com/2015/04/rbquote.html)

質問に答えて下さった@KojiDoi様、参考URLの皆様、ありがとうございました。

投稿2019/11/03 10:05

KonbuKonbu

総合スコア7

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

近似直線付近にどうやって配置

mtext()は「図の外」に字を書くための関数であり、グラフの中に位置指定して字を書くならtext()だと思います。

http://myopomme.hatenablog.com/entry/20111227/1324994940
http://cse.naro.affrc.go.jp/takezawa/r-tips/r/56.html

投稿2019/10/31 18:07

KojiDoi

総合スコア13692

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

KonbuKonbu

2019/11/01 07:52

ご回答ありがとうございます。 @KojiDoi様から頂いたご回答をもとに、質問に追記を致しましたので、 ご一考のほどお願い申し上げます。
KojiDoi

2019/11/02 14:49

aとbに具体的な数字を入れたいということでしょうか。それならbquote()が目的に合っているかもしれません。
KonbuKonbu

2019/11/03 09:52

bquote関数を使うことで、数式描画の中に変数を与えることができるのですね。 学ばせて頂きました。 無事質問が解決しました。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問