🏠
🌡️ 📆 令和6年4月20日

🔷 予測解析-相関分析と回帰分析-

山形大学  理工学研究科(工学系)  化学・バイオ工学科  🔋 C1 📛 立花和宏

🔚 品質管理 🏫 Web Class syllabus 53225 📆 🌸 時間割 🕐 13:00~14:30 🕝 ( 中示BFiles C1

シックスシグマ(6σ)とDMAIC

  1 シックスシグマ(6σ)とDMAIC
フェーズ 内容 手法
Define(定義) 問題点、目標値、管理の理由を定義する 従属変数y 特性要因図パレート図
Mesure(測定、データ記録) 説明変数x yとxに関して測定データを記録 チェックシート
Analyze(解析、分析) yとxの関係を分析する。 ヒストグラム 散布図 相関分析回帰分析
Improve(改善) yを最良にするxを見つける 改善プラン を立てる 分散分析、統計的検定、 実験計画法
Control(管理) 改善プラン を計画的に 管理。 ポカヨケのしくみをつくる 管理図 1 ) 、ポカヨケ
QC7つ道具 *

シックス・シグマ の管理手法 で ばらつきをなくそう。 DMAIC ディマイク には、QC7つ道具も登場します。


相関と相関係数

  1 相関と相関係数
python (colab)→ pngsvghtml

相関分析は、 確率変数直線的な関係の程度の把握を目的とします 2 )


散布図

  2 散布図
アプリ言語 説明/ 記述例/プログラム例
python + matplotlib
plt.scatter(x, y, marker="x", alpha=0.5)
plt.show()
JavaScript Webアプリとして、 canvasに出力
asp サーバーサイドスクリプトとして として、 svgに出力
Google sheet * 挿入→グラフ→散布図
offce365/ Excel

散布図は、 データ の関係を表現するのに多様される プロットです。 論文の図表や、 講演のスライドにも使われます。


散布図

140150160170180180170160150140 親の身長 子の身長
  2 散布図

イギリスの遺伝学者であるゴルトン(Francis Galton、1822-1911)は、親と子どもの身長を分析し、非正常的に身長が大きい子どもと小さい子どもの身長は全人口の平均身長に回帰する傾向があることを見つけました。 * *


回帰分析

  3 回帰分析
©K.Tachibana

散布図は、 データ (実験結果)をグラフ化するのに、よく使います。 変化させた値と、測定結果の値の関係がわかりやすく、 相関を調べることができます 3 )


回帰分析

# ■■■ 回帰分析 ■■■
import numpy as np
import random
import matplotlib.pyplot as plt

sm = 157 
ss = 4.6 # 標準偏差(標本準偏差)
sn = 10 # 標本数(繰り返し数)
r = 0.5 #相関係数


x = np.random.normal(loc=sm, scale=ss, size=sn)
y = [ random.gauss(0, ss) * (1 - r * r) + r * (p - sm) + sm  for p in x]

a = np.cov(x, y)[0][1] / np.var(x)
b = np.mean(y) - a * np.mean(x)

x1 = np.arange(sm - ss*3 , sm + ss*3, ss*6)
y1 = b + a * x1  # 回帰曲線


plt.scatter(x, y)
plt.plot(x1, y1)

# ■■■ 回帰分析 ■■■


©K.Tachibana

予測分析


最小二乗法

  4 最小二乗法
©K.Tachibana

最小二乗法

# ■■■ 最小二乗法 ■■■
import numpy as np
import random
import matplotlib.pyplot as plt
from scipy.stats import t

smh = 158.4 # 平均(母平均):21才、女子身長
ssh = 4.5 # 標準偏差(母標準偏差):21才、女子身長

smw = 52.6 # 平均(母平均):21才、女子体重
ssw = 7.5 # 標準偏差(母平均):21才、女子体重

bmimw = 21 # 平均(母平均):20才台、女子BMI
bmisw = 2.9 # 標準偏差(母平均):20才台、女子BMI

sn = 2000 # 母数
en = 20 # 標本数
r = 0.5 #相関係数

# 17	158.4	4.5	16	52.6	7.5

h = np.random.normal(loc=smh, scale=ssh, size=sn)
h2w = [(p*p/10000, random.gauss(bmimw, bmisw) * p*p /10000) for p in h]
#BMI = w/h^2 = 22
#https://www.e-stat.go.jp/dbview?sid=0003224178

fig, ax = plt.subplots() # Figureオブジェクトとそれに属する一つのAxesオブジェクトを同時に作成

u,v = zip(*h2w)
A = np.vstack((np.array(u), np.ones(len(u)))).T
vv = np.array(v).T
uu, residuals, rank, s = np.linalg.lstsq(A, vv, rcond=None)
au = uu[0]
bu = uu[1]

#au = np.cov(u, v)[0][1] / np.var(u)
#bu = np.mean(v) - au * np.mean(u)
u1 = np.array([np.mean(u) - np.std(u)*3 , np.mean(u) + np.std(u)*3])
v1 = bu + au * u1  # 回帰曲線
ax.annotate("$w=$"+ "{:.1f}".format(au) + "$h^2+$" + "{:.1f}".format(bu)\
            ,xy = (np.mean(u) , np.mean(v))\
            ,xytext = (np.mean(u)+ np.std(u), np.mean(v)- 3*np.std(v))\
            ,arrowprops=dict(arrowstyle="->"))

x2y = random.sample(h2w, en) #無作為抽出
x,y = zip(*x2y)

A = np.vstack((np.array(x), np.ones(len(x)))).T
vv = np.array(y).T
uu, residuals, rank, s = np.linalg.lstsq(A, vv, rcond=None)
a = uu[0]
b = uu[1]
#a = np.cov(x, y)[0][1] / np.var(x)
#b = np.mean(y) - a * np.mean(x)
ax.annotate("$w=$"+ "{:.1f}".format(a) + "$h^2+$" + "{:.1f}".format(b)\
            ,xy = (np.mean(x) , np.mean(y))\
            ,xytext = (np.mean(x)+ np.std(x),np.mean(y)+ 3*np.std(y))\
            ,color="m",arrowprops=dict(arrowstyle="->"))

x1 = np.array([np.mean(x) - np.std(x)*3 , np.mean(x) + np.std(x)*3])
y1 = b + a * x1  # 回帰曲線
y_hat = [b + a * p for p in x]

alpha = 0.05 # 有意水準
n = len(x)
tvalue = t.ppf(1 - alpha / 2, n - 2) # 自由度n-2の時のt値(alphaを1/2することに注意)
ve = (np.sum(np.array(y) ** 2) - np.sum(np.array(y_hat) ** 2)) / (n - 2)
x_bar = np.mean(x)

conf = np.arange(np.mean(u) - np.std(u)*3 , np.mean(u) + np.std(u)*3, np.std(u)/16)
conf_hi = [b + a * p + tvalue * np.sqrt(1 / n + (p - x_bar) ** 2 / np.sum((x - x_bar) ** 2)) * ve for p in conf]
conf_lo = [b + a * p - tvalue * np.sqrt(1 / n + (p - x_bar) ** 2 / np.sum((x - x_bar) ** 2)) * ve for p in conf]

pred = np.arange(np.mean(x) - np.std(x)*3 , np.mean(x) + np.std(x)*3, np.std(x)/16)
pred_hi = [b + a * p + tvalue * np.sqrt(1 + 1 / n + (p - x_bar) ** 2 / np.sum((x - x_bar) ** 2)) * ve for p in pred]
pred_lo = [b + a * p - tvalue * np.sqrt(1 + 1 / n + (p - x_bar) ** 2 / np.sum((x - x_bar) ** 2)) * ve for p in pred]

ax.scatter(u,v,alpha=0.2)
ax.plot(u1,v1)
ax.plot(conf, conf_hi, 'k:', label='conf_95%')
ax.plot(conf, conf_lo, 'k:')
ax.fill_between(conf, conf_hi, conf_lo, facecolor='lightcoral', alpha=0.3)

ax.plot(pred, pred_hi, 'k:', label='pred_95%')
ax.plot(pred, pred_lo, 'k:')
ax.fill_between(pred, pred_hi, pred_lo, facecolor='lightgreen', alpha=0.2)

ax.scatter(x, y,color = "m")
ax.plot(x1, y1,color = "m")

ax.set_xlabel("Height$^2$ $h^2$ / m$^2$")
ax.set_ylabel("Weight $w$ / kg")

plt.show()

# ■■■ 最小二乗法 ■■■



©K.Tachibana
統計モデル、データ・マイニング技法、 機械学習 ビッグデータや データサイエンス データ・ソース トランザクションのデータベース、機器のログ・ファイル、画像、動画、センサーなどの

参考文献

🏫 品質管理


QRコード
https://edu.yz.yamagata-u.ac.jp/public/53225/53225_13.asp
名称: 教育用公開ウェブサービス
URL: 🔗 https://edu.yz.yamagata-u.ac.jp/
管理運用 山形大学 学術情報基盤センター

🎄🎂🌃🕯🎉
名称: サイバーキャンパス「鷹山」
URL: 🔗 http://amenity.yz.yamagata-u.ac.jp/
管理運用 山形大学 データベースアメニティ研究会
〒992-8510 山形県米沢市城南4丁目3-16

Copyright ©1996- 2024 Databese Amenity Laboratory of Virtual Research Institute,  Yamagata University All Rights Reserved.