Skip to content

Instantly share code, notes, and snippets.

@hotchpotch
Created August 20, 2021 23:59
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save hotchpotch/87f5bdcbcf96cd8b0f8dab375d0e155c to your computer and use it in GitHub Desktop.
Save hotchpotch/87f5bdcbcf96cd8b0f8dab375d0e155c to your computer and use it in GitHub Desktop.
基本統計学_3章_練習問題.ipynb
Display the source blob
Display the rendered blob
Raw
{
"nbformat": 4,
"nbformat_minor": 0,
"metadata": {
"colab": {
"name": " 基本統計学_3章_練習問題.ipynb",
"provenance": [],
"collapsed_sections": [],
"toc_visible": true,
"authorship_tag": "ABX9TyNFv8AZzEO2nEosD6zhjTnY",
"include_colab_link": true
},
"kernelspec": {
"name": "python3",
"display_name": "Python 3"
},
"language_info": {
"name": "python"
}
},
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "view-in-github",
"colab_type": "text"
},
"source": [
"<a href=\"https://colab.research.google.com/gist/hotchpotch/87f5bdcbcf96cd8b0f8dab375d0e155c/-_3-_.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "NCytvwwbeczk"
},
"source": [
"# 基礎統計学 第4版 3章練習問題"
]
},
{
"cell_type": "code",
"metadata": {
"id": "yTvtDkn99_Hj"
},
"source": [
"from __future__ import annotations\n",
"\n",
"!pip install -q japanize-matplotlib\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"import japanize_matplotlib"
],
"execution_count": 39,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "cYnsDX_0Hu1d"
},
"source": [
"# 1.\n"
]
},
{
"cell_type": "code",
"metadata": {
"id": "l3dthcj6-Y9J"
},
"source": [
"\n",
"x = [1.2, 0.7, 1.5, 1.8, 0.5, 3.4, 1.0, 3.0, 2.8, 2.5]\n",
"y = [2.7, 2.4, 2.7, 3.3, 1.1, 5.8, 2.2, 4.2, 4.4, 3.8]\n",
"\n"
],
"execution_count": 40,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 279
},
"id": "z27FslP4HmSL",
"outputId": "7e638f62-386b-48e9-ed86-bfbcd842b25f"
},
"source": [
"#@title a) plot\n",
"\n",
"def plot(x, y, lines: None | list[tuple[float, float]]= None, xlabel=\"x\", ylabel=\"y\"):\n",
" plt.xlabel(xlabel)\n",
" plt.ylabel(ylabel)\n",
" plt.scatter(x=x, y=y, marker=\"x\")\n",
" if lines:\n",
" plt.plot(*zip(*lines), color=\"gray\")\n",
" plt.grid()\n",
" return plt\n",
"\n",
"plot(x, y, xlabel=\"広告費\", ylabel=\"利益\").show()\n"
],
"execution_count": 41,
"outputs": [
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
}
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 294
},
"id": "N-yPmOltHysL",
"outputId": "564bbc80-19e0-4462-a210-fa848a8e6408"
},
"source": [
"#@title b) 線形回帰とグラフplot\n",
"\n",
"def linear_regression(x, y) -> tuple(float, float):\n",
" \"\"\"\n",
" 線形回帰の、y = ax + b の a, b を返す\n",
" \"\"\"\n",
" assert len(x) == len(y)\n",
" n = len(x)\n",
" x = np.array(x)\n",
" y = np.array(y)\n",
" total_x = x.sum()\n",
" total_y = y.sum()\n",
" total_x_square = (x ** 2).sum()\n",
" total_y_square = (y ** 2).sum()\n",
" total_xy = (x * y).sum()\n",
" (b, a) = np.linalg.solve([\n",
" [n, total_x], [total_x, total_x_square]],\n",
" [total_y, total_xy]\n",
" )\n",
" return (a, b)\n",
"\n",
"(a, b) = linear_regression(x, y)\n",
"print(f\"回帰直線 y = {a:0.4}x + {b:0.4}\")\n",
"\n",
"predictor_1 = lambda x: a*x + b\n",
"lines = [(i, predictor_1(i)) for i in [0, 4]]\n",
"plot(x, y, xlabel=\"広告費\", ylabel=\"利益\", lines=lines).show()\n",
"\n"
],
"execution_count": 42,
"outputs": [
{
"output_type": "stream",
"text": [
"回帰直線 y = 1.249x + 0.9627\n"
],
"name": "stdout"
},
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
}
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "LuqjPX_MM78N",
"outputId": "99d72a7f-137a-4e9f-eb11-20be14c8e0ff"
},
"source": [
"#@title b) x=2 のときの推定利益\n",
"predictor_1(2)\n"
],
"execution_count": 43,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"3.459763313609468"
]
},
"metadata": {},
"execution_count": 43
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "pXEwI1vfOcwE"
},
"source": [
"# 2."
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "0Eznl8ZCOcY5",
"outputId": "c5ba48c8-a27a-4e54-a196-66d331264872"
},
"source": [
"def r2_score(x, y, ddof=0) -> float:\n",
" \"\"\"\n",
" x, y における決定係数 R二乗を求める\n",
" ddof=1 なら不偏分散\n",
" \"\"\"\n",
" (a, b) = linear_regression(x, y)\n",
" x = np.array(x)\n",
" y = np.array(y)\n",
" n = len(x)\n",
" \n",
" y_mean = sum(y) / n # y.mean() で出せるけど…\n",
" y_variance = ((y - y_mean) ** 2).sum() / (n-ddof)\n",
" y_std = np.sqrt(y_variance)\n",
"\n",
" s_y_x2 = ((y - (a*x + b)) ** 2).sum() / (n-ddof)\n",
" r_2 = 1 - (s_y_x2 / y_variance)\n",
" return r_2\n",
"\n",
"\n",
"x = [1,4,10,2,5,6,8,1]\n",
"y = [64,35,11,47,27,36,30,59]\n",
"\n",
"(a, b) = linear_regression(x, y)\n",
"print(f\"回帰直線 y = {a:0.4}x + {b:0.4}\")\n",
"r2 = r2_score(x, y)\n",
"print(f\"決定係数 R2 = {r2:0.4}\")"
],
"execution_count": 44,
"outputs": [
{
"output_type": "stream",
"text": [
"回帰直線 y = -4.891x + 61.25\n",
"決定係数 R2 = 0.8555\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "HAwP1G-DV0fn"
},
"source": [
"# 3."
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "QcJBvBKDV1u8",
"outputId": "3229c490-dc13-46f9-f136-9cce4c4a396f"
},
"source": [
"x = [1,2,3,4,4,5,5,6,6,7]\n",
"y = [4,5,6,5,6,8,7,10,11,10]\n",
"\n",
"(a, b) = linear_regression(x, y)\n",
"print(f\"回帰直線 y = {a:0.4}x + {b:0.4}\")\n",
"r2 = r2_score(x, y)\n",
"print(f\"決定係数 R2 = {r2:0.4}\")\n",
"print(f\"5日の貯蔵可能月数予想: {a*5 + b:0.4}\")"
],
"execution_count": 45,
"outputs": [
{
"output_type": "stream",
"text": [
"回帰直線 y = 1.165x + 2.19\n",
"決定係数 R2 = 0.813\n",
"5日の貯蔵可能月数予想: 8.016\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "ObZYXZc5XYag"
},
"source": [
"# 4."
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 278
},
"id": "jn_PhtqIXaSH",
"outputId": "0ce59364-5742-4fc8-fe05-f16f569d8e94"
},
"source": [
"#@title a) plot\n",
"x = [46,30,34,52,38,44,40,45,34,60]\n",
"y = [10,7,9,13,8,12,11,11,7,14]\n",
"\n",
"plot(x,y, xlabel=\"湿度\", ylabel=\"水分含有量\").show()\n"
],
"execution_count": 46,
"outputs": [
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
}
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 295
},
"id": "ZSZw-ujGZUtA",
"outputId": "b2e70587-9b39-4d4c-b0ff-500fc8ed3157"
},
"source": [
"#@title b) 回帰直線 + plot\n",
"(a, b) = linear_regression(x, y)\n",
"print(f\"回帰直線 y = {a:0.4}x + {b:0.4}\")\n",
"\n",
"predictor_4 = lambda x: a*x + b\n",
"lines = [(i, predictor_4(i)) for i in [28, 62]]\n",
"plot(x,y, xlabel=\"湿度\", ylabel=\"水分含有量\", lines=lines).show()\n"
],
"execution_count": 47,
"outputs": [
{
"output_type": "stream",
"text": [
"回帰直線 y = 0.2451x + -0.1689\n"
],
"name": "stdout"
},
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
}
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "xbFzjM1hag6E",
"outputId": "14adc2fc-cdb3-4f52-e0d7-6db7e1f65920"
},
"source": [
"#@title c) x=5の時\n",
"\n",
"print(f\"{predictor_4(50):0.4}\")\n"
],
"execution_count": 48,
"outputs": [
{
"output_type": "stream",
"text": [
"12.09\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "v5KFmEIcbiBh"
},
"source": [
"# 5."
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 277
},
"id": "emdJ1cBXbjb4",
"outputId": "55b20e06-9627-4c0d-a08a-9fe6815a7fa4"
},
"source": [
"#@title a) plot\n",
"\n",
"x = [30,25,50,38,20,70,35,24,60,45]\n",
"y = [80,80,45,70,96,20,50,90,25,50]\n",
"\n",
"plot(x,y, xlabel=\"時間\", ylabel=\"点数\").show()\n",
"\n"
],
"execution_count": 49,
"outputs": [
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
}
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 297
},
"id": "nk23DA6wb5ba",
"outputId": "5c3493c2-0d67-4f28-f803-560de1336a72"
},
"source": [
"#@title b) 回帰直線 + plot\n",
"(a, b) = linear_regression(x, y)\n",
"print(f\"回帰直線 y = {a:0.4}x + {b:0.4}\")\n",
"\n",
"predictor_5 = lambda x: a*x + b\n",
"lines = [(i, predictor_5(i)) for i in [18, 72]]\n",
"plot(x,y, xlabel=\"時間\", ylabel=\"点数\", lines=lines).show()\n"
],
"execution_count": 50,
"outputs": [
{
"output_type": "stream",
"text": [
"回帰直線 y = -1.548x + 122.1\n"
],
"name": "stdout"
},
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
}
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "3nX2G_3Jc2UJ",
"outputId": "2bd5beca-c0d5-4303-afd4-195d8a12122d"
},
"source": [
"#@title c) 決定係数 R2\n",
"\n",
"r2 = r2_score(x, y)\n",
"print(f\"決定係数 R2 = {r2:0.4}\")"
],
"execution_count": 51,
"outputs": [
{
"output_type": "stream",
"text": [
"決定係数 R2 = 0.9198\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "oDey9sHDc_G_"
},
"source": [
"# 6.\n"
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "B91gG_9sdLqC",
"outputId": "560af9d5-6b6a-4759-9769-7b063f953ae0"
},
"source": [
"#@title a) 回帰直線\n",
"\n",
"x = [19,15,9,10,11,19]\n",
"y = [31.7,32.3,8.5,14.3,14.0,17.8]\n",
"\n",
"(a, b) = linear_regression(x, y)\n",
"print(f\"回帰直線 y = {a:0.4}x + {b:0.4}\")"
],
"execution_count": 52,
"outputs": [
{
"output_type": "stream",
"text": [
"回帰直線 y = 1.566x + -1.891\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "M3Cmtyocdx7x",
"outputId": "7ca53df3-0b0c-4164-d75f-1d95300b56ab"
},
"source": [
"#@title b) x=12\n",
"\n",
"print(f\"{a*12 + b:0.4f}\")\n"
],
"execution_count": 53,
"outputs": [
{
"output_type": "stream",
"text": [
"16.8964\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "v8ZOBjPoeVV9"
},
"source": [
"# 7.\n",
"\n"
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "WZQMeI-YeyxB",
"outputId": "c6f3c948-5c9a-45bb-e537-e8c9a3b84f5a"
},
"source": [
"x = [262,247,298,367,75,194,123]\n",
"y = [14300,10200,16840,12050,8240,3650,2860]\n",
"\n",
"(a, b) = linear_regression(x, y)\n",
"print(f\"回帰直線 y = {a:0.4f}x + {b:0.4f}\")\n",
"r2 = r2_score(x, y)\n",
"print(f\"決定係数 R2 = {r2:0.4}\")"
],
"execution_count": 54,
"outputs": [
{
"output_type": "stream",
"text": [
"回帰直線 y = 34.9784x + 1909.1162\n",
"決定係数 R2 = 0.4582\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 277
},
"id": "4NL9xTxHfHtR",
"outputId": "347ec147-3ed8-4b77-ce81-e0357c890ea5"
},
"source": [
"#@title 決定係数が悪いグラフ\n",
"# 練習問題じゃないけど R2 が悪かったので plot してみる。\n",
"# なるほど決定係数が良くないと、予想もあまりあてはまらない。\n",
"predictor_7 = lambda x: a*x + b\n",
"lines = [(i, predictor_7(i)) for i in [0, 400]]\n",
"plot(x,y,lines=lines).show()\n"
],
"execution_count": 55,
"outputs": [
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
}
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "ZAYBWORSgaiJ"
},
"source": [
"# 8."
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 311
},
"id": "93ersyzTgYOg",
"outputId": "d9a8894a-55ac-4380-f3f7-bf213f6f7fdd"
},
"source": [
"x = [6,6.25,6.5,6.75,7,7.25,7.5,7.75,8]\n",
"y = [20,26,35,25,47,30,35,80,65]\n",
"\n",
"(a, b) = linear_regression(x, y)\n",
"print(f\"回帰直線 y = {a:0.4f}x + {b:0.4f}\")\n",
"r2 = r2_score(x, y)\n",
"print(f\"決定係数 R2 = {r2:0.4}\")\n",
"\n",
"predictor_8 = lambda x: a*x + b\n",
"lines = [(i, predictor_8(i)) for i in [5.75, 8.25]]\n",
"plot(x,y,lines=lines).show()"
],
"execution_count": 56,
"outputs": [
{
"output_type": "stream",
"text": [
"回帰直線 y = 23.1333x + -121.6000\n",
"決定係数 R2 = 0.6186\n"
],
"name": "stdout"
},
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
}
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "ytjkrr9MhhEF"
},
"source": [
"# 9."
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "qkrRGp0yguNq",
"outputId": "3e61676e-6e91-4b33-9162-3cce47d360bf"
},
"source": [
"#@title a)\n",
"x = [1,2,3,4,5]\n",
"y = [18,9,13,18,27]\n",
"(a, b) = linear_regression(x, y)\n",
"print(f\"回帰直線 y = {a:0.4f}x + {b:0.4f}\")"
],
"execution_count": 57,
"outputs": [
{
"output_type": "stream",
"text": [
"回帰直線 y = 2.7000x + 8.9000\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "NqvyfA8whfBJ",
"outputId": "6b9c4733-616a-46a5-83e0-cffb5ba732ce"
},
"source": [
"#@title b)\n",
"(c, d) = linear_regression(y, x)\n",
"print(f\"回帰直線 x = {c:0.4f}y + {d:0.4f}\")"
],
"execution_count": 58,
"outputs": [
{
"output_type": "stream",
"text": [
"回帰直線 x = 0.1484y + 0.4780\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 264
},
"id": "jczghZQqiCla",
"outputId": "898a350b-2880-4c4f-ccef-3de48bc21ded"
},
"source": [
"#@title c)\n",
"\n",
"predictor_9_x = lambda x: a*x + b\n",
"predictor_9_y = lambda y: c*y + d\n",
"\n",
"lines_x = [(i, predictor_9_x(i)) for i in [0, 5]]\n",
"lines_y = [(i, predictor_9_y(i)) for i in [0, 30]]\n",
"\n",
"plt.plot(*zip(*lines_x), color=\"blue\")\n",
"(lines_y_y, lines_y_x) = zip(*lines_y)\n",
"plt.plot(lines_y_x, lines_y_y, color=\"green\")\n",
"plt.show()\n"
],
"execution_count": 59,
"outputs": [
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
}
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "LBA_0MwQTG4F"
},
"source": [
"# 10. 重回帰"
]
},
{
"cell_type": "code",
"metadata": {
"id": "eTMpbmLjTI65"
},
"source": [
"def multiple_regression(x, y, z) -> tuple(float, float, float):\n",
" \"\"\"\n",
" 重回帰の y = b + ax + cz の a, b, c を返す。b が切片。\n",
" \"\"\"\n",
" assert len(x) == len(y) == len(z)\n",
" n = len(x)\n",
" x = np.array(x)\n",
" y = np.array(y)\n",
" z = np.array(z)\n",
" total_x = x.sum()\n",
" total_y = y.sum()\n",
" total_z = z.sum()\n",
" total_x_square = (x ** 2).sum()\n",
" total_y_square = (y ** 2).sum()\n",
" total_z_square = (z ** 2).sum()\n",
" total_xy = (x * y).sum()\n",
" total_xz = (x * z).sum()\n",
" total_zy = (z * y).sum()\n",
"\n",
" (b, a, c) = np.linalg.solve([\n",
" [n, total_x, total_z],\n",
" [total_x, total_x_square, total_xz],\n",
" [total_z, total_xz, total_z_square],\n",
" ],\n",
" [\n",
" total_y, total_xy, total_zy\n",
" ]\n",
" )\n",
" return (a, b, c)\n",
"\n"
],
"execution_count": 60,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "lsQKc2gncUAx"
},
"source": [
"def multiple_r2_score(x, y, z, ddof=0) -> float:\n",
" \"\"\"\n",
" x, y, z における y の決定係数 R2 を求める\n",
" ddof=1 なら不偏分散\n",
" \"\"\"\n",
" (a, b, c) = multiple_regression(x, y, z)\n",
" x = np.array(x)\n",
" y = np.array(y)\n",
" z = np.array(z)\n",
" n = len(x)\n",
" \n",
" y_mean = sum(y) / n # y.mean() で出せるけど…\n",
" y_variance = ((y - y_mean) ** 2).sum() / (n-ddof)\n",
" y_std = np.sqrt(y_variance)\n",
"\n",
" sy_xz_2 = ((y - (b + a*x + z*c)) ** 2).sum() / (n-ddof)\n",
" r_2 = 1 - (sy_xz_2 / y_variance)\n",
" return r_2\n",
"\n"
],
"execution_count": 61,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "FDFtJZMFX3E1",
"outputId": "c30a0fba-a724-4972-8df2-f8c34429c930"
},
"source": [
"#@title a)\n",
"\n",
"y = [8,10,5,9]\n",
"x = [3,6,2,1]\n",
"z = [3,4,2,3]\n",
"(a,b,c) = multiple_regression(x,y,z)\n",
"print(f\"b + ax + cz = {b:0.4f} + {a:0.4f}x + {c:0.4f}z\")\n",
"r2 = multiple_r2_score(x,y,z)\n",
"print(f\"決定係数 R2: {r2}\")"
],
"execution_count": 62,
"outputs": [
{
"output_type": "stream",
"text": [
"b + ax + cz = -1.0000 + -0.5000x + 3.5000z\n",
"決定係数 R2: 1.0\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "88yFM5gbe1Hs",
"outputId": "420f13cc-bf66-4336-c5b7-54c1f08d1fe3"
},
"source": [
"#@title b)\n",
"\n",
"y = [33,52,50,47,38]\n",
"x = [2,5,4,3,4]\n",
"z = [41,57,64,70,45]\n",
"(a,b,c) = multiple_regression(x,y,z)\n",
"print(f\"b + ax + cz = {b:0.4f} + {a:0.4f}x + {c:0.4f}z\")\n",
"r2 = multiple_r2_score(x,y,z)\n",
"print(f\"決定係数 R2: {r2}\")"
],
"execution_count": 63,
"outputs": [
{
"output_type": "stream",
"text": [
"b + ax + cz = 5.6012 + 3.8456x + 0.4432z\n",
"決定係数 R2: 0.9385406984016261\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "71Q8n4tSaihU",
"colab": {
"base_uri": "https://localhost:8080/"
},
"outputId": "6331593a-1956-4f33-afd2-918d0180fe75"
},
"source": [
"from sklearn.linear_model import LinearRegression\n",
"X = np.array(list(zip(x, z)))\n",
"reg = LinearRegression().fit(X, y)\n",
"print(reg.score(X, y))\n",
"print(reg.coef_)"
],
"execution_count": 64,
"outputs": [
{
"output_type": "stream",
"text": [
"0.9385406984016265\n",
"[3.8455857 0.44322496]\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "gf4oPlWIfdaE"
},
"source": [
"# 11."
]
},
{
"cell_type": "code",
"metadata": {
"id": "FsI3cDkkfdG4",
"colab": {
"base_uri": "https://localhost:8080/"
},
"outputId": "6399bf48-9a98-4183-e19f-e8666830cd52"
},
"source": [
"#@title a)\n",
"\n",
"y = [21,22,19,31,19,14,8,24,22,12]\n",
"x = [7,8,4,9,3,6,3,7,8,2]\n",
"z = [1,4,9,9,6,2,1,9,7,5]\n",
"\n",
"(a,b,c) = multiple_regression(x,y,z)\n",
"print(f\"b + ax + cz = {b:0.4f} + {a:0.4f}x + {c:0.4f}z\")\n"
],
"execution_count": 65,
"outputs": [
{
"output_type": "stream",
"text": [
"b + ax + cz = 3.7195 + 1.7989x + 0.9862z\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "dMS8a4gkiy6C",
"colab": {
"base_uri": "https://localhost:8080/"
},
"outputId": "6dccc155-ed7c-48bc-cc2b-52e1decb897f"
},
"source": [
"#@title b)\n",
"\n",
"def multi_variance(x, y, z, ddof=0) -> float:\n",
" \"\"\"\n",
" sy*(xz**2) の分散\n",
" \"\"\"\n",
" (a, b, c) = multiple_regression(x, y, z)\n",
" x = np.array(x)\n",
" y = np.array(y)\n",
" z = np.array(z)\n",
" n = len(x)\n",
" \n",
" y_mean = sum(y) / n # y.mean() で出せるけど…\n",
" y_variance = ((y - y_mean) ** 2).sum() / (n-ddof)\n",
" y_std = np.sqrt(y_variance)\n",
"\n",
" sy_xz_2 = ((y - (b + a*x + z*c)) ** 2).sum() / (n-ddof)\n",
" return sy_xz_2\n",
"\n",
"def multi_std(x, y, z, ddof=0):\n",
" return np.sqrt(multi_variance(x,y,z, ddof=0))\n",
"\n",
"print(multi_std(x,y,z))\n"
],
"execution_count": 66,
"outputs": [
{
"output_type": "stream",
"text": [
"2.3690804710817375\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "CZ45Vxpgi4Pq",
"colab": {
"base_uri": "https://localhost:8080/"
},
"outputId": "8b4b9f44-fb1e-4d95-9df6-a2a753c49a6c"
},
"source": [
"#@title c)\n",
"\n",
"(a,b) = linear_regression(x,y)\n",
"print(f\"b + ax = {b:0.4f} + {a:0.4f}x\")\n"
],
"execution_count": 67,
"outputs": [
{
"output_type": "stream",
"text": [
"b + ax = 7.3529 + 2.0784x\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "y5JyRHbAjKlq",
"colab": {
"base_uri": "https://localhost:8080/"
},
"outputId": "5c6312d1-6e2b-4e92-c920-45b0ef90f0d2"
},
"source": [
"#@title d)\n",
"\n",
"def single_variance(x, y, ddof=0) -> float:\n",
" \"\"\"\n",
" sy*(x**2) の分散\n",
" \"\"\"\n",
" (a, b) = linear_regression(x, y)\n",
" x = np.array(x)\n",
" y = np.array(y)\n",
" n = len(x)\n",
" \n",
" y_mean = sum(y) / n\n",
" y_variance = ((y - y_mean) ** 2).sum() / (n-ddof)\n",
" y_std = np.sqrt(y_variance)\n",
"\n",
" s_y_x2 = ((y - (a*x + b)) ** 2).sum() / (n-ddof)\n",
" return s_y_x2\n",
"\n",
"\n",
"def single_std(x, y, ddof=0):\n",
" return np.sqrt(single_variance(x,y,ddof=0))\n",
"\n",
"print(single_std(x,y))\n"
],
"execution_count": 68,
"outputs": [
{
"output_type": "stream",
"text": [
"3.7849029308660525\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "RFirHvgsk69d"
},
"source": [
"# 12"
]
},
{
"cell_type": "code",
"metadata": {
"id": "9NjAUVTkkm68",
"colab": {
"base_uri": "https://localhost:8080/"
},
"outputId": "e6c7fbc0-488f-4bd5-b9f7-0955e3d80080"
},
"source": [
"#@title a)\n",
"\n",
"y = [7,12,15,8,10,11,10,13,12,16]\n",
"x = [9,13,18,9,14,13,13,14,15,20]\n",
"z = [2,5,4,4,3,4,3,5,5,4]\n",
"\n",
"(a,b,c) = multiple_regression(x,y,z)\n",
"print(f\"b + ax + cz = {b:0.4f} + {a:0.4f}x + {c:0.4f}z\")\n"
],
"execution_count": 69,
"outputs": [
{
"output_type": "stream",
"text": [
"b + ax + cz = -1.3141 + 0.7063x + 0.7609z\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "s0BAs6hGlaPb",
"colab": {
"base_uri": "https://localhost:8080/"
},
"outputId": "3cf40cac-e1ff-4c00-ca16-6eec49f42e09"
},
"source": [
"#@title b)\n",
"\n",
"print(multi_std(x,y,z))\n"
],
"execution_count": 70,
"outputs": [
{
"output_type": "stream",
"text": [
"0.5443856033467414\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "iPU9icMwskh7",
"colab": {
"base_uri": "https://localhost:8080/"
},
"outputId": "57fcf1e0-4082-4d23-cb7a-43cb312aa11b"
},
"source": [
"#@title c)\n",
"\n",
"(a,b) = linear_regression(x,y)\n",
"print(f\"b + ax = {b:0.4f} + {a:0.4f}x\")\n"
],
"execution_count": 71,
"outputs": [
{
"output_type": "stream",
"text": [
"b + ax = 0.5795 + 0.7841x\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "rpcCpLG3sx-c",
"colab": {
"base_uri": "https://localhost:8080/"
},
"outputId": "8d2147b5-2cd6-4e3c-d482-8589a6caaeb3"
},
"source": [
"#@title d)\n",
"\n",
"print(single_std(x,y))\n"
],
"execution_count": 72,
"outputs": [
{
"output_type": "stream",
"text": [
"0.8647122485123434\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "RJkWuFeTt8z4"
},
"source": [
"# 13"
]
},
{
"cell_type": "code",
"metadata": {
"id": "C6kTk8MWuEcj",
"colab": {
"base_uri": "https://localhost:8080/"
},
"outputId": "89e25cd9-d966-4999-c61f-73ed7d149618"
},
"source": [
"import math\n",
"\n",
"n = 50\n",
"total_x = 3990\n",
"total_y = 4095\n",
"total_x_square = 323610\n",
"total_y_square = 338375\n",
"total_xy = 330450\n",
"(b, a) = np.linalg.solve([\n",
" [n, total_x], [total_x, total_x_square]],\n",
" [total_y, total_xy]\n",
" )\n",
"\n",
"print(f\"回帰直線 y = {a:0.4}x + {b:0.4}\")\n",
"\n",
"x_mean = total_x / n\n",
"y_mean = total_y / n\n",
"\n",
"# x の分散と偏差\n",
"x_variance = (total_x_square/n - (x_mean)**2)\n",
"x_std = math.sqrt(x_variance)\n",
"\n",
"# y の分散と偏差\n",
"y_variance = (total_y_square/n - (y_mean)**2)\n",
"y_std = math.sqrt(y_variance)\n",
"\n",
"# xy の共分散\n",
"xy_covariance = (total_xy/n) - (x_mean*y_mean)\n",
"\n",
"r = xy_covariance / (x_std*y_std)\n",
"print(f\"相関係数 R: {r:0.4f}\")\n",
"\n",
"# テキストに載っている回答の相関係数は 0.604 であわない…\n"
],
"execution_count": 73,
"outputs": [
{
"output_type": "stream",
"text": [
"回帰直線 y = 0.7045x + 25.68\n",
"相関係数 R: 0.9291\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "wRIqQUEk1qiv",
"colab": {
"base_uri": "https://localhost:8080/"
},
"outputId": "951ec3c9-c85f-41f8-840b-f010644fb223"
},
"source": [
"# ↑の相関係数の計算は合っているように思えるので、\n",
"# 表3.9 のデータでの相関係数を全く同じ計算で計算してみる\n",
"\n",
"x = [68,73,70,65, 85,59,92,78,60,75,83,74,84,77,80]\n",
"y = [52,58,63,55,88,60,85,60,55,70,75,50,85,68,78]\n",
"assert len(x), len(y)\n",
"n = len(x)\n",
"\n",
"total_x = sum(x)\n",
"total_y = sum(y)\n",
"total_x_square = (np.array(x) ** 2).sum()\n",
"total_y_square = (np.array(y) ** 2).sum()\n",
"total_xy = (np.array(x) * np.array(y)).sum()\n",
"\n",
"x_mean = total_x / n\n",
"y_mean = total_y / n\n",
"\n",
"# x の分散と偏差\n",
"x_variance = (total_x_square/n - (x_mean)**2)\n",
"x_std = math.sqrt(x_variance)\n",
"\n",
"# y の分散と偏差\n",
"y_variance = (total_y_square/n - (y_mean)**2)\n",
"y_std = math.sqrt(y_variance)\n",
"\n",
"# xy の共分散\n",
"xy_covariance = (total_xy/n) - (x_mean*y_mean)\n",
"\n",
"r = xy_covariance / (x_std*y_std)\n",
"print(f\"相関係数 R: {r:0.4f}\")\n",
"# この値は書籍の説明と一致した値。うーん。\n"
],
"execution_count": 74,
"outputs": [
{
"output_type": "stream",
"text": [
"相関係数 R: 0.8053\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "crcyPL0m5_ek"
},
"source": [
"# 14"
]
},
{
"cell_type": "code",
"metadata": {
"id": "zL24iFGk6B1r",
"colab": {
"base_uri": "https://localhost:8080/"
},
"outputId": "edad63c3-f94b-4089-d3f5-e2844cab3591"
},
"source": [
"\n",
"x = [56,42,72,36,63,47,55,49,38,42,68,60]\n",
"y = [147,125,160,118,149,128,150,145,115,140,152,155]\n",
"\n",
"assert len(x), len(y)\n",
"n = len(x)\n",
"\n",
"total_x = sum(x)\n",
"total_y = sum(y)\n",
"total_x_square = (np.array(x) ** 2).sum()\n",
"total_y_square = (np.array(y) ** 2).sum()\n",
"total_xy = (np.array(x) * np.array(y)).sum()\n",
"\n",
"(b, a) = np.linalg.solve([\n",
" [n, total_x], [total_x, total_x_square]],\n",
" [total_y, total_xy]\n",
" )\n",
"\n",
"print(f\"回帰直線 y = {a:0.4}x + {b:0.4}\")\n",
"\n",
"x_mean = total_x / n\n",
"y_mean = total_y / n\n",
"\n",
"# x の分散と偏差\n",
"x_variance = (total_x_square/n - (x_mean)**2)\n",
"x_std = math.sqrt(x_variance)\n",
"\n",
"# y の分散と偏差\n",
"y_variance = (total_y_square/n - (y_mean)**2)\n",
"y_std = math.sqrt(y_variance)\n",
"\n",
"# xy の共分散\n",
"xy_covariance = (total_xy/n) - (x_mean*y_mean)\n",
"\n",
"r = xy_covariance / (x_std*y_std)\n",
"print(f\"相関係数 R: {r:0.4f}\")\n",
"# この数値も相関係数はテキスト回答は0.876でちょっとずれている\n",
"# 一応numpyの実装でもチェック。こちらもテキスト回答と異なっていて、自分の回答とあっている。\n",
"np.corrcoef(x, y)\n"
],
"execution_count": 75,
"outputs": [
{
"output_type": "stream",
"text": [
"回帰直線 y = 1.138x + 80.78\n",
"相関係数 R: 0.8961\n"
],
"name": "stdout"
},
{
"output_type": "execute_result",
"data": {
"text/plain": [
"array([[1. , 0.89613936],\n",
" [0.89613936, 1. ]])"
]
},
"metadata": {},
"execution_count": 75
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "tmXt-UpS8E12"
},
"source": [
"# 15"
]
},
{
"cell_type": "code",
"metadata": {
"id": "zvRNw_Oy8KXa",
"colab": {
"base_uri": "https://localhost:8080/"
},
"outputId": "3b80b28f-65fa-4919-c713-1f1e4209d3cb"
},
"source": [
"A = [5,1,7,8,2,4,3,6]\n",
"B = [3,2,7,8,1,6,4,5]\n",
"C = [7,3,4,6,2,5,1,8]\n",
"\n",
"# 13. 14. で相関係数を求めてきたので、今回は手抜きで numpy で計算させる\n",
"ABC = np.array([A, B, C])\n",
"abc_coef = np.corrcoef(np.array([A, B, C]))\n",
"print(abc_coef)\n",
"print(f\"ABの相関係数:{ abc_coef[0][1]: 0.4f}\")\n",
"print(f\"ACの相関係数:{ abc_coef[0][2]: 0.4f}\")\n",
"print(f\"BCの相関係数:{ abc_coef[1][2]: 0.4f}\")\n",
"print(\"ABの相関は高い(判断が一致してる)、BCの相関は低い(大きく食い違ってる)\")"
],
"execution_count": 76,
"outputs": [
{
"output_type": "stream",
"text": [
"[[1. 0.85714286 0.64285714]\n",
" [0.85714286 1. 0.4047619 ]\n",
" [0.64285714 0.4047619 1. ]]\n",
"ABの相関係数: 0.8571\n",
"ACの相関係数: 0.6429\n",
"BCの相関係数: 0.4048\n",
"ABの相関は高い(判断が一致してる)、BCの相関は低い(大きく食い違ってる)\n"
],
"name": "stdout"
}
]
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment