Files
COGMOD-HWI/HW04/hw4p2.ipynb
T

481 lines
1.1 MiB
Plaintext
Raw Normal View History

2025-04-14 22:39:28 -04:00
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Simulates a memory experiment (much like what we covered in class) and uses models to understand how people recognize words they've seen before\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"hit = yes to old item (correctly remember the word they saw)\n",
"miss = no to old item (forgot they saw the word before)\n",
"false alarm = yes to new (thought they saw a word they didnt)\n",
"correct reject = No to new item (correctly said a new word wasnt shown)"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Memory task results:\n",
"Hits: 13/15 (0.87)\n",
"Misses: 2/15 (0.13)\n",
"False Alarms: 2/15 (0.13)\n",
"Correct Rejections: 13/15 (0.87)\n"
]
}
],
"source": [
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"import pandas as pd\n",
"import stan\n",
"import arviz as az\n",
"\n",
"import nest_asyncio\n",
"nest_asyncio.apply()\n",
"\n",
"np.random.seed(2023)\n",
"\n",
"def simulate_memory_task(n_old, n_new, d_old=0.7, d_new=0.6, g=0.3):\n",
" \"\"\"Simulate data from a recognition memory task \"\"\"\n",
"\n",
" detections = np.random.binomial(n=1, p=d_old, size=n_old) #detect old items\n",
" hits = sum(detections + (1-detections) * np.random.binomial(n=1, p=g, size=n_old)) #hit or guess\n",
" misses = n_old - hits\n",
"\n",
" if d_new > 0: # 2HT model\n",
" detections = np.random.binomial(n=1, p=d_new, size=n_new)\n",
" false_alarms = sum((1-detections) * np.random.binomial(n=1, p=g, size=n_new))\n",
" else: # 1HT model\n",
" false_alarms = sum(np.random.binomial(n=1, p=g, size=n_new))\n",
" \n",
" correct_rejections = n_new - false_alarms\n",
" \n",
" return {\n",
" 'hits': int(hits),\n",
" 'misses': int(misses),\n",
" 'false_alarms': int(false_alarms),\n",
" 'correct_rejections': int(correct_rejections),\n",
" 'n_old': n_old,\n",
" 'n_new': n_new\n",
" }\n",
"\n",
"# Simulate data\n",
"n_old = 15\n",
"n_new = 15\n",
"data = simulate_memory_task(n_old=n_old, n_new=n_new)\n",
"\n",
"print(\"Memory task results:\")\n",
"print(f\"Hits: {data['hits']}/{data['n_old']} ({data['hits']/data['n_old']:.2f})\")\n",
"print(f\"Misses: {data['misses']}/{data['n_old']} ({data['misses']/data['n_old']:.2f})\")\n",
"print(f\"False Alarms: {data['false_alarms']}/{data['n_new']} ({data['false_alarms']/data['n_new']:.2f})\")\n",
"print(f\"Correct Rejections: {data['correct_rejections']}/{data['n_new']} ({data['correct_rejections']/data['n_new']:.2f})\")"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"model_1ht_code = \"\"\"\n",
"data {\n",
" int<lower=0> n_old; // Number of old items\n",
" int<lower=0> n_new; // Number of new items\n",
" int<lower=0> hits; // Number of hits\n",
" int<lower=0> misses; // Number of misses\n",
" int<lower=0> false_alarms; // Number of false alarms\n",
" int<lower=0> correct_rejections; // Number of correct rejections\n",
"}\n",
"\n",
"parameters {\n",
" real<lower=0, upper=1> d; // Detection parameter\n",
" real<lower=0, upper=1> g; // Guessing parameter\n",
"}\n",
"\n",
"model {\n",
" // Priors\n",
" d ~ beta(1, 1); // Uninformative prior\n",
" g ~ beta(1, 1); // Uninformative prior\n",
" \n",
" // Likelihood for old items\n",
" hits ~ binomial(n_old, d + (1-d) * g);\n",
" \n",
" // Likelihood for new items\n",
" false_alarms ~ binomial(n_new, g);\n",
"}\n",
"\n",
"generated quantities {\n",
" // Predicted counts\n",
" int<lower=0> pred_hits = binomial_rng(n_old, d + (1-d) * g);\n",
" int<lower=0> pred_misses = n_old - pred_hits;\n",
" int<lower=0> pred_false_alarms = binomial_rng(n_new, g);\n",
" int<lower=0> pred_correct_rejections = n_new - pred_false_alarms;\n",
"}\n",
"\"\"\"\n",
"model_2ht_code = \"\"\"\n",
"data {\n",
" int<lower=0> n_old; // Number of old items\n",
" int<lower=0> n_new; // Number of new items\n",
" int<lower=0> hits; // Number of hits\n",
" int<lower=0> misses; // Number of misses\n",
" int<lower=0> false_alarms; // Number of false alarms\n",
" int<lower=0> correct_rejections; // Number of correct rejections\n",
"}\n",
"\n",
"parameters {\n",
" real<lower=0, upper=1> d_old; // Detection parameter for old items\n",
" real<lower=0, upper=1> d_new; // Detection parameter for new items\n",
" real<lower=0, upper=1> g; // Guessing parameter\n",
"}\n",
"\n",
"model {\n",
" // Priors\n",
" d_old ~ beta(1, 1); // Uninformative prior\n",
" d_new ~ beta(1, 1); // Uninformative prior\n",
" g ~ beta(1, 1); // Uninformative prior\n",
" \n",
" // Likelihood for old items\n",
" hits ~ binomial(n_old, d_old + (1-d_old) * g);\n",
" \n",
" // Likelihood for new items\n",
" correct_rejections ~ binomial(n_new, d_new + (1-d_new) * (1-g));\n",
"}\n",
"\n",
"generated quantities {\n",
" // Predicted counts\n",
" int<lower=0> pred_hits = binomial_rng(n_old, d_old + (1-d_old) * g);\n",
" int<lower=0> pred_misses = n_old - pred_hits;\n",
" int<lower=0> pred_false_alarms = binomial_rng(n_new, (1-d_new) * g);\n",
" int<lower=0> pred_correct_rejections = n_new - pred_false_alarms;\n",
"}\n",
"\"\"\""
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Building...\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"Building: found in cache, done.Messages from stanc:\n",
"Warning: The parameter g has 3 priors.\n",
"Warning: The parameter d has 2 priors.\n",
"Sampling: 0%\n",
"Sampling: 25% (3000/12000)\n",
"Sampling: 50% (6000/12000)\n",
"Sampling: 75% (9000/12000)\n",
"Sampling: 100% (12000/12000)\n",
"Sampling: 100% (12000/12000), done.\n",
"Messages received during sampling:\n",
" Gradient evaluation took 2.5e-05 seconds\n",
" 1000 transitions using 10 leapfrog steps per transition would take 0.25 seconds.\n",
" Adjust your expectations accordingly!\n",
" Gradient evaluation took 2.8e-05 seconds\n",
" 1000 transitions using 10 leapfrog steps per transition would take 0.28 seconds.\n",
" Adjust your expectations accordingly!\n",
" Gradient evaluation took 5e-06 seconds\n",
" 1000 transitions using 10 leapfrog steps per transition would take 0.05 seconds.\n",
" Adjust your expectations accordingly!\n",
" Gradient evaluation took 5e-06 seconds\n",
" 1000 transitions using 10 leapfrog steps per transition would take 0.05 seconds.\n",
" Adjust your expectations accordingly!\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Building...\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"Building: found in cache, done.Messages from stanc:\n",
"Warning: The parameter g has 3 priors.\n",
"Warning: The parameter d_old has 2 priors.\n",
"Warning: The parameter d_new has 2 priors.\n",
"Sampling: 0%\n",
"Sampling: 25% (3000/12000)\n",
"Sampling: 50% (6000/12000)\n",
"Sampling: 75% (9000/12000)\n",
"Sampling: 100% (12000/12000)\n",
"Sampling: 100% (12000/12000), done.\n",
"Messages received during sampling:\n",
" Gradient evaluation took 9e-06 seconds\n",
" 1000 transitions using 10 leapfrog steps per transition would take 0.09 seconds.\n",
" Adjust your expectations accordingly!\n",
" Gradient evaluation took 9.1e-05 seconds\n",
" 1000 transitions using 10 leapfrog steps per transition would take 0.91 seconds.\n",
" Adjust your expectations accordingly!\n",
" Gradient evaluation took 8e-06 seconds\n",
" 1000 transitions using 10 leapfrog steps per transition would take 0.08 seconds.\n",
" Adjust your expectations accordingly!\n",
" Gradient evaluation took 1.2e-05 seconds\n",
" 1000 transitions using 10 leapfrog steps per transition would take 0.12 seconds.\n",
" Adjust your expectations accordingly!\n"
]
}
],
"source": [
"\n",
"stan_data = {\n",
" 'n_old': data['n_old'],\n",
" 'n_new': data['n_new'],\n",
" 'hits': data['hits'],\n",
" 'misses': data['misses'],\n",
" 'false_alarms': data['false_alarms'],\n",
" 'correct_rejections': data['correct_rejections']\n",
"}\n",
"\n",
"# Build and sample from the 1HT model\n",
"model_1ht = stan.build(model_1ht_code, data=stan_data)\n",
"fit_1ht = model_1ht.sample(num_chains=4, num_samples=2000, num_warmup=1000)\n",
"\n",
"# Build and sample from the 2HT model\n",
"model_2ht = stan.build(model_2ht_code, data=stan_data)\n",
"fit_2ht = model_2ht.sample(num_chains=4, num_samples=2000, num_warmup=1000)\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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2WaJRCKRSCSrkaKURCKRSCSSH4vf+q3f4u677+aqq67iT//0TwHYv38/t956K5dccglnnHHGo753586d/O7v/i5JknD11Vfzm7/5m9lz11xzTZa/9LznPY+Xvexl2XMf+MAHuPPOO9m2bRs33ngja9euBYRY9aY3vYmrr776hMu77rrreO9738vIyAhf/epXueSSS1atyytf+Uo+8IEP8KIXvYgXvehFP9H38uNw9dVXc/vtt/Pc5z73uOcuv/xyXve613Huueeuenx+fp5XvvKVfO1rX+M//uM/+NVf/dXsuV6vx6tf/Wrm5uZ4y1vewsc+9jFKpVL2fKvVOi7r613vehc333wzv/iLv8i//uu/Mj4+nj33D//wD7z3ve/ljW98I7t3735cB9zJcM011+B5HnByQfuf+MQnuPrqqxkdHeWGG27I3pMkCR/60If40Ic+xK//+q+zb98+xsbGsvy0fqbXI3Ot+vzlX/4lQRDw+c9/nje/+c2rnmu1Wuzevfsn3VSJRCKRSCSPgizfk0gkEonkKcyHPvShVSVHj/z3//7f/3vS1u3Xfu3XKBQKXHXVVSRJAhwt5+uX9z0aV155JWEY8ku/9EurBCmAV7ziFbzzne8E4CMf+Uj2uOM4fOITnwDg7//+7zNBCqBQKPDxj3+cXC53wuV94AMfIEkSPv7xj68SpACe/vSn83d/93cAj9pN8InmD/7gD04oSIEIi3+kIAWwdu1a/s//+T+AKJk8lk9/+tPMzMxwwQUX8JnPfGaVIAUi0+mlL31p9vfu3bv50pe+xNq1a/niF7+4SpAC+L3f+z1e+cpXsn///hOW/f0oVKtVvvSlL2X7yAUXXHBSQuBHP/pRAP7sz/5slYilKAof+MAHOO+882g2m3zqU5/6kdZnaWkJgFe+8pXHPTcwMPCov4tEIpFIJJKfHOmUkkgkEonkKcz555//mC6S2267jYMHD566FTqGSqXC61//ej73uc9x8803c8kll3D11VdTLpdXuXZOxM033wzAFVdcccLnf+u3fot/+qd/4tZbbyWKIjRN4/7776fT6TA6OpqVaB3L5OQkL3/5y/nWt7616vFqtcrdd99NPp/n1a9+9QmX13fQ3HHHHY+90U8Qv/Irv/KYz3uex/XXX88999zD8vIynueRJAmdTgeAvXv3rnr9tddeC4jv8WRcTd/97ndJkoRXvOIVlMvlE77m0ksv5bvf/S533HEHv/iLv3gym5Vx2WWXnfDxiy66iK997WuP2wBgdnY228/f+ta3Hve8oii87W1v473vfS833XQT73//+0963Z797Gfz8MMP8+Y3v5n3v//9PPe5z0XX5S2yRCKRSCSnAnnFlUgkEonkKUy/jO3RuOKKK540UQqEI+pzn/scn/nMZ7Btm/n5ed7xjndQKBQe831zc3MAbNmy5YTPb926FQDXdanVaoyPjzM7OwuIgOxH40Sfd/jwYZIkwXGcx80uWllZecznnygea5vuvPNO3vjGNz5mkHu73V7195EjRwDYtm3bSS3/0KFDgMgD62eCPRo/znd0bJ6TZVmsXbuWF77whVn4+OPR319GRkaoVConfE1/n+m/9mT567/+ax588EGuueYarrnmGvL5PBdddBGXXnopb37zmzn77LN/pM+TSCQSiURy8khRSiK
"text/plain": [
"<Figure size 1200x800 with 12 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAABKUAAAMVCAYAAACm0EewAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjEsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvc2/+5QAAAAlwSFlzAAAPYQAAD2EBqD+naQABAABJREFUeJzs/Xe8HHd9748/p2/f08/RUW+25V4wxuAigzEYgoFAIPeSYEMIhOQm3LQbwg3BlCQ3gR/5koSEkAQcUxJC7+CC5d6LZMvq0jk6fc+e7bvTZ35/fGZXkiXbMhjZJp/n4yHw2TI7OzM7M5/X5/V+vZU4jmMkEolEIpFIJBKJRCKRSCSSE4j6XK+ARCKRSCQSiUQikUgkEonkvx9SlJJIJBKJRCKRSCQSiUQikZxwpCglkUgkEolEIpFIJBKJRCI54UhRSiKRSCQSiUQikUgkEolEcsKRopREIpFIJBKJRCKRSCQSieSEI0UpiUQikUgkEolEIpFIJBLJCUeKUhKJRCKRSCQSiUQikUgkkhOOFKUkEolEIpFIJBKJRCKRSCQnHClKSSQSiUQikUgkEolEIpFITjhSlJJIJBKJ5OeE7/vcfPPN/PEf/zHnn38+fX19GIbB2NgYV111Fd///vef9L2bN29GURSuvfbap/yMa665BkVRuOaaawDYsmULiqI8439P9znHWvbDDz/8lK8/7bTTeq9917ve9bTLfza49tprj/v7HA/d/bBly5bj/uxn+u94lv1C5VjfN51Os379et7xjnewbdu2o97TPaavu+66E7/CEolEIpFITij6c70CEolEIpH8onLrrbfyyle+EoCxsTEuuugistksjz/+ON/97nf57ne/y7vf/W4+85nPoCjKs/KZY2NjXH311Uc9/sgjj7B161ZGR0d59atffdTzZ5999jP+rM997nP8/d///TGfu+eee3j88cef8TJfyJx99tnH3PY/+tGPWFhY4Kyzzjrmdh4bGzsBa/fc8qpXvar3PUulEvfffz/XXXcdX/rSl/jiF7/IW97ylp/bZ2/evJlbb72VW265hc2bN//cPkcikUgkEskzR4pSEolEIpH8nFBVlTe96U28733v4+KLLz7iua985Su87W1v47Of/Swve9nLePvb3/6sfOYpp5xyTIfJtddey9atW5/0+WfCqlWrcByHL3/5y3ziE5/AsqyjXvO5z30OgPPPP5/777//Z/q8FwpveMMbeMMb3nDU45s3b2ZhYYE3vOENz5qD64XG+9///iMEoXq9zq/8yq9w44038pu/+Zu88pWvpL+//7lbQYlEIpFIJM8JsnxPIpFIJJKfEy9/+cv52te+dpQgBfDWt761V3J3/fXXn+A1+9kwDINf+7Vfo1Kp8K1vfeuo5zudDv/5n//J8uXLedWrXnXiV1DyvKdYLPLZz34WgEajwY9//OPneI0kEolEIpE8F0hRSiKRSCSS54hzzjkHgKmpqed4TZ4573znO4FDjqjD+epXv0qz2eTtb387mqY95XLuu+8+3vKWtzA+Po5pmoyMjPC6172OG2+88UnfY9s21157LRs3bsSyLJYtW8bVV1/NwYMHn3a9H3zwQd72trexatUqLMtiYGCAV73qVfzgBz942vf+POjmLAF8/vOf58ILL6RYLKIoChMTEwBMTk7y13/917z85S/vrXdfXx8XXXQR//zP/0wURU+6/Gq1ykc+8hFe9KIXUSwWSafTrFu3jre85S388Ic/POr1QRDwr//6r2zevJmBgQEsy2Lt2rW8973vfdaP0zVr1jAwMADQ+67Hw3/+53/yile8ord+q1ev5p3vfCe7d+8+4nXdDLRbb70VgMsuu+yIbKvDHYMPPvggb33rW1mxYgWmaVIoFFi3bh1vetOb+Pa3v/0zf1eJRCKRSCTHRpbvSSQSiUTyHLFnzx4Ali1b9hyvyTPntNNO48UvfjE33XQTU1NTrFy5svfcv/3bvwHwjne8gy996UtPuox/+Zd/4bd+67eIoohzzjmHzZs3Mzk5yfe+9z2+973vce211/KhD33oiPd0Oh1e8YpXcM8995DNZrniiitIp9P8+Mc/5vvf/z6vfe1rn/TzPvWpT/EHf/AHRFHE2WefzQUXXMD8/Dxbtmzhhhtu4MMf/jB//ud//jNumZ+O3/3d3+Uf//EfeelLX8prX/ta9u/f3xOrvvCFL/DBD36QtWvXctJJJ/Gyl72Mubk57r77bu68805uuOEGvva1rx2VS7Z161Ze+9rXMjMzQ7FY5KKLLiKfz3Pw4EG+973vUSqVuPLKK3uvbzabXHXVVWzZsoVcLsd5553H8PAwjz76KJ/5zGf46le/yo033tgTU39Woiii3W4DHLME9InEccw111zD9ddfj67rXHLJJYyMjPDQQw/x+c9/nq985St8/etf72WmdfPVupleh+daAWzYsAGAm2++mSuvvBLf9znrrLO48MILCcOQmZkZvv/97xOGIa9//eufle8skUgkEonkCcQSiUQikUhOOHNzc3GxWIyB+O/+7u+Oev7SSy+NgfhDH/rQUy7n6quvjoH46quvfsrXfehDH4qB+NJLL/2p1/mWW26JgXj9+vVxHMfxP//zP8dA/JGPfKT3mt27d8dAfMkllxzxub/xG79xxLK2bdsW67oeK4oSX3/99Uc894Mf/CA2TTMG4htuuOGI5/7oj/4oBuJTTjklnpmZ6T3ebrfj17/+9TFwzO32ox/9KFYUJR4aGopvvfXWo9ZlxYoVMRBv2bLliOe6++GWW245/g31BJ5qX3bXt1AoxHffffcx33/ffffFjz766FGPz8zMxGeddVYMxP/1X/91xHOtViteuXJlDMRvf/vb42azecTztVotvvHGG4947H/+z/8ZA/Ev/dIvxQsLC0c897d/+7cxEG/cuDEOguB4vvYR3+9Y2+973/te7/mf/OQnvce7x/TnP//5I17/T//0TzEQDw0NxQ8//HDv8SiKesdZX19fXCqVjnjf0+3Dyy67LAbiL37xi0c9V6vVnnS/SCQSiUQi+dmR5XsSiUQikZxggiDg137t16jX65xxxhm85z3vedLXfvjDHz6i5OiJ//793//9BK75kfzqr/4qmUyG6667jjiOgUPlfN3yvifjU5/6FEEQ8MY3vpFf//VfP+K5K6+8kne/+90AfPzjH+89bts2//zP/wzA3/7t3zI+Pt57LpPJ8JnPfIZUKnXMz/vQhz5EHMd85jOf4ZJLLjniuTPOOINPfvKTAE/aTfDnzR/90R/xkpe85JjPnX/++Zx++ulHPT4+Ps7f/M3fAKJk8nD+9V//lampKc4++2w+97nPkcvljni+WCxy+eWX9/7esWMH//Ef/8H4+Dhf/vKXGRkZOeL1//t//29e85rXsGfPnmOW/T0TyuUy//Ef/9E7Rs4++2wuvfTSp33fJz7xCQD+/M///Iguhoqi8KEPfYgzzzyTWq3Gv/zLvzyj9VlYWADgNa95zVHPFYvFJ90vEolEIpFIfnZk+Z5EIpFIJCeY3/qt3+Lmm29mcHCQr33ta5im+aSvPeuss44YgD+RO+64g3379v0c1vLpKRQKvOlNb+ILX/gCW7Zs4ZJLLuH6668nn8/zK7/yK0/53i1btgD0wt6fyG/8xm/wD//wD9x+++2EYYimaTz00EM0m02GhoZ6JVqHMzY2xhVXXMF3vvOdIx4vl8vcd999pNNpXve61x3z87qd4e66666n/tI/J9785jc/5fOu63LDDTdw//33UyqVcF2XOI5pNpsA7Nq164jX/+hHPwLEdny6XC+AH/zgB8RxzJVXXkk+nz/mazZv3swPfvAD7rrrLn7pl37peL5Wj8suu+yYj5977rl84xvfQFWfep50enq6d5xfffXVRz2vKArveMc7+P3f/31uueUWPvCBDxz3ur34xS/m8ccf521vexsf+MAHeMlLXoKuy1tkiUQikUhOBPKKK5FIJBLJCeR973sf//Zv/0Z/fz833ngjJ5100lO+/g1veAPXXnvtkz5/zTXXPGeiFAhH1Be+8AU+97nP0el0mJ2d5V3vehe
"text/plain": [
"<Figure size 1200x800 with 14 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"az.plot_trace(fit_1ht, figsize=(12, 8))\n",
"plt.suptitle(\"1HT Model Trace Plots\", fontsize=16)\n",
"plt.tight_layout()\n",
"\n",
"az.plot_trace(fit_2ht, figsize=(12, 8))\n",
"plt.suptitle(\"2HT Model Trace Plots\", fontsize=16)\n",
"plt.tight_layout()"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>mean</th>\n",
" <th>sd</th>\n",
" <th>hdi_3%</th>\n",
" <th>hdi_97%</th>\n",
" <th>mcse_mean</th>\n",
" <th>mcse_sd</th>\n",
" <th>ess_bulk</th>\n",
" <th>ess_tail</th>\n",
" <th>r_hat</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>d_old</th>\n",
" <td>0.621</td>\n",
" <td>0.230</td>\n",
" <td>0.172</td>\n",
" <td>0.964</td>\n",
" <td>0.004</td>\n",
" <td>0.003</td>\n",
" <td>3229.0</td>\n",
" <td>3084.0</td>\n",
" <td>1.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>d_new</th>\n",
" <td>0.604</td>\n",
" <td>0.236</td>\n",
" <td>0.136</td>\n",
" <td>0.953</td>\n",
" <td>0.004</td>\n",
" <td>0.003</td>\n",
" <td>3209.0</td>\n",
" <td>3121.0</td>\n",
" <td>1.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>g</th>\n",
" <td>0.491</td>\n",
" <td>0.238</td>\n",
" <td>0.095</td>\n",
" <td>0.886</td>\n",
" <td>0.005</td>\n",
" <td>0.002</td>\n",
" <td>2714.0</td>\n",
" <td>4377.0</td>\n",
" <td>1.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>pred_hits</th>\n",
" <td>12.645</td>\n",
" <td>1.832</td>\n",
" <td>9.000</td>\n",
" <td>15.000</td>\n",
" <td>0.021</td>\n",
" <td>0.017</td>\n",
" <td>7868.0</td>\n",
" <td>7605.0</td>\n",
" <td>1.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>pred_misses</th>\n",
" <td>2.355</td>\n",
" <td>1.832</td>\n",
" <td>0.000</td>\n",
" <td>6.000</td>\n",
" <td>0.021</td>\n",
" <td>0.017</td>\n",
" <td>7868.0</td>\n",
" <td>7262.0</td>\n",
" <td>1.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>pred_false_alarms</th>\n",
" <td>2.369</td>\n",
" <td>1.850</td>\n",
" <td>0.000</td>\n",
" <td>6.000</td>\n",
" <td>0.021</td>\n",
" <td>0.019</td>\n",
" <td>7477.0</td>\n",
" <td>6843.0</td>\n",
" <td>1.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>pred_correct_rejections</th>\n",
" <td>12.631</td>\n",
" <td>1.850</td>\n",
" <td>9.000</td>\n",
" <td>15.000</td>\n",
" <td>0.021</td>\n",
" <td>0.019</td>\n",
" <td>7477.0</td>\n",
" <td>6943.0</td>\n",
" <td>1.0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" mean sd hdi_3% hdi_97% mcse_mean mcse_sd \\\n",
"d_old 0.621 0.230 0.172 0.964 0.004 0.003 \n",
"d_new 0.604 0.236 0.136 0.953 0.004 0.003 \n",
"g 0.491 0.238 0.095 0.886 0.005 0.002 \n",
"pred_hits 12.645 1.832 9.000 15.000 0.021 0.017 \n",
"pred_misses 2.355 1.832 0.000 6.000 0.021 0.017 \n",
"pred_false_alarms 2.369 1.850 0.000 6.000 0.021 0.019 \n",
"pred_correct_rejections 12.631 1.850 9.000 15.000 0.021 0.019 \n",
"\n",
" ess_bulk ess_tail r_hat \n",
"d_old 3229.0 3084.0 1.0 \n",
"d_new 3209.0 3121.0 1.0 \n",
"g 2714.0 4377.0 1.0 \n",
"pred_hits 7868.0 7605.0 1.0 \n",
"pred_misses 7868.0 7262.0 1.0 \n",
"pred_false_alarms 7477.0 6843.0 1.0 \n",
"pred_correct_rejections 7477.0 6943.0 1.0 "
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"\n",
"az.summary(fit_1ht)\n",
"az.summary(fit_2ht)"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "venv",
"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.12.3"
}
},
"nbformat": 4,
"nbformat_minor": 2
}