🏠 🔋C1 Laboratory
令和8年7月20日 (月)

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

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

🔚 品質管理 🏫 Web Class syllabus 53225 📆 🌸 🕧 時間割 🕐 13:00~14:30 🕝 ( 中示BFiles C1
このWeb資料は、テキストの持参を前提とする対面授業の参考にすることができます。 但し、Web資料の閲覧だけでは、授業の復習として不十分です。 資料は現状有姿のまま提供されます。不備な箇所も多々ありますが、ご了承ください。 また予告なく訂正・追加されることもありますので、ご了承ください。

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

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

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

標準偏差 σ管理するには、 データにして 記録しなければなりません。 それが測定です。 測定 には、必ず誤差が伴います。 そこで、統計的な取り扱いが必要になります。


身長に男女差はあるか?-有意差検定-

  2 身長に男女差はあるか?
番号 男子の身長 女子の身長
1 172 155
2 178 146
3 168 155
4 169 163
5 172 158
6 172 163
  3 統計量
項目 男子 女子
母平均 171.6 158
母標準偏差 6.1 5.8
標本数 6 6
総和 1031 940
二乗和 177221 147468
偏差平方和 60.8 201.3
自由度 5 5
標本平均 171.8 156.7
標本分散 12.2 40.3
標本標準偏差 3.5 6.3
d 15.2
ST 5.1
t 有意差? 5.1
F 有意差? 3.3

計量データの母平均の有意差の検定には、t検定を使います。母分散の有意差の検定には、F検定を使います。

ビールの喉越しのような官能検査については、順番付けとなどの数量化法を使って、計数データの検定を使ったりします。

データ 平方和

身長にと体重は相関があるか?-相関と回帰分析-

  4 身長にと体重は相関があるか?-相関と回帰分析-
番号 身長 身長**2 体重
1 171 2.9241 65
2 181 3.2761 49
3 174 3.0276 68
4 172 2.9584 51
5 169 2.8561 72
6 172 2.9584 79
7 168 2.8224 71
8 166 2.7556 66
  5 統計量
項目 身長 身長**2 x 体重y
母平均 171.6 65.4
母標準偏差 6.1 11.6
標本数 8 8
総和Sx,Sy ∑x,∑y 23.5787 521
二乗和 ∑x2,∑y2 69.67039523 34673
∑xy 1528.9634
偏差平方和Sxx,Syy i=1 n xi 2 - ( i=1 n xi ) 2 n 0.2 742.9
積和Sxy i=1 n xi yi - i=1 n xi i=1 n yi n ?
自由度 7 7
標本平均 2.9 65.1
標本分散 0.0 106.1
共分散 Sxy/(n-1)
標本標準偏差sx,sy sqr(Sxx/(n-1)),sqr(Syy/(n-1)) 0.2 10.3
相関係数r sxy/(sx*xy) ?
データ 平方和

相関と相関係数

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

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


散布図

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

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


散布図

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

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

👨‍🏫 QC7つ道具

回帰分析

  3 回帰分析
© K.Tachibana * , C1 Lab.

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

実データには、誤差があります。 滑らかな曲線でつなぐには、モデルとなる関数を仮定するのが一番です。 モデルとなる関数が見つからない場合は、補間することになります。

補間には多項式補間、スプライン補間、Bスプライン補間などがあります。

プロットタイプ

最小二乗法


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

# A4スライドの推奨設定
plt.rcParams['figure.figsize'] = [8 , 8 *math.sqrt(2)/2 ] # 8インチ白銀比
plt.rcParams['font.size'] = 16 # 16ポイント
plt.rcParams['lines.linewidth'] = 2 # 2ポイント

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

#適正体重 = (身長m)2 ×22.
x = np.random.normal(loc=sm, scale=ss, size=sn)
y = [ ((random.gauss(0, ss) * (1 - r * r) + r * (p - sm) + sm) /100) ** 2 * 22  for p in x]

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

fig, ax = plt.subplots()

ax.set_xlabel("height $h$ / cm")
ax.set_ylabel("weight $w$ / kg")

ax.scatter(x, y)
ax.axline((np.mean(x), np.mean(y)), slope=a)

# ■■■ 回帰分析 ■■■
© K.Tachibana * , C1 Lab.

米沢の最高気温の推移

  4 米沢の最高気温の推移
©2023-2026 K.Tachibana * , C1 Lab.

気象庁データ


予測分析


最小二乗法

  5 最小二乗法
©2023-2026 K.Tachibana * , C1 Lab.

信頼区間は、回帰直線の信頼区間です。 予測区間は、予測点の信頼区間です。 *


最小二乗法

# ■■■ 最小二乗法 ■■■
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
統計モデル、データ・マイニング技法、 機械学習 ビッグデータや データサイエンス データ・ソース トランザクションのデータベース、機器のログ・ファイル、画像、動画、センサーなどの

参考文献

🏫 品質管理
q71
品質管理

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

🏫 学問の自由 は、心の自由。 大学では、精神は自由であらねばならない。(松木健三)
📆 20251028 明日からやろう!インピーダンス測定・解析
名称:C1ラボラトリー
URL:🔗 https://c1.yz.yamagata-u.ac.jp/
管理運用
山形大学 工学部 化学・バイオ工学科 応用化学・化学工学コース
C1ラボラトリー ( 伊藤智博立花和宏 ) @ 米沢

© 2002 -2026 T.Ito , K.Tachibana * , C1 Lab. ALL RIGHTS RESERVED.