{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "import seaborn as sns\n",
    "from scipy import stats\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "       v131      v132      v133  v134\n",
      "0 -4.524858  0.579889  7.180352    15\n",
      "1  2.453333 -0.339670  6.720415     7\n",
      "2 -4.804977  3.298895  6.179200    11\n",
      "3 -0.664316  0.805015  7.302714     9\n",
      "4  7.296641  4.166122  7.505439     9\n"
     ]
    }
   ],
   "source": [
    "# Загрузка данных\n",
    "data = pd.read_excel('данные модуль 1.xlsx')\n",
    "\n",
    "# Предварительный просмотр данных\n",
    "print(data.head())\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "\n",
    "V1 = data['v131']\n",
    "V2 = data['v132']\n",
    "V3 = data['v133']\n",
    "V4 = data['v134']\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "[encoded data, 115476 characters]",
      "text/plain": [
       "<Figure size 1200x1000 with 4 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "\n",
    "fig, axs = plt.subplots(2, 2, figsize=(12, 10))\n",
    "\n",
    "sns.histplot(V1, kde=True, ax=axs[0, 0])\n",
    "axs[0, 0].set_title('Гистограмма V1')\n",
    "\n",
    "sns.histplot(V2, kde=True, ax=axs[0, 1])\n",
    "axs[0, 1].set_title('Гистограмма V2')\n",
    "\n",
    "sns.histplot(V3, kde=True, ax=axs[1, 0])\n",
    "axs[1, 0].set_title('Гистограмма V3')\n",
    "\n",
    "sns.histplot(V4, kde=True, ax=axs[1, 1])\n",
    "axs[1, 1].set_title('Гистограмма V4')\n",
    "\n",
    "plt.tight_layout()\n",
    "plt.show()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [],
   "source": [
    "def descriptive_stats(data):\n",
    "    stats_dict = {\n",
    "        'Объем выборки (n)': len(data),\n",
    "        'Среднее': np.mean(data),\n",
    "        'Медиана': np.median(data),\n",
    "        'Дисперсия': np.var(data, ddof=1),\n",
    "        'Стандартное отклонение': np.std(data, ddof=1),\n",
    "        'Коэффициент асимметрии': stats.skew(data),\n",
    "        'Коэффициент эксцесса': stats.kurtosis(data),\n",
    "        'Минимальное значение': np.min(data),\n",
    "        'Максимальное значение': np.max(data),\n",
    "        'Размах выборки': np.ptp(data),\n",
    "        'Нижняя квартиль (Q1)': np.percentile(data, 25),\n",
    "        'Верхняя квартиль (Q3)': np.percentile(data, 75),\n",
    "    }\n",
    "    return stats_dict\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Статистические характеристики V1:\n",
      "Объем выборки (n): 200\n",
      "Среднее: 3.042330651615597\n",
      "Медиана: 3.24236251866\n",
      "Дисперсия: 17.566849111278266\n",
      "Стандартное отклонение: 4.1912825138945555\n",
      "Коэффициент асимметрии: -0.10466907194323638\n",
      "Коэффициент эксцесса: -0.0038508159993266844\n",
      "Минимальное значение: -9.04243513703\n",
      "Максимальное значение: 13.9581583142\n",
      "Размах выборки: 23.00059345123\n",
      "Нижняя квартиль (Q1): 0.33781273369275\n",
      "Верхняя квартиль (Q3): 5.8620395763725\n",
      "\n",
      "Статистические характеристики V2:\n",
      "Объем выборки (n): 200\n",
      "Среднее: 1.0480258893092393\n",
      "Медиана: 1.12799311818\n",
      "Дисперсия: 3.933229643500426\n",
      "Стандартное отклонение: 1.9832371626964906\n",
      "Коэффициент асимметрии: -0.19789624679145457\n",
      "Коэффициент эксцесса: -0.18279648031150364\n",
      "Минимальное значение: -4.5922700602\n",
      "Максимальное значение: 5.57765925343\n",
      "Размах выборки: 10.16992931363\n",
      "Нижняя квартиль (Q1): -0.415424220853\n",
      "Верхняя квартиль (Q3): 2.4777878204975\n",
      "\n",
      "Статистические характеристики V3:\n",
      "Объем выборки (n): 200\n",
      "Среднее: 6.5195654172197\n",
      "Медиана: 6.464160536565\n",
      "Дисперсия: 0.7546047389961228\n",
      "Стандартное отклонение: 0.8686798829235789\n",
      "Коэффициент асимметрии: 0.019544398868115844\n",
      "Коэффициент эксцесса: -1.2254735902540985\n",
      "Минимальное значение: 5.00216182551\n",
      "Максимальное значение: 7.99016901628\n",
      "Размах выборки: 2.9880071907700003\n",
      "Нижняя квартиль (Q1): 5.7534552626524995\n",
      "Верхняя квартиль (Q3): 7.271182201435\n",
      "\n",
      "Статистические характеристики V4:\n",
      "Объем выборки (n): 200\n",
      "Среднее: 10.525\n",
      "Медиана: 11.0\n",
      "Дисперсия: 9.949120603015075\n",
      "Стандартное отклонение: 3.1542226622442295\n",
      "Коэффициент асимметрии: 0.5104487794952168\n",
      "Коэффициент эксцесса: 1.9103281524427569\n",
      "Минимальное значение: 2\n",
      "Максимальное значение: 25\n",
      "Размах выборки: 23\n",
      "Нижняя квартиль (Q1): 8.75\n",
      "Верхняя квартиль (Q3): 12.0\n"
     ]
    }
   ],
   "source": [
    "\n",
    "stats_V1 = descriptive_stats(V1)\n",
    "stats_V2 = descriptive_stats(V2)\n",
    "stats_V3 = descriptive_stats(V3)\n",
    "stats_V4 = descriptive_stats(V4)\n",
    "\n",
    "\n",
    "print(\"Статистические характеристики V1:\")\n",
    "for k, v in stats_V1.items():\n",
    "    print(f\"{k}: {v}\")\n",
    "\n",
    "print(\"\\nСтатистические характеристики V2:\")\n",
    "for k, v in stats_V2.items():\n",
    "    print(f\"{k}: {v}\")\n",
    "\n",
    "print(\"\\nСтатистические характеристики V3:\")\n",
    "for k, v in stats_V3.items():\n",
    "    print(f\"{k}: {v}\")\n",
    "\n",
    "print(\"\\nСтатистические характеристики V4:\")\n",
    "for k, v in stats_V4.items():\n",
    "    print(f\"{k}: {v}\")\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Оценка μ для V2: 1.0480258893092393\n",
      "Оценка σ² для V2: 3.933229643500426\n"
     ]
    }
   ],
   "source": [
    "\n",
    "mu_V1 = np.mean(V2)\n",
    "sigma2_V1 = np.var(V2, ddof=1)\n",
    "print(f\"Оценка μ для V2: {mu_V1}\")\n",
    "print(f\"Оценка σ² для V2: {sigma2_V1}\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Оценка a для V3: 5.00216182551\n",
      "Оценка b для V3: 7.99016901628\n"
     ]
    }
   ],
   "source": [
    "a_V3 = np.min(V3)\n",
    "b_V3 = np.max(V3)\n",
    "print(f\"Оценка a для V3: {a_V3}\")\n",
    "print(f\"Оценка b для V3: {b_V3}\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Оценка λ для V4: 10.525\n"
     ]
    }
   ],
   "source": [
    "lambda_V3 = np.mean(V4)\n",
    "print(f\"Оценка λ для V4: {lambda_V3}\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Доверительный интервал для μ (V1): (0.40023447725624794, 1.6958173013622306)\n",
      "Доверительный интервал для σ² (V1): (3.198187050029381, 4.947452667095656)\n",
      "Доверительный интервал для λ (V3): (10.027178240238207, 11.022821759761793)\n"
     ]
    }
   ],
   "source": [
    "n_V1 = len(V1)\n",
    "alpha = 0.03  # 1 - γ\n",
    "t_crit = stats.t.ppf(1 - alpha/2, n_V1 - 1)\n",
    "SE_mu = stats.sem(V1)\n",
    "CI_mu_V1 = (mu_V1 - t_crit * SE_mu, mu_V1 + t_crit * SE_mu)\n",
    "print(f\"Доверительный интервал для μ (V1): {CI_mu_V1}\")\n",
    "chi2_lower = stats.chi2.ppf(alpha/2, n_V1 - 1)\n",
    "chi2_upper = stats.chi2.ppf(1 - alpha/2, n_V1 - 1)\n",
    "CI_sigma2_V1 = ((n_V1 - 1) * sigma2_V1 / chi2_upper, (n_V1 - 1) * sigma2_V1 / chi2_lower)\n",
    "print(f\"Доверительный интервал для σ² (V1): {CI_sigma2_V1}\")\n",
    "z_crit = stats.norm.ppf(1 - alpha/2)\n",
    "SE_lambda = np.sqrt(lambda_V3 / n_V1)\n",
    "CI_lambda_V3 = (lambda_V3 - z_crit * SE_lambda, lambda_V3 + z_crit * SE_lambda)\n",
    "print(f\"Доверительный интервал для λ (V3): {CI_lambda_V3}\")\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Статистика χ²: 1418738.7096036077\n",
      "Критическое значение χ²: 15.509089702796674\n",
      "Гипотеза о нормальном распределении для V1 отвергается.\n"
     ]
    }
   ],
   "source": [
    "observed_freq, bins = np.histogram(V1, bins='sturges')\n",
    "expected_freq = [n_V1 * (stats.norm.cdf(bins[i+1], mu_V1, np.sqrt(sigma2_V1)) - stats.norm.cdf(bins[i], mu_V1, np.sqrt(sigma2_V1))) for i in range(len(bins)-1)]\n",
    "\n",
    "chi_squared_stat = ((observed_freq - expected_freq) ** 2 / expected_freq).sum()\n",
    "df = len(bins) - 1 - 2  # число интервалов - 1 - число параметров\n",
    "chi_crit = stats.chi2.ppf(1 - alpha, df)\n",
    "\n",
    "print(f\"Статистика χ²: {chi_squared_stat}\")\n",
    "print(f\"Критическое значение χ²: {chi_crit}\")\n",
    "\n",
    "if chi_squared_stat < chi_crit:\n",
    "    print(\"Нет оснований отвергать гипотезу о нормальном распределении для V1.\")\n",
    "else:\n",
    "    print(\"Гипотеза о нормальном распределении для V1 отвергается.\")\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Статистика K-S: 0.38088487239010693\n",
      "P-значение: 1.354956591550158e-26\n",
      "Гипотеза о нормальном распределении для V1 отвергается.\n"
     ]
    }
   ],
   "source": [
    "ks_stat, p_value = stats.kstest(V1, 'norm', args=(mu_V1, np.sqrt(sigma2_V1)))\n",
    "print(f\"Статистика K-S: {ks_stat}\")\n",
    "print(f\"P-значение: {p_value}\")\n",
    "\n",
    "if p_value > alpha:\n",
    "    print(\"Нет оснований отвергать гипотезу о нормальном распределении для V1.\")\n",
    "else:\n",
    "    print(\"Гипотеза о нормальном распределении для V1 отвергается.\")\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Статистика t-теста: 6.082561360944136\n",
      "P-значение: 3.813205394708216e-09\n",
      "Гипотеза о равенстве средних X и Y отвергается.\n",
      "Статистика F-теста: 4.46626581804271\n",
      "Критические значения F: 0.7344284998995741, 1.3616029336235456\n",
      "Гипотеза о равенстве дисперсий X и Y отвергается.\n",
      "Статистика U-теста: 27125.0\n",
      "P-значение: 7.169589050726635e-10\n",
      "Гипотеза о равенстве распределений X и Y отвергается.\n"
     ]
    },
    {
     "ename": "AttributeError",
     "evalue": "module 'scipy.stats' has no attribute 'binom_test'",
     "output_type": "error",
     "traceback": [
      "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[1;31mAttributeError\u001b[0m                            Traceback (most recent call last)",
      "Cell \u001b[1;32mIn[30], line 42\u001b[0m\n\u001b[0;32m     39\u001b[0m n \u001b[38;5;241m=\u001b[39m n_positive \u001b[38;5;241m+\u001b[39m n_negative\n\u001b[0;32m     41\u001b[0m \u001b[38;5;66;03m# Используем биномиальный тест\u001b[39;00m\n\u001b[1;32m---> 42\u001b[0m p_value \u001b[38;5;241m=\u001b[39m \u001b[43mstats\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mbinom_test\u001b[49m(n_positive, n, \u001b[38;5;241m0.5\u001b[39m)\n\u001b[0;32m     43\u001b[0m \u001b[38;5;28mprint\u001b[39m(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mP-значение критерия знаков: \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mp_value\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m     45\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m p_value \u001b[38;5;241m>\u001b[39m alpha:\n",
      "\u001b[1;31mAttributeError\u001b[0m: module 'scipy.stats' has no attribute 'binom_test'"
     ]
    }
   ],
   "source": [
    "t_stat, p_value = stats.ttest_ind(V1, V2, equal_var=False)\n",
    "print(f\"Статистика t-теста: {t_stat}\")\n",
    "print(f\"P-значение: {p_value}\")\n",
    "\n",
    "if p_value > alpha:\n",
    "    print(\"Нет оснований отвергать гипотезу о равенстве средних X и Y.\")\n",
    "else:\n",
    "    print(\"Гипотеза о равенстве средних X и Y отвергается.\")\n",
    "\n",
    "f_stat = np.var(V1, ddof=1) / np.var(V2, ddof=1)\n",
    "df1 = len(V1) - 1\n",
    "df2 = len(V2) - 1\n",
    "f_crit_lower = stats.f.ppf(alpha/2, df1, df2)\n",
    "f_crit_upper = stats.f.ppf(1 - alpha/2, df1, df2)\n",
    "\n",
    "print(f\"Статистика F-теста: {f_stat}\")\n",
    "print(f\"Критические значения F: {f_crit_lower}, {f_crit_upper}\")\n",
    "\n",
    "if f_crit_lower < f_stat < f_crit_upper:\n",
    "    print(\"Нет оснований отвергать гипотезу о равенстве дисперсий X и Y.\")\n",
    "else:\n",
    "    print(\"Гипотеза о равенстве дисперсий X и Y отвергается.\")\n",
    "\n",
    "# Критерий Манна-Уитни\n",
    "u_stat, p_value = stats.mannwhitneyu(V1, V2, alternative='two-sided')\n",
    "print(f\"Статистика U-теста: {u_stat}\")\n",
    "print(f\"P-значение: {p_value}\")\n",
    "\n",
    "if p_value > alpha:\n",
    "    print(\"Нет оснований отвергать гипотезу о равенстве распределений X и Y.\")\n",
    "else:\n",
    "    print(\"Гипотеза о равенстве распределений X и Y отвергается.\")\n",
    "\n",
    "differences = V1[:len(V2)] - V2[:len(V1)]\n",
    "signs = np.sign(differences)\n",
    "n_positive = np.sum(signs > 0)\n",
    "n_negative = np.sum(signs < 0)\n",
    "n = n_positive + n_negative\n",
    "\n",
    "# Используем биномиальный тест\n",
    "p_value = stats.binom_test(n_positive, n, 0.5)\n",
    "print(f\"P-значение критерия знаков: {p_value}\")\n",
    "\n",
    "if p_value > alpha:\n",
    "    print(\"Нет оснований отвергать гипотезу о равенстве медиан X и Y.\")\n",
    "else:\n",
    "    print(\"Гипотеза о равенстве медиан X и Y отвергается.\")\n",
    "\n",
    "# Критерий Уилкоксона\n",
    "w_stat, p_value = stats.wilcoxon(V1[:len(V2)], V2)\n",
    "print(f\"Статистика W-теста: {w_stat}\")\n",
    "print(f\"P-значение: {p_value}\")\n",
    "\n",
    "if p_value > alpha:\n",
    "    print(\"Нет оснований отвергать гипотезу об однородности выборок X и Y.\")\n",
    "else:\n",
    "    print(\"Гипотеза об однородности выборок X и Y отвергается.\")\n"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.13"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
