{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "UuqQuj2nR2eI"
   },
   "source": [
    "**PhucLam_TKMT_Lab07**"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "3q93n_axPiqA"
   },
   "source": [
    "# Lab 07 - Bài tập"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "-QlG8TITPiqB"
   },
   "source": [
    "## Luyện tập"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "IzpHj9aePiqB"
   },
   "source": [
    "### Bài 1\n",
    "\n",
    "Trong thập niên 80, trọng lượng trung bình của thanh niên là 48 kg. Nay để xác định lại trọng lượng ấy, người ta chọn ngẫu nhiên 100 thanh niên đo trọng lượng trung bình là 50 kg và phương sai mẫu $s^2 = (10 kg)^2$. Thử xem trọng lượng thanh niên hiện nay phải chăng có thay đổi, với mức ý nghĩa là 1%?\n",
    "\n",
    "   _Đáp án. Trọng lượng thanh niên hiện nay không thay đổi so với trước kia._"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "executionInfo": {
     "elapsed": 619,
     "status": "ok",
     "timestamp": 1730218704113,
     "user": {
      "displayName": "Tài liệu IT - IUH",
      "userId": "00234609408062679612"
     },
     "user_tz": -420
    },
    "id": "VnWYqJJLPiqC",
    "outputId": "187d1a77-1203-4768-c2d6-bba387b742e1"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Giá trị thống kê kiểm định Z: 2.0\n",
      "Giá trị tới hạn Z: 2.5758293035489004\n",
      "Không bác bỏ giả thuyết H0: Không có bằng chứng để kết luận rằng trọng lượng trung bình của thanh niên hiện nay đã thay đổi.\n"
     ]
    }
   ],
   "source": [
    "import scipy.stats as stats\n",
    "import numpy as np\n",
    "\n",
    "# Dữ liệu\n",
    "mean_sample = 50  # Trọng lượng trung bình mẫu\n",
    "mean_population = 48  # Trọng lượng trung bình giả thuyết\n",
    "std_dev_sample = 10  # Độ lệch chuẩn mẫu\n",
    "n = 100  # Cỡ mẫu\n",
    "\n",
    "# Tính giá trị thống kê kiểm định Z\n",
    "z = (mean_sample - mean_population) / (std_dev_sample / np.sqrt(n))\n",
    "\n",
    "# Mức ý nghĩa\n",
    "alpha = 0.01\n",
    "\n",
    "# Tính giá trị tới hạn Z cho kiểm định hai phía\n",
    "z_critical = stats.norm.ppf(1 - alpha / 2)\n",
    "\n",
    "# So sánh và kết luận\n",
    "print(f\"Giá trị thống kê kiểm định Z: {z}\")\n",
    "print(f\"Giá trị tới hạn Z: {z_critical}\")\n",
    "\n",
    "if abs(z) > z_critical:\n",
    "    print(\"Bác bỏ giả thuyết H0: Trọng lượng trung bình của thanh niên hiện nay đã thay đổi.\")\n",
    "else:\n",
    "    print(\"Không bác bỏ giả thuyết H0: Không có bằng chứng để kết luận rằng trọng lượng trung bình của thanh niên hiện nay đã thay đổi.\")\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "9bYumLQkPiqC"
   },
   "source": [
    "### Bài 2\n",
    "\n",
    "Một cửa hàng thực phẩm nhận thấy thời gian vừa qua trung bình một khách hàng mua 25 ngàn đồng thực phẩm trong ngày. Nay cửa hàng chọn ngẫu nhiên 15 khách hàng thấy trung bình một khách hàng mua 24 ngàn đồng trong ngày và phương sai mẫu là $s^2$ =  (2 ngàn đồng $)^2$\n",
    "\n",
    "   Với mức ý nghĩa là 5%, kiểm định xem có phải sức mua của khách hàng hiện nay thực sự giảm sút hay không. Biết rằng sức mua của khách hàng có phân phối chuẩn.\n",
    "\n",
    "   _Đáp án. Sức mua của khách hàng hiện nay thực sự giảm sút_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "executionInfo": {
     "elapsed": 358,
     "status": "ok",
     "timestamp": 1730218982541,
     "user": {
      "displayName": "Tài liệu IT - IUH",
      "userId": "00234609408062679612"
     },
     "user_tz": -420
    },
    "id": "qg1igD3_Ew02",
    "outputId": "c7f9e342-4d71-4f7b-e9e1-021e7feb09c7"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(-1.9364916731037087, -1.6448536269514729, True)"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import scipy.stats as stats\n",
    "import numpy as np\n",
    "\n",
    "# Dữ liệu\n",
    "mean_sample = 24  # Trung bình mẫu\n",
    "mean_population = 25  # Trung bình giả thuyết\n",
    "std_dev_sample = 2  # Độ lệch chuẩn mẫu\n",
    "\n",
    "alpha = 0.05  # Mức ý nghĩa\n",
    "n = 15  # Cỡ mẫu\n",
    "\n",
    "# Tính giá trị thống kê kiểm định Z\n",
    "z = (mean_sample - mean_population) / (std_dev_sample / np.sqrt(n))\n",
    "\n",
    "# Mức ý nghĩa\n",
    "alpha = 0.05\n",
    "\n",
    "# Tính giá trị tới hạn Z cho kiểm định một phía\n",
    "z_critical = stats.norm.ppf(alpha)\n",
    "\n",
    "# So sánh và kết luận\n",
    "z, z_critical, abs(z) > z_critical\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "mY90-4Q5PiqD"
   },
   "source": [
    "### Bài 3\n",
    "\n",
    "Một máy sản suất tự động, lúc đầu tỷ lệ sản phẩm loại A là 20%. Sau khi áp dụng một phương pháp cải tiến sản xuất mới, người ta lấy 40 mẫu, mỗi mẫu gồm 10 sản phẩm đề kiểm tra. Kết quả kiểm tra cho ở bảng sau:\n",
    "\n",
    "| **Số sản phẩm loại A** |  1   |  2   |  3   |  4   |  5   |  6   |  7   |  8   |  9   |  10  |\n",
    "| ---------------------- | :--: | :--: | :--: | :--: | :--: | :--: | :--: | :--: | :--: | :--: |\n",
    "| **Số mẫu**             |  2   |  0   |  4   |  6   |  8   |  10  |  4   |  5   |  1   |  0   |\n",
    "\n",
    " Với mức ý nghĩa 5%. Hãy cho kết luận về phương pháp sản suất này.\n",
    "\n",
    " _Đáp án.Phương pháp cải tiến sản xuất mới thay đổi tỉ lệ sản phẩm loại A_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "id": "QaRF4lZpPiqD"
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "from scipy.stats import chisquare, binom\n",
    "\n",
    "# Dữ liệu từ bài toán\n",
    "observed_frequencies = [2, 0, 4, 6, 8, 10, 4, 5, 1, 0]  # Số mẫu\n",
    "total_samples = 40  # Tổng số mẫu\n",
    "\n",
    "# Xác suất lý thuyết của sản phẩm loại A (p) và cỡ mẫu mỗi lần kiểm tra (n)\n",
    "p_A = 0.2\n",
    "n = 10\n",
    "\n",
    "# Tính phân phối nhị thức lý thuyết cho từng số lượng sản phẩm loại A\n",
    "# Chỉ cần lấy 11 giá trị cho k từ 0 đến 10\n",
    "expected_frequencies = [total_samples * binom.pmf(k, n, p_A) for k in range(n + 1)]\n",
    "\n",
    "# Thực hiện kiểm định Chi-square\n",
    "# Kiểm tra tổng của cả hai mảng\n",
    "sum_observed = sum(observed_frequencies)\n",
    "sum_expected = sum(expected_frequencies)\n",
    "\n",
    "# In tổng để kiểm tra\n",
    "print(f\"Tổng số liệu quan sát: {sum_observed}\")\n",
    "print(f\"Tổng số liệu kỳ vọng: {sum_expected}\")\n",
    "\n",
    "# Thực hiện kiểm định Chi-square\n",
    "chi2_stat, p_value = chisquare(f_obs=observed_frequencies, f_exp=expected_frequencies)\n",
    "\n",
    "# Mức ý nghĩa\n",
    "alpha = 0.05\n",
    "\n",
    "# Kết luận\n",
    "is_significant = p_value < alpha\n",
    "\n",
    "# In kết quả\n",
    "print(f\"Chi-square statistic: {chi2_stat}\")\n",
    "print(f\"P-value: {p_value}\")\n",
    "print(f\"Reject null hypothesis: {is_significant}\")\n",
    "\n",
    "# Kết luận về phương pháp sản xuất\n",
    "if is_significant:\n",
    "    print(\"Kết luận: Phương pháp cải tiến sản xuất mới đã làm thay đổi tỉ lệ sản phẩm loại A.\")\n",
    "else:\n",
    "    print(\"Kết luận: Không có đủ bằng chứng để khẳng định phương pháp cải tiến sản xuất đã thay đổi tỉ lệ sản phẩm loại A.\")\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "nI7SqsXzPiqD"
   },
   "source": [
    "### Bài 4\n",
    "\n",
    "Tỷ lệ phế phẩm của một nhà máy trước đây là 5%. Năm nay nhà máy áp dụng một biện pháp kỹ thuật mới. Để nghiên cứu tác dụng của biện pháp kỹ thuật mới, người ta lấy một mẫu gồm 800 sản phẩm để kiểm tra và thấy có 24 phế phẩm.\n",
    "\n",
    "a. Với α = 0.01. Hãy cho kết luận về biện pháp kỹ thuật mới này?\n",
    "\n",
    "b. Nếu nhà máy báo cáo tỷ lệ phế phẩm sau khi áp dụng biện pháp kỹ thuật mới là\n",
    "2% thì có chấp nhận được không? (α = 0.01).\n",
    "\n",
    "_Đáp án. (a) Biện pháp kĩ thuật mới làm thay đổi tỉ lệ phế phẩm (b) Nhà máy báo cáo tỷ lệ phế phẩm là chấp nhận được._"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "executionInfo": {
     "elapsed": 369,
     "status": "ok",
     "timestamp": 1730219492030,
     "user": {
      "displayName": "Tài liệu IT - IUH",
      "userId": "00234609408062679612"
     },
     "user_tz": -420
    },
    "id": "xrugiSVpPiqD",
    "outputId": "4d9c7eb0-9532-49de-da70-184547210d6b"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Giá trị Z tính được: -2.595542738092201\n",
      "Giá trị tới hạn: ±2.5758293035489004\n",
      "Có từ chối giả thuyết null: True\n"
     ]
    }
   ],
   "source": [
    "import numpy as np\n",
    "from scipy.stats import norm\n",
    "\n",
    "# Thông số\n",
    "n = 800\n",
    "x = 24\n",
    "p_0 = 0.05\n",
    "alpha = 0.01\n",
    "\n",
    "# Tỷ lệ phế phẩm quan sát được\n",
    "p_hat = x / n\n",
    "\n",
    "# Tính thống kê kiểm định Z\n",
    "Z = (p_hat - p_0) / np.sqrt(p_0 * (1 - p_0) / n)\n",
    "\n",
    "# Tính giá trị tới hạn cho kiểm định hai phía\n",
    "z_critical = norm.ppf(1 - alpha / 2)\n",
    "\n",
    "# In kết quả\n",
    "print(f\"Giá trị Z tính được: {Z}\")\n",
    "print(f\"Giá trị tới hạn: ±{z_critical}\")\n",
    "\n",
    "# Kết luận\n",
    "reject_null = abs(Z) > z_critical\n",
    "print(f\"Có từ chối giả thuyết null: {reject_null}\")\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "executionInfo": {
     "elapsed": 347,
     "status": "ok",
     "timestamp": 1730219503357,
     "user": {
      "displayName": "Tài liệu IT - IUH",
      "userId": "00234609408062679612"
     },
     "user_tz": -420
    },
    "id": "bv7yNpOfHmSb",
    "outputId": "4c0d5d4f-4b7d-4ed3-e860-f2c8b298023d"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Giá trị Z mới tính được: 2.020305089104421\n",
      "Giá trị tới hạn cho tỷ lệ phế phẩm mới: ±2.5758293035489004\n",
      "Có từ chối giả thuyết null với tỷ lệ phế phẩm 2%: False\n"
     ]
    }
   ],
   "source": [
    "# Thông số mới\n",
    "p_new = 0.02\n",
    "\n",
    "# Tính thống kê kiểm định Z với tỷ lệ phế phẩm mới\n",
    "Z_new = (p_hat - p_new) / np.sqrt(p_new * (1 - p_new) / n)\n",
    "\n",
    "# Tính giá trị tới hạn cho kiểm định hai phía\n",
    "z_critical_new = norm.ppf(1 - alpha / 2)\n",
    "\n",
    "# In kết quả\n",
    "print(f\"Giá trị Z mới tính được: {Z_new}\")\n",
    "print(f\"Giá trị tới hạn cho tỷ lệ phế phẩm mới: ±{z_critical_new}\")\n",
    "\n",
    "# Kết luận\n",
    "reject_null_new = abs(Z_new) > z_critical_new\n",
    "print(f\"Có từ chối giả thuyết null với tỷ lệ phế phẩm 2%: {reject_null_new}\")\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "A7A1ZGafPiqD"
   },
   "source": [
    "## Kiểm định đặc trưng tỉ lệ (p)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "R_nthz98PiqE"
   },
   "source": [
    "### Bài 5\n",
    "\n",
    "Dataset 18 (__M&M__) chứa thông tin trọng lượng và màu sắc của mẫu các viên kẹo của hãng M&M.\n",
    "\n",
    "Sử dụng mẫu trên bạn hãy kiểm tra phát biểu sau: __\"20% kẹo M&M có màu đỏ\"__ với mức ý nghĩa là 5%\n",
    "\n",
    "*Hướng dẫn: tính tỷ lệ các viên kẹo có màu đỏ từ dữ liệu, sử dụng kết quả để kiểm định phát biểu trên*"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "executionInfo": {
     "elapsed": 408,
     "status": "ok",
     "timestamp": 1730219549970,
     "user": {
      "displayName": "Tài liệu IT - IUH",
      "userId": "00234609408062679612"
     },
     "user_tz": -420
    },
    "id": "VwtBJc4nPiqE",
    "outputId": "a421e23e-d080-4030-9918-1d0d07c8f654"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Số lượng kẹo màu đỏ: 50\n",
      "Tỷ lệ kẹo màu đỏ trong mẫu: 0.1667\n",
      "Giá trị Z tính được: -1.4434\n",
      "Giá trị tới hạn: ±1.9600\n",
      "Có từ chối giả thuyết null: False\n"
     ]
    }
   ],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "from scipy.stats import norm\n",
    "\n",
    "# Giả sử chúng ta đã tải dữ liệu M&M vào một DataFrame\n",
    "# Thay thế đường dẫn file dưới đây bằng đường dẫn đến file của bạn\n",
    "# df = pd.read_csv(\"path_to_m_and_m_data.csv\")\n",
    "\n",
    "# Để ví dụ, mình sẽ tạo một DataFrame mẫu\n",
    "# Giả sử rằng đây là thông tin màu sắc của kẹo M&M\n",
    "data = {'Color': ['Red', 'Yellow', 'Blue', 'Green', 'Brown', 'Orange'] * 50}  # 300 viên kẹo\n",
    "df = pd.DataFrame(data)\n",
    "\n",
    "# Bước 1: Tính số lượng kẹo màu đỏ và kích thước mẫu\n",
    "num_red = df[df['Color'] == 'Red'].shape[0]\n",
    "n = df.shape[0]\n",
    "\n",
    "# Bước 2: Tính tỷ lệ kẹo màu đỏ\n",
    "p_hat = num_red / n\n",
    "p_0 = 0.2  # Giả thuyết null\n",
    "\n",
    "# Bước 3: Tính thống kê kiểm định Z\n",
    "Z = (p_hat - p_0) / np.sqrt(p_0 * (1 - p_0) / n)\n",
    "\n",
    "# Bước 4: Tính giá trị tới hạn cho kiểm định hai phía\n",
    "alpha = 0.05\n",
    "z_critical = norm.ppf(1 - alpha / 2)\n",
    "\n",
    "# Kết quả\n",
    "print(f\"Số lượng kẹo màu đỏ: {num_red}\")\n",
    "print(f\"Tỷ lệ kẹo màu đỏ trong mẫu: {p_hat:.4f}\")\n",
    "print(f\"Giá trị Z tính được: {Z:.4f}\")\n",
    "print(f\"Giá trị tới hạn: ±{z_critical:.4f}\")\n",
    "\n",
    "# Kết luận\n",
    "reject_null = abs(Z) > z_critical\n",
    "print(f\"Có từ chối giả thuyết null: {reject_null}\")\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "WuxhXQGpPiqE"
   },
   "source": [
    "### Bài 6\n",
    "\n",
    "Dataset 3 (__FRESH15__) chứa thông tin khảo sát những thay đổi về trọng lượng (weight - WT) và chỉ số khối của cơ thể (BMI) của sinh viên năm nhất tại một trường Đại Học. Thời điểm khảo sát là bắt đầu học kỳ (tháng 9 - SEP) và kết thúc học kỳ (tháng 4 - APR), các sinh viên được chọn ngẫu nhiên trong trường.\n",
    "\n",
    "Sử dụng mẫu trên, hãy kiểm tra phát biểu:__\"50% số sinh viên trong trường là nam\"__ với mức ý nghĩa 50%\n",
    "\n",
    "Các thuộc tính trong bộ dữ liệu:\n",
    "- SEX: Giới tính\n",
    "- WTSEP: trọng lượng đo vào tháng 9 (mới nhập học)\n",
    "- WTAPR: trọng lượng đo vào tháng 4 (kết thúc năm học)\n",
    "- BMISP: BMI tháng 9\n",
    "- BMIAP: BMI tháng 4"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "executionInfo": {
     "elapsed": 4,
     "status": "ok",
     "timestamp": 1730219667917,
     "user": {
      "displayName": "Tài liệu IT - IUH",
      "userId": "00234609408062679612"
     },
     "user_tz": -420
    },
    "id": "B5_edNfPPiqE",
    "outputId": "1c57e881-2ade-44bb-a871-0ec1f327ae48"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Số lượng sinh viên nam: 150\n",
      "Tỷ lệ sinh viên nam trong mẫu: 0.5000\n",
      "Giá trị Z tính được: 0.0000\n",
      "Giá trị tới hạn: ±0.6745\n",
      "Có từ chối giả thuyết null: False\n"
     ]
    }
   ],
   "source": [
    "import pandas as pd\n",
    "from scipy.stats import norm\n",
    "\n",
    "# Bước 1: Tải dữ liệu từ file\n",
    "# Giả sử rằng dữ liệu nằm trong file CSV, bạn có thể thay đường dẫn sau\n",
    "# df = pd.read_csv(\"path_to_fresh15_data.csv\")\n",
    "\n",
    "# Để ví dụ, mình sẽ tạo một DataFrame mẫu\n",
    "# Giả sử rằng đây là thông tin giới tính của sinh viên\n",
    "data = {'SEX': ['Male', 'Female', 'Female', 'Male', 'Female', 'Male'] * 50}  # 300 sinh viên\n",
    "df = pd.DataFrame(data)\n",
    "\n",
    "# Bước 2: Tính số lượng sinh viên nam và kích thước mẫu\n",
    "num_male = df[df['SEX'] == 'Male'].shape[0]\n",
    "n = df.shape[0]\n",
    "\n",
    "# Bước 3: Tính tỷ lệ sinh viên nam\n",
    "p_hat = num_male / n\n",
    "p_0 = 0.5  # Giả thuyết null\n",
    "\n",
    "# Bước 4: Tính thống kê kiểm định Z\n",
    "Z = (p_hat - p_0) / ((p_0 * (1 - p_0) / n) ** 0.5)\n",
    "\n",
    "# Bước 5: Tính giá trị tới hạn cho kiểm định hai phía\n",
    "alpha = 0.50\n",
    "z_critical = norm.ppf(1 - alpha / 2)\n",
    "\n",
    "# Kết quả\n",
    "print(f\"Số lượng sinh viên nam: {num_male}\")\n",
    "print(f\"Tỷ lệ sinh viên nam trong mẫu: {p_hat:.4f}\")\n",
    "print(f\"Giá trị Z tính được: {Z:.4f}\")\n",
    "print(f\"Giá trị tới hạn: ±{z_critical:.4f}\")\n",
    "\n",
    "# Kết luận\n",
    "reject_null = abs(Z) > z_critical\n",
    "print(f\"Có từ chối giả thuyết null: {reject_null}\")\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "r9LdfuA_PiqE"
   },
   "source": [
    "## Kiểm định đặc trưng kỳ vọng ($\\mu$) biết ($\\sigma$)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "r4rWlB3rPiqE"
   },
   "source": [
    "### Bài 7\n",
    "\n",
    "Dataset 13 __(VOLTAGE)__ liệt kê các mức điện áp được đo tại các hộ gia đình bởi các máy đo khác nhau: tại nhà (HOME), tại máy phát độc lập (Generator), tại trạm phát (UPS).\n",
    "\n",
    "Công ty cung cấp điện cho vùng này cam kết rằng: __\"Mục tiêu cung cấp điện cho mỗi hộ gia đình là 120V\"__ . Biết rằng độ lệch chuẩn của tất cả các mức điện áp đo được là 0.24V.\n",
    "\n",
    "Với mức ý nghĩa 1%. Bạn hãy kiểm tra xem công ty có làm đúng cam kết hay không?"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "executionInfo": {
     "elapsed": 431,
     "status": "ok",
     "timestamp": 1730219718741,
     "user": {
      "displayName": "Tài liệu IT - IUH",
      "userId": "00234609408062679612"
     },
     "user_tz": -420
    },
    "id": "jva9xKWmPiqE",
    "outputId": "8f4938f0-04c8-4009-d7e7-b8c0c3cc999a"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Giá trị trung bình điện áp: 120.0700V\n",
      "Giá trị Z tính được: 2.9167\n",
      "Giá trị tới hạn: ±2.5758\n",
      "Có từ chối giả thuyết null: True\n"
     ]
    }
   ],
   "source": [
    "import pandas as pd\n",
    "from scipy.stats import norm\n",
    "\n",
    "# Bước 1: Tải dữ liệu từ file\n",
    "# Giả sử rằng dữ liệu nằm trong file CSV, bạn có thể thay đường dẫn sau\n",
    "# df = pd.read_csv(\"path_to_voltage_data.csv\")\n",
    "\n",
    "# Để ví dụ, mình sẽ tạo một DataFrame mẫu\n",
    "# Giả sử rằng đây là thông tin điện áp đo được\n",
    "data = {'Voltage': [120.1, 119.9, 120.2, 120.3, 119.8, 120.4, 120.0, 119.7, 120.1, 120.2] * 10}  # 100 đo lường\n",
    "df = pd.DataFrame(data)\n",
    "\n",
    "# Bước 2: Tính giá trị trung bình và kích thước mẫu\n",
    "mean_voltage = df['Voltage'].mean()\n",
    "n = df.shape[0]\n",
    "\n",
    "# Độ lệch chuẩn\n",
    "sigma = 0.24  # Đã biết\n",
    "\n",
    "# Bước 3: Tính thống kê kiểm định Z\n",
    "mu_0 = 120  # Giá trị trung bình theo giả thuyết null\n",
    "Z = (mean_voltage - mu_0) / (sigma / (n ** 0.5))\n",
    "\n",
    "# Bước 4: Tính giá trị tới hạn cho kiểm định hai phía\n",
    "alpha = 0.01\n",
    "z_critical = norm.ppf(1 - alpha / 2)\n",
    "\n",
    "# Kết quả\n",
    "print(f\"Giá trị trung bình điện áp: {mean_voltage:.4f}V\")\n",
    "print(f\"Giá trị Z tính được: {Z:.4f}\")\n",
    "print(f\"Giá trị tới hạn: ±{z_critical:.4f}\")\n",
    "\n",
    "# Kết luận\n",
    "reject_null = abs(Z) > z_critical\n",
    "print(f\"Có từ chối giả thuyết null: {reject_null}\")\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "xOtRbdPrPiqE"
   },
   "source": [
    "## Kiểm định đặc trưng kỳ vọng ($\\mu$) không biết ($\\sigma$)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "HQGi-6LJPiqE"
   },
   "source": [
    "### Bài 8\n",
    "\n",
    "Dataset 19(__SCREWS__) chứa thông tin khảo sát chiều dài một số đinh ốc được cung cấp bởi công ty Crown Bolt (đơn vị inches)\n",
    "\n",
    "Trên bao bì của các đinh ốc do công ty sản xuất có ghi chiều dài của các đinh ốc là 3/4 inches. Sử dụng mẫu trên bạn hãy cho biết chiều dài của đinh ốc lấy từ mẫu thu nhận được từ dữ liệu trên có nhất quán với chiều dài ghi trên bao bì hay không? Kiểm định với mức ý nghĩa 5%"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "executionInfo": {
     "elapsed": 377,
     "status": "ok",
     "timestamp": 1730219747302,
     "user": {
      "displayName": "Tài liệu IT - IUH",
      "userId": "00234609408062679612"
     },
     "user_tz": -420
    },
    "id": "lbVujTiBPiqE",
    "outputId": "7e9bddf6-3e0a-4e66-f373-87e363b64a80"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Giá trị trung bình chiều dài đinh ốc: 0.7490 inches\n",
      "Giá trị t tính được: -0.8760\n",
      "Giá trị tới hạn: ±1.9842\n",
      "Có từ chối giả thuyết null: False\n"
     ]
    }
   ],
   "source": [
    "import pandas as pd\n",
    "from scipy import stats\n",
    "\n",
    "# Bước 1: Tải dữ liệu từ file\n",
    "# Giả sử rằng dữ liệu nằm trong file CSV, bạn có thể thay đường dẫn sau\n",
    "# df = pd.read_csv(\"path_to_screws_data.csv\")\n",
    "\n",
    "# Để ví dụ, mình sẽ tạo một DataFrame mẫu\n",
    "# Giả sử rằng đây là thông tin chiều dài đinh ốc đo được\n",
    "data = {'Length': [0.74, 0.76, 0.75, 0.77, 0.74, 0.75, 0.73, 0.76, 0.75, 0.74] * 10}  # 100 đo lường\n",
    "df = pd.DataFrame(data)\n",
    "\n",
    "# Bước 2: Tính giá trị trung bình, độ lệch chuẩn và kích thước mẫu\n",
    "mean_length = df['Length'].mean()\n",
    "std_length = df['Length'].std(ddof=1)  # ddof=1 để tính độ lệch chuẩn mẫu\n",
    "n = df.shape[0]\n",
    "\n",
    "# Bước 3: Tính thống kê kiểm định t\n",
    "mu_0 = 0.75  # Giá trị trung bình theo giả thuyết null\n",
    "t_stat = (mean_length - mu_0) / (std_length / (n ** 0.5))\n",
    "\n",
    "# Bước 4: Tính giá trị tới hạn cho kiểm định hai phía\n",
    "alpha = 0.05\n",
    "df_t = n - 1  # Số bậc tự do\n",
    "t_critical = stats.t.ppf(1 - alpha / 2, df_t)\n",
    "\n",
    "# Kết quả\n",
    "print(f\"Giá trị trung bình chiều dài đinh ốc: {mean_length:.4f} inches\")\n",
    "print(f\"Giá trị t tính được: {t_stat:.4f}\")\n",
    "print(f\"Giá trị tới hạn: ±{t_critical:.4f}\")\n",
    "\n",
    "# Kết luận\n",
    "reject_null = abs(t_stat) > t_critical\n",
    "print(f\"Có từ chối giả thuyết null: {reject_null}\")\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "rK8NrudXPiqE"
   },
   "source": [
    "### Bài 9\n",
    "\n",
    "Dataset 2 __(BODYTEMP)__ chứa thông tin khảo sát nhiệt độ cơ thể từ một nhóm người vào cùng một thời điểm lúc 12h trưa.\n",
    "\n",
    "Có một phát biểu nói rằng, nhiệt độ cơ thể người đo lúc 12h trưa trong quần thể này là 98,6°\n",
    "\n",
    "Dựa vào mẫu trên, bạn hãy cho biết phát biểu trên đúng hay sai ở mức ý nghĩa là 5%."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "executionInfo": {
     "elapsed": 397,
     "status": "ok",
     "timestamp": 1730219868873,
     "user": {
      "displayName": "Tài liệu IT - IUH",
      "userId": "00234609408062679612"
     },
     "user_tz": -420
    },
    "id": "cKGtdrqmPiqE",
    "outputId": "134c76a3-a227-4d4b-e88f-8c098bbd8dae"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Giá trị trung bình nhiệt độ: 98.6300 °F\n",
      "Giá trị t tính được: 2.1054\n",
      "Giá trị tới hạn: ±1.9842\n",
      "Có từ chối giả thuyết null: True\n"
     ]
    }
   ],
   "source": [
    "import pandas as pd\n",
    "from scipy import stats\n",
    "\n",
    "# Bước 1: Tải dữ liệu từ file\n",
    "# Giả sử rằng dữ liệu nằm trong file CSV, bạn có thể thay đường dẫn sau\n",
    "# df = pd.read_csv(\"path_to_bodytemp_data.csv\")\n",
    "\n",
    "# Để ví dụ, mình sẽ tạo một DataFrame mẫu\n",
    "# Giả sử rằng đây là thông tin nhiệt độ cơ thể đo được\n",
    "data = {'Temperature': [98.7, 98.6, 98.5, 98.9, 98.6, 98.7, 98.6, 98.4, 98.5, 98.8] * 10}  # 100 đo lường\n",
    "df = pd.DataFrame(data)\n",
    "\n",
    "# Bước 2: Tính giá trị trung bình, độ lệch chuẩn và kích thước mẫu\n",
    "mean_temp = df['Temperature'].mean()\n",
    "std_temp = df['Temperature'].std(ddof=1)  # ddof=1 để tính độ lệch chuẩn mẫu\n",
    "n = df.shape[0]\n",
    "\n",
    "# Bước 3: Tính thống kê kiểm định t\n",
    "mu_0 = 98.6  # Giá trị trung bình theo giả thuyết null\n",
    "t_stat = (mean_temp - mu_0) / (std_temp / (n ** 0.5))\n",
    "\n",
    "# Bước 4: Tính giá trị tới hạn cho kiểm định hai phía\n",
    "alpha = 0.05\n",
    "df_t = n - 1  # Số bậc tự do\n",
    "t_critical = stats.t.ppf(1 - alpha / 2, df_t)\n",
    "\n",
    "# Kết quả\n",
    "print(f\"Giá trị trung bình nhiệt độ: {mean_temp:.4f} °F\")\n",
    "print(f\"Giá trị t tính được: {t_stat:.4f}\")\n",
    "print(f\"Giá trị tới hạn: ±{t_critical:.4f}\")\n",
    "\n",
    "# Kết luận\n",
    "reject_null = abs(t_stat) > t_critical\n",
    "print(f\"Có từ chối giả thuyết null: {reject_null}\")\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "ymZduUEdPiqE"
   },
   "source": [
    "### Bài 10\n",
    "\n",
    "Tìm hiểu z_test, t_test trong python"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "executionInfo": {
     "elapsed": 360,
     "status": "ok",
     "timestamp": 1730220078571,
     "user": {
      "displayName": "Tài liệu IT - IUH",
      "userId": "00234609408062679612"
     },
     "user_tz": -420
    },
    "id": "RfehxlTZPiqF",
    "outputId": "fc037a99-baf6-443a-a5c5-f886cb0d5224"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Giá trị Z: -0.2784\n",
      "Giá trị p: 0.7807\n"
     ]
    }
   ],
   "source": [
    "import numpy as np\n",
    "from scipy import stats\n",
    "\n",
    "# Dữ liệu mẫu\n",
    "data = [20, 21, 19, 22, 20, 21, 23, 22, 20, 21]\n",
    "\n",
    "# Giá trị trung bình theo giả thuyết null\n",
    "mu_0 = 21\n",
    "\n",
    "# Tính giá trị trung bình và độ lệch chuẩn\n",
    "mean = np.mean(data)\n",
    "std_dev = np.std(data, ddof=0)  # Độ lệch chuẩn của tổng thể\n",
    "\n",
    "# Kích thước mẫu\n",
    "n = len(data)\n",
    "\n",
    "# Tính giá trị Z\n",
    "z_score = (mean - mu_0) / (std_dev / np.sqrt(n))\n",
    "\n",
    "# Tính giá trị p\n",
    "p_value = 2 * (1 - stats.norm.cdf(abs(z_score)))\n",
    "\n",
    "print(f\"Giá trị Z: {z_score:.4f}\")\n",
    "print(f\"Giá trị p: {p_value:.4f}\")\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "executionInfo": {
     "elapsed": 379,
     "status": "ok",
     "timestamp": 1730220099691,
     "user": {
      "displayName": "Tài liệu IT - IUH",
      "userId": "00234609408062679612"
     },
     "user_tz": -420
    },
    "id": "VV1_LF6hJ3i1",
    "outputId": "cbfd2db5-9db8-4fe3-f75e-5df629d313d4"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Giá trị T: -0.2641\n",
      "Giá trị p: 0.7976\n"
     ]
    }
   ],
   "source": [
    "import numpy as np\n",
    "from scipy import stats\n",
    "\n",
    "# Dữ liệu mẫu\n",
    "data = [20, 21, 19, 22, 20, 21, 23, 22, 20, 21]\n",
    "\n",
    "# Giá trị trung bình theo giả thuyết null\n",
    "mu_0 = 21\n",
    "\n",
    "# Thực hiện One-sample T-test\n",
    "t_statistic, p_value = stats.ttest_1samp(data, mu_0)\n",
    "\n",
    "print(f\"Giá trị T: {t_statistic:.4f}\")\n",
    "print(f\"Giá trị p: {p_value:.4f}\")\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "executionInfo": {
     "elapsed": 372,
     "status": "ok",
     "timestamp": 1730220114331,
     "user": {
      "displayName": "Tài liệu IT - IUH",
      "userId": "00234609408062679612"
     },
     "user_tz": -420
    },
    "id": "ym-QeSqkJ7eE",
    "outputId": "fcae4f1d-599a-4ee4-8092-4e4d03b59e8a"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Giá trị T: -2.7735\n",
      "Giá trị p: 0.0242\n"
     ]
    }
   ],
   "source": [
    "import numpy as np\n",
    "from scipy import stats\n",
    "\n",
    "# Dữ liệu mẫu\n",
    "group1 = [20, 21, 19, 22, 20]\n",
    "group2 = [22, 23, 24, 21, 22]\n",
    "\n",
    "# Thực hiện Independent T-test\n",
    "t_statistic, p_value = stats.ttest_ind(group1, group2)\n",
    "\n",
    "print(f\"Giá trị T: {t_statistic:.4f}\")\n",
    "print(f\"Giá trị p: {p_value:.4f}\")\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "executionInfo": {
     "elapsed": 333,
     "status": "ok",
     "timestamp": 1730220121931,
     "user": {
      "displayName": "Tài liệu IT - IUH",
      "userId": "00234609408062679612"
     },
     "user_tz": -420
    },
    "id": "lXH61EGCJ8jt",
    "outputId": "8903a651-637b-428e-966c-c0ce53cdafc3"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Giá trị T: -2.1082\n",
      "Giá trị p: 0.1027\n"
     ]
    }
   ],
   "source": [
    "import numpy as np\n",
    "from scipy import stats\n",
    "\n",
    "# Dữ liệu mẫu trước và sau\n",
    "before = [20, 21, 19, 22, 20]\n",
    "after = [22, 23, 24, 21, 22]\n",
    "\n",
    "# Thực hiện Paired T-test\n",
    "t_statistic, p_value = stats.ttest_rel(before, after)\n",
    "\n",
    "print(f\"Giá trị T: {t_statistic:.4f}\")\n",
    "print(f\"Giá trị p: {p_value:.4f}\")\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "PQuBFEnQPiqF"
   },
   "source": [
    "---"
   ]
  }
 ],
 "metadata": {
  "colab": {
   "provenance": []
  },
  "kernelspec": {
   "display_name": "Python 3",
   "name": "python3"
  },
  "language_info": {
   "name": "python"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 0
}
