質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.48%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

531閲覧

Python 近似線と決定係数の求め方

kouheichild

総合スコア18

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2018/09/20 07:46

前提・実現したいこと

Python初心者です.
とあるグラフを対数正規分布の累積分布関数で回帰したいのですが,やり方が分かりません.(近似線と決定係数が知りたいです)
大変恐縮ですがご教授いただけないでしょうか.

該当のソースコード

python

1import numpy as np 2import matplotlib.pyplot as plt 3x = np.array([ 2. , 6.5, 11.5, 16.5, 21.5, 26.5, 31.5, 36.5, 4 41.5, 46.5, 51.5, 56.5, 61.5, 66.5, 71.5, 76.5, 5 81.5, 86.5, 91.5, 96.5, 101.5, 106.5, 111.5, 116.5, 6 121.5, 126.5, 131.5, 136.5, 141.5, 146.5, 151.5, 156.5, 7 161.5]) 8y = np.array([ 0.15667842, 0.28985507, 0.51899726, 0.5738347 , 0.67175872, 9 0.75401488, 0.83039561, 0.8519389 , 0.90873482, 0.9204857 , 10 0.94007051, 0.95377987, 0.96748923, 0.96944771, 0.98315707, 11 0.98394046, 0.98472385, 0.98550725, 0.98707403, 0.98707403, 12 0.99294947, 0.99373286, 0.99373286, 0.99451626, 0.99529965, 13 0.99529965, 0.99921661, 0.99921661, 0.99921661, 0.99921661, 14 1. , 1. , 1. ]) 15 16plt.scatter(x,y)

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

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

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

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

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

guest

回答1

0

ベストアンサー

参考リンク

Pythonで非線形関数モデリング

決定係数R^2の計算はsklearnとかにあります。

sklearn.metrics.r2_score — scikit-learn 0.19.2 documentation

追記

やってみました。

python

1import numpy as np 2from scipy import stats 3from scipy.optimize import curve_fit 4import matplotlib.pyplot as plt 5 6def cdf(x, a, b, c): 7 return stats.lognorm.cdf(x, a, b, c) 8 9def main(): 10 # xとyが実際に観測されたデータ 11 # ここでは擬似データとしてs=1,loc=2,scale=3のscipy.stats.lognorm.cdfを作る。ノイズを適当に加算している 12 x = np.linspace(0, 100, 200) 13 y = stats.lognorm.cdf(x, 1,2,3) + np.random.normal(size=x.shape)*0.02 14 15 param, cov = curve_fit(cdf, x, y) # 推定 16 y_true = cdf(x, 1, 2, 3) 17 y_pred = cdf(x, *param) 18 print(param) # => [0.96029726 1.90694707 3.08647047] くらい 19 plt.plot(x, y, label="観測値") 20 plt.plot(x, y_true, label="真値") 21 plt.plot(x, y_pred, linestyle="-.", label="フィッティング") 22 plt.legend() 23 plt.show() 24 25if __name__ == "__main__": 26 main() 27

投稿2018/09/21 00:23

編集2018/09/21 11:37
hayataka2049

総合スコア30933

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

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

kouheichild

2018/09/21 09:08

hayataka2049 様 ご回答ありがとうございます. 一つ目のURLより,平均と分散が既知であれば近似線が引けそうだと感じました. まずは平均と分散を算出するところから始めたいと思います. ありがとうございます.
hayataka2049

2018/09/21 11:40

私もいまいちよくわかっていませんが、書いてみました
kouheichild

2018/09/22 05:04

hayataka2049 様 お忙しい中,お時間を割いていただきましてありがとうございます. まさに私が求めていたそのものでした.感無量です. もっとPythonの勉強を頑張りたいと思います. つまづいてしまってteratailを利用させていただく際には,どうかお答えいただけたら幸いです. ありがとうございました.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問