Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
L
lecture_applied_bioimage_analysis_2020
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package Registry
Container Registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
rhaase
lecture_applied_bioimage_analysis_2020
Commits
91fd7ece
Commit
91fd7ece
authored
4 years ago
by
rhaase
Browse files
Options
Downloads
Patches
Plain Diff
added exercise solution for otsu hypothesis testing
parent
68ac0fa3
No related branches found
Branches containing commit
No related tags found
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
11_Hypothesis_testing/exercise_otsu/Otsu_Method_Comparison.ipynb
+405
-0
405 additions, 0 deletions
...thesis_testing/exercise_otsu/Otsu_Method_Comparison.ipynb
with
405 additions
and
0 deletions
11_Hypothesis_testing/exercise_otsu/Otsu_Method_Comparison.ipynb
0 → 100644
+
405
−
0
View file @
91fd7ece
{
"cells": [
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0 199.127197\n",
"1 469.055176\n",
"2 782.623291\n",
"3 990.295410\n",
"4 1100.158691\n",
"5 1150.970459\n",
"6 1173.553467\n",
"7 1184.692383\n",
"8 1190.338135\n",
"9 1185.302734\n",
"10 1189.270020\n",
"11 1192.169189\n",
"12 1206.970215\n",
"13 1242.980957\n",
"14 1277.008057\n",
"15 1309.814453\n",
"16 1334.838867\n",
"17 1371.765137\n",
"18 1375.122070\n",
"19 1315.155029\n",
"20 1172.790527\n",
"21 917.663574\n",
"22 587.005615\n",
"23 224.304199\n",
"24 128.479004\n",
"Name: # Area, dtype: float64\n",
"0 197.601\n",
"1 468.292\n",
"2 780.640\n",
"3 988.770\n",
"4 1099.396\n",
"5 1148.682\n",
"6 1172.485\n",
"7 1183.167\n",
"8 1188.507\n",
"9 1183.472\n",
"10 1187.134\n",
"11 1189.117\n",
"12 1205.750\n",
"13 1238.708\n",
"14 1275.330\n",
"15 1307.678\n",
"16 1331.329\n",
"17 1369.019\n",
"18 1373.444\n",
"19 1313.019\n",
"20 1171.265\n",
"21 915.527\n",
"22 584.717\n",
"23 222.931\n",
"24 127.411\n",
"Name: Area, dtype: float64\n"
]
}
],
"source": [
"import pandas as pd\n",
"\n",
"# Load data\n",
"table_otsu_python = pd.read_csv(\"otsu_python.csv\", delimiter=',')\n",
"table_otsu_imagej = pd.read_csv(\"otsu_imagej.csv\", delimiter=',')\n",
"\n",
"# read out columns\n",
"measurement_python = table_otsu_python[\"# Area\"];\n",
"measurement_imagej = table_otsu_imagej[\"Area\"];\n",
"\n",
"print(measurement_python)\n",
"print(measurement_imagej)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"First we determine the mean of both measurementsand compare them"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Python: 1010.858154296875\n",
"ImageJ: 1008.93564\n",
"Difference: 1.9225142968749651\n"
]
}
],
"source": [
"import numpy as np\n",
"\n",
"mean_python = np.mean(measurement_python)\n",
"mean_imagej = np.mean(measurement_imagej)\n",
"\n",
"print(\"Python: \" + str(mean_python))\n",
"print(\"ImageJ: \" + str(mean_imagej))\n",
"\n",
"print(\"Difference: \" + str(mean_python - mean_imagej))\n",
" "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Then we have a look at the histograms for the measurement"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAXAAAAD4CAYAAAD1jb0+AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+j8jraAAAM90lEQVR4nO3db4xl9V3H8ffH3dKytARwh0pZ1gFDSIgPBCcKxTQGWqVAoA98QCNKtWYfWWnV1G2INj4DbWprNJoNUNEipKFoCUSF0DaNSV3d5U9ZWBAoW1i6dLdpbFETgfTrg3uwwzA7Mzv3zsz92vcrmdxzfvecez735t7Pnjn3nJ1UFZKkfn5kowNIklbHApekpixwSWrKApekpixwSWpq83pubOvWrTU7O7uem5Sk9vbu3fvtqppZOL6uBT47O8uePXvWc5OS1F6Sbyw27iEUSWrKApekpixwSWrKApekpixwSWrKApekppYt8CS3JDmcZN+8sVOS3J/kqeH25LWNKUlaaCV74H8FXLpgbCfwQFWdDTwwzEuS1tGyBV5VXwG+s2D4KuDWYfpW4H0TziVJWsZqr8R8e1UdAqiqQ0lOPdqCSXYAOwC2b9++ys1J+v9kdue9G7LdAzdcviHbXStr/iVmVe2qqrmqmpuZecOl/JKkVVptgX8ryWkAw+3hyUWSJK3Eagv8buDaYfpa4AuTiSNJWqmVnEZ4O/BV4JwkB5N8ELgBeE+Sp4D3DPOSpHW07JeYVfX+o9x1yYSzSJKOgVdiSlJTFrgkNWWBS1JTFrgkNWWBS1JTFrgkNWWBS1JTFrgkNWWBS1JTFrgkNWWBS1JTFrgkNWWBS1JTFrgkNWWBS1JTFrgkNWWBS1JTFrgkNWWBS1JTFrgkNWWBS1JTFrgkNWWBS1JTFrgkNWWBS1JTFrgkNWWBS1JTFrgkNWWBS1JTFrgkNWWBS1JTFrgkNTVWgSf5SJLHkuxLcnuSt0wqmCRpaasu8CSnA78FzFXVTwKbgKsnFUyStLRxD6FsBo5PshnYAnxz/EiSpJVYdYFX1QvAJ4DngEPAd6vqvoXLJdmRZE+SPUeOHFl9UknS64xzCOVk4CrgTOAdwAlJrlm4XFXtqqq5qpqbmZlZfVJJ0uuMcwjl3cCzVXWkql4B7gLeOZlYkqTljFPgzwEXJNmSJMAlwP7JxJIkLWecY+C7gTuBB4FHh8faNaFckqRlbB5n5ar6OPDxCWWRJB0Dr8SUpKYscElqygKXpKYscElqygKXpKYscElqygKXpKYscElqygKXpKYscElqygKXpKYscElqygKXpKYscElqygKXpKYscElqygKXpKYscElqygKXpKYscElqygKXpKYscElqygKXpKYscElqygKXpKYscElqygKXpKYscElqygKXpKYscElqygKXpKYscElqaqwCT3JSkjuTPJFkf5ILJxVMkrS0zWOu/2ngH6vql5IcB2yZQCZJ0gqsusCTnAi8C/gAQFW9DLw8mViSpOWMcwjlLOAI8JkkDyW5KckJE8olSVrGOIdQNgPnAx+qqt1JPg3sBH5//kJJdgA7ALZv3z7G5iRpPLM7792wbR+44fKJP+Y4e+AHgYNVtXuYv5NRob9OVe2qqrmqmpuZmRljc5Kk+VZd4FX1IvB8knOGoUuAxyeSSpK0rHHPQvkQcNtwBsrXgV8bP5IkaSXGKvCqehiYm1AWSdIx8EpMSWrKApekpixwSWrKApekpixwSWrKApekpixwSWrKApekpixwSWrKApekpixwSWrKApekpixwSWrKApekpixwSWrKApekpixwSWrKApekpixwSWrKApekpixwSWrKApekpixwSWrKApekpixwSWrKApekpixwSWrKApekpixwSWrKApekpixwSWrKApekpixwSWpq7AJPsinJQ0numUQgSdLKTGIP/Dpg/wQeR5J0DMYq8CTbgMuBmyYTR5K0UuPugX8K+Cjw/aMtkGRHkj1J9hw5cmTMzUmSXrPqAk9yBXC4qvYutVxV7aqquaqam5mZWe3mJEkLjLMHfhFwZZIDwB3AxUk+O5FUkqRlrbrAq+pjVbWtqmaBq4EvVtU1E0smSVqS54FLUlObJ/EgVfVl4MuTeCxJ0sq4By5JTVngktSUBS5JTVngktSUBS5JTVngktSUBS5JTVngktSUBS5JTVngktSUBS5JTVngktSUBS5JTVngktSUBS5JTVngktSUBS5JTVngktSUBS5JTVngktSUBS5JTVngktSUBS5JTVngktSUBS5JTVngktSUBS5JTVngktSUBS5JTVngktSUBS5JTVngktTUqgs8yRlJvpRkf5LHklw3yWCSpKVtHmPdV4HfqaoHk7wN2Jvk/qp6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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAXAAAAD4CAYAAAD1jb0+AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+j8jraAAAM90lEQVR4nO3db4xl9V3H8ffH3dKytARwh0pZ1gFDSIgPBCcKxTQGWqVAoA98QCNKtWYfWWnV1G2INj4DbWprNJoNUNEipKFoCUSF0DaNSV3d5U9ZWBAoW1i6dLdpbFETgfTrg3uwwzA7Mzv3zsz92vcrmdxzfvecez735t7Pnjn3nJ1UFZKkfn5kowNIklbHApekpixwSWrKApekpixwSWpq83pubOvWrTU7O7uem5Sk9vbu3fvtqppZOL6uBT47O8uePXvWc5OS1F6Sbyw27iEUSWrKApekpixwSWrKApekpixwSWrKApekppYt8CS3JDmcZN+8sVOS3J/kqeH25LWNKUlaaCV74H8FXLpgbCfwQFWdDTwwzEuS1tGyBV5VXwG+s2D4KuDWYfpW4H0TziVJWsZqr8R8e1UdAqiqQ0lOPdqCSXYAOwC2b9++ys1J+v9kdue9G7LdAzdcviHbXStr/iVmVe2qqrmqmpuZecOl/JKkVVptgX8ryWkAw+3hyUWSJK3Eagv8buDaYfpa4AuTiSNJWqmVnEZ4O/BV4JwkB5N8ELgBeE+Sp4D3DPOSpHW07JeYVfX+o9x1yYSzSJKOgVdiSlJTFrgkNWWBS1JTFrgkNWWBS1JTFrgkNWWBS1JTFrgkNWWBS1JTFrgkNWWBS1JTFrgkNWWBS1JTFrgkNWWBS1JTFrgkNWWBS1JTFrgkNWWBS1JTFrgkNWWBS1JTFrgkNWWBS1JTFrgkNWWBS1JTFrgkNWWBS1JTFrgkNWWBS1JTFrgkNWWBS1JTFrgkNTVWgSf5SJLHkuxLcnuSt0wqmCRpaasu8CSnA78FzFXVTwKbgKsnFUyStLRxD6FsBo5PshnYAnxz/EiSpJVYdYFX1QvAJ4DngEPAd6vqvoXLJdmRZE+SPUeOHFl9UknS64xzCOVk4CrgTOAdwAlJrlm4XFXtqqq5qpqbmZlZfVJJ0uuMcwjl3cCzVXWkql4B7gLeOZlYkqTljFPgzwEXJNmSJMAlwP7JxJIkLWecY+C7gTuBB4FHh8faNaFckqRlbB5n5ar6OPDxCWWRJB0Dr8SUpKYscElqygKXpKYscElqygKXpKYscElqygKXpKYscElqygKXpKYscElqygKXpKYscElqygKXpKYscElqygKXpKYscElqygKXpKYscElqygKXpKYscElqygKXpKYscElqygKXpKYscElqygKXpKYscElqygKXpKYscElqygKXpKYscElqygKXpKYscElqaqwCT3JSkjuTPJFkf5ILJxVMkrS0zWOu/2ngH6vql5IcB2yZQCZJ0gqsusCTnAi8C/gAQFW9DLw8mViSpOWMcwjlLOAI8JkkDyW5KckJE8olSVrGOIdQNgPnAx+qqt1JPg3sBH5//kJJdgA7ALZv3z7G5iRpPLM7792wbR+44fKJP+Y4e+AHgYNVtXuYv5NRob9OVe2qqrmqmpuZmRljc5Kk+VZd4FX1IvB8knOGoUuAxyeSSpK0rHHPQvkQcNtwBsrXgV8bP5IkaSXGKvCqehiYm1AWSdIx8EpMSWrKApekpixwSWrKApekpixwSWrKApekpixwSWrKApekpixwSWrKApekpixwSWrKApekpixwSWrKApekpixwSWrKApekpixwSWrKApekpixwSWrKApekpixwSWrKApekpixwSWrKApekpixwSWrKApekpixwSWrKApekpixwSWrKApekpixwSWrKApekpixwSWpq7AJPsinJQ0numUQgSdLKTGIP/Dpg/wQeR5J0DMYq8CTbgMuBmyYTR5K0UuPugX8K+Cjw/aMtkGRHkj1J9hw5cmTMzUmSXrPqAk9yBXC4qvYutVxV7aqquaqam5mZWe3mJEkLjLMHfhFwZZIDwB3AxUk+O5FUkqRlrbrAq+pjVbWtqmaBq4EvVtU1E0smSVqS54FLUlObJ/EgVfVl4MuTeCxJ0sq4By5JTVngktSUBS5JTVngktSUBS5JTVngktSUBS5JTVngktSUBS5JTVngktSUBS5JTVngktSUBS5JTVngktSUBS5JTVngktSUBS5JTVngktSUBS5JTVngktSUBS5JTVngktSUBS5JTVngktSUBS5JTVngktSUBS5JTVngktSUBS5JTVngktSUBS5JTVngktTUqgs8yRlJvpRkf5LHklw3yWCSpKVtHmPdV4HfqaoHk7wN2Jvk/qp6fELZJElLWPUeeFUdqqoHh+mXgP3A6ZMKJkla2jh74P8nySxwHrB7kft2ADsAtm/fPonNrbvZnfduyHYP3HD5hmxXPxw26n2tyRn7S8wkbwU+D3y4qr638P6q2lVVc1U1NzMzM+7mJEmDsQo8yZsYlfdtVXXXZCJJklZinLNQAtwM7K+qT04ukiRpJcbZA78I+BXg4iQPDz+XTSiXJGkZq/4Ss6r+GcgEs0iSjoFXYkpSUxa4JDVlgUtSUxa4JDVlgUtSUxa4JDVlgUtSUxa4JDVlgUtSUxa4JDVlgUtSUxa4JDVlgUtSUxa4JDVlgUtSUxP5o8brwT/Aun58raUe3AOXpKYscElqygKXpKYscElqygKXpKYscElqygKXpKYscElqygKXpKYscElqygKXpKYscElqygKXpKYscElqygKXpKYscElqygKXpKbGKvAklyZ5MsnTSXZOKpQkaXmrLvAkm4A/B94LnAu8P8m5kwomSVraOHvgPwM8XVVfr6qXgTuAqyYTS5K0nHH+qPHpwPPz5g8CP7twoSQ7gB3D7H8meXKV29sKfHuV626EsfPmxgklWd4P3Wu7jjplhV55O2UlN46V98cXGxynwLPIWL1hoGoXsGuM7Yw2luypqrlxH2e9dMrbKSv0ytspK/TK2ykrrE3ecQ6hHATOmDe/DfjmeHEkSSs1ToH/G3B2kjOTHAdcDdw9mViSpOWs+hBKVb2a5DeBfwI2AbdU1WMTS/ZGYx+GWWed8nbKCr3ydsoKvfJ2ygprkDdVbzhsLUlqwCsxJakpC1ySmmpR4NN2yX6SM5J8Kcn+JI8luW4YPyXJ/UmeGm5PnrfOx4b8Tyb5xQ3IvCnJQ0nuaZD1pCR3JnlieI0vnNa8ST4yvAf2Jbk9yVumKWuSW5IcTrJv3tgx50vy00keHe770ySLnUa8Fln/eHgffC3J3yU5aRqyHi3vvPt+N0kl2bqmeatqqn8YfUH6DHAWcBzwCHDuBmc6DTh/mH4b8O+M/juBPwJ2DuM7gRuH6XOH3G8Gzhyez6Z1zvzbwN8C9wzz05z1VuA3hunjgJOmMS+ji9meBY4f5j8HfGCasgLvAs4H9s0bO+Z8wL8CFzK6/uMfgPeuU9ZfADYP0zdOS9aj5R3Gz2B0csc3gK1rmbfDHvjUXbJfVYeq6sFh+iVgP6MP81WMyofh9n3D9FXAHVX1P1X1LPA0o+e1LpJsAy4Hbpo3PK1ZT2T0wbgZoKperqr/mNa8jM7kOj7JZmALo2shpiZrVX0F+M6C4WPKl+Q04MSq+mqNGuev562zplmr6r6qenWY/RdG15tseNaj5R38CfBRXn9h45rk7VDgi12yf/oGZXmDJLPAecBu4O1VdQhGJQ+cOiy20c/hU4zeUN+fNzatWc8CjgCfGQ753JTkhGnMW1UvAJ8AngMOAd+tqvumMesCx5rv9GF64fh6+3VGe6gwpVmTXAm8UFWPLLhrTfJ2KPAVXbK/EZK8Ffg88OGq+t5Siy4yti7PIckVwOGq2rvSVRYZW8/XezOjX0v/oqrOA/6L0a/5R7ORr+3JjPaszgTeAZyQ5JqlVllkbCrey4Oj5dvw3EmuB14FbnttaJHFNjRrki3A9cAfLHb3ImNj5+1Q4FN5yX6SNzEq79uq6q5h+FvDr0QMt4eH8Y18DhcBVyY5wOjw08VJPjulWV/b/sGq2j3M38mo0Kcx77uBZ6vqSFW9AtwFvHNKs853rPkO8oNDF/PH10WSa4ErgF8eDjPAdGb9CUb/mD8yfN62AQ8m+THWKG+HAp+6S/aHb4lvBvZX1Sfn3XU3cO0wfS3whXnjVyd5c5IzgbMZfXGx5qrqY1W1rapmGb12X6yqa6Yx65D3ReD5JOcMQ5cAj09p3ueAC5JsGd4TlzD6PmQas853TPmGwywvJblgeJ6/Om+dNZXkUuD3gCur6r8XPIepylpVj1bVqVU1O3zeDjI62eHFNcu7Ft/OTvoHuIzRmR7PANdPQZ6fY/RrzteAh4efy4AfBR4AnhpuT5m3zvVD/idZo2/FV5D75/nBWShTmxX4KWDP8Pr+PXDytOYF/hB4AtgH/A2jswymJitwO6Pj868MhfLB1eQD5obn+AzwZwxXca9D1qcZHTt+7XP2l9OQ9Wh5F9x/gOEslLXK66X0ktRUh0MokqRFWOCS1JQFLklNWeCS1JQFLklNWeCS1JQFLklN/S+XdtUPAYl3EgAAAABJRU5ErkJggg==\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"import matplotlib.pyplot as plt\n",
"import numpy as np\n",
"\n",
"def draw_histogram(data):\n",
" counts, bins = np.histogram(data, bins=10, range=(0,1400))\n",
" plt.hist(bins[:-1], bins, weights=counts)\n",
" #plt.axis([0, 10, 0, 4])\n",
" plt.show()\n",
" \n",
"draw_histogram(measurement_python)\n",
"draw_histogram(measurement_imagej)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We should also plot them against each other in a scatter plot to get a first impression on they relate to each other"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"import matplotlib.pyplot as plt\n",
"\n",
"# plot our data\n",
"plt.plot(measurement_python, measurement_imagej, \"*\")\n",
"# plot another line which corresponds to identidy\n",
"plt.plot([0, 1400], [0, 1400])\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now let's have a look at the Bland-Altman plot"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [],
"source": [
"# A function for drawing Bland-Altman plots\n",
"# source https://stackoverflow.com/questions/16399279/bland-altman-plot-in-python\n",
"import matplotlib.pyplot as plt\n",
"import numpy as np\n",
"\n",
"def bland_altman_plot(data1, data2, *args, **kwargs):\n",
" data1 = np.asarray(data1)\n",
" data2 = np.asarray(data2)\n",
" mean = np.mean([data1, data2], axis=0)\n",
" diff = data1 - data2 # Difference between data1 and data2\n",
" md = np.mean(diff) # Mean of the difference\n",
" sd = np.std(diff, axis=0) # Standard deviation of the difference\n",
"\n",
" plt.scatter(mean, diff, *args, **kwargs)\n",
" plt.axhline(md, color='gray', linestyle='--')\n",
" plt.axhline(md + 1.96*sd, color='gray', linestyle='--')\n",
" plt.axhline(md - 1.96*sd, color='gray', linestyle='--')"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# draw a Bland-Altman plot\n",
"bland_altman_plot(measurement_python, measurement_imagej)\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The cofindence interval"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[0.3143669053595717, 3.530661688390393]\n"
]
}
],
"source": [
"data1 = measurement_python\n",
"data2 = measurement_imagej\n",
"\n",
"mean = np.mean([data1, data2], axis=0)\n",
"diff = data1 - data2 # Difference between data1 and data2\n",
"md = np.mean(diff) # Mean of the difference\n",
"sd = np.std(diff, axis=0) # Standard deviation of the difference\n",
"\n",
"CI = [md - 2 * sd, md+2*sd]\n",
"\n",
"print(CI)"
]
},
{
"cell_type": "code",
"execution_count": 41,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(0.47051036223078757,\n",
" (0.1097795345763236, 0.4565209578658961, 48.0),\n",
" (-0.0743754713943518, 0.47051036223078757, 48.0))"
]
},
"execution_count": 41,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from statsmodels.stats.weightstats import ttost_ind\n",
"\n",
"pval = ttost_ind(measurement_python, measurement_imagej, low=-10, upp=10)\n",
"\n",
"pval"
]
},
{
"cell_type": "code",
"execution_count": 40,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Reject null-hypothesis: Difference is above limit\n",
"Reject null-hypothesis: Difference is below -limit\n"
]
},
{
"data": {
"text/plain": [
"[[-49.213693923012265, 1.289351642345751e-25],\n",
" [72.64029810317597, 1.19906617345889e-29]]"
]
},
"execution_count": 40,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from scipy import stats\n",
"\n",
"def equivalence_ttest_rel(x1, x2, limit):\n",
" alpha = 0.05\n",
" \n",
" # print(x1)\n",
" # print(x2)\n",
" # print(x1 - x2)\n",
"\n",
" # less than test:\n",
" \n",
" t1, p_value1 = stats.ttest_1samp(x1 - x2, limit)\n",
" if p_value1 / 2 < alpha and t1 < 0:\n",
" print(\"Reject null-hypothesis: Difference is above limit\")\n",
"\n",
" # greater than test:\n",
" t2, p_value2 = stats.ttest_1samp(x1 - x2, -limit)\n",
" if p_value2 / 2 < alpha and t2 > 0:\n",
" print(\"Reject null-hypothesis: Difference is below -limit\")\n",
"\n",
" # return the maximum p_value from both test \n",
" # representing the worst case scenario\n",
" return [ \n",
" [t1, p_value1],\n",
" [t2, p_value2]\n",
" ]\n",
"\n",
"tolerance = 10\n",
"equivalence_ttest_rel(measurement_python, measurement_imagej, tolerance)\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"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.8.3"
}
},
"nbformat": 4,
"nbformat_minor": 4
}
%% Cell type:code id: tags:
```
python
import
pandas
as
pd
# Load data
table_otsu_python
=
pd
.
read_csv
(
"
otsu_python.csv
"
,
delimiter
=
'
,
'
)
table_otsu_imagej
=
pd
.
read_csv
(
"
otsu_imagej.csv
"
,
delimiter
=
'
,
'
)
# read out columns
measurement_python
=
table_otsu_python
[
"
# Area
"
];
measurement_imagej
=
table_otsu_imagej
[
"
Area
"
];
print
(
measurement_python
)
print
(
measurement_imagej
)
```
%% Output
0 199.127197
1 469.055176
2 782.623291
3 990.295410
4 1100.158691
5 1150.970459
6 1173.553467
7 1184.692383
8 1190.338135
9 1185.302734
10 1189.270020
11 1192.169189
12 1206.970215
13 1242.980957
14 1277.008057
15 1309.814453
16 1334.838867
17 1371.765137
18 1375.122070
19 1315.155029
20 1172.790527
21 917.663574
22 587.005615
23 224.304199
24 128.479004
Name: # Area, dtype: float64
0 197.601
1 468.292
2 780.640
3 988.770
4 1099.396
5 1148.682
6 1172.485
7 1183.167
8 1188.507
9 1183.472
10 1187.134
11 1189.117
12 1205.750
13 1238.708
14 1275.330
15 1307.678
16 1331.329
17 1369.019
18 1373.444
19 1313.019
20 1171.265
21 915.527
22 584.717
23 222.931
24 127.411
Name: Area, dtype: float64
%% Cell type:markdown id: tags:
First we determine the mean of both measurementsand compare them
%% Cell type:code id: tags:
```
python
import
numpy
as
np
mean_python
=
np
.
mean
(
measurement_python
)
mean_imagej
=
np
.
mean
(
measurement_imagej
)
print
(
"
Python:
"
+
str
(
mean_python
))
print
(
"
ImageJ:
"
+
str
(
mean_imagej
))
print
(
"
Difference:
"
+
str
(
mean_python
-
mean_imagej
))
```
%% Output
Python: 1010.858154296875
ImageJ: 1008.93564
Difference: 1.9225142968749651
%% Cell type:markdown id: tags:
Then we have a look at the histograms for the measurement
%% Cell type:code id: tags:
```
python
import
matplotlib.pyplot
as
plt
import
numpy
as
np
def
draw_histogram
(
data
):
counts
,
bins
=
np
.
histogram
(
data
,
bins
=
10
,
range
=
(
0
,
1400
))
plt
.
hist
(
bins
[:
-
1
],
bins
,
weights
=
counts
)
#plt.axis([0, 10, 0, 4])
plt
.
show
()
draw_histogram
(
measurement_python
)
draw_histogram
(
measurement_imagej
)
```
%% Output
%% Cell type:markdown id: tags:
We should also plot them against each other in a scatter plot to get a first impression on they relate to each other
%% Cell type:code id: tags:
```
python
import
matplotlib.pyplot
as
plt
# plot our data
plt
.
plot
(
measurement_python
,
measurement_imagej
,
"
*
"
)
# plot another line which corresponds to identidy
plt
.
plot
([
0
,
1400
],
[
0
,
1400
])
plt
.
show
()
```
%% Output
%% Cell type:markdown id: tags:
Now let's have a look at the Bland-Altman plot
%% Cell type:code id: tags:
```
python
# A function for drawing Bland-Altman plots
# source https://stackoverflow.com/questions/16399279/bland-altman-plot-in-python
import
matplotlib.pyplot
as
plt
import
numpy
as
np
def
bland_altman_plot
(
data1
,
data2
,
*
args
,
**
kwargs
):
data1
=
np
.
asarray
(
data1
)
data2
=
np
.
asarray
(
data2
)
mean
=
np
.
mean
([
data1
,
data2
],
axis
=
0
)
diff
=
data1
-
data2
# Difference between data1 and data2
md
=
np
.
mean
(
diff
)
# Mean of the difference
sd
=
np
.
std
(
diff
,
axis
=
0
)
# Standard deviation of the difference
plt
.
scatter
(
mean
,
diff
,
*
args
,
**
kwargs
)
plt
.
axhline
(
md
,
color
=
'
gray
'
,
linestyle
=
'
--
'
)
plt
.
axhline
(
md
+
1.96
*
sd
,
color
=
'
gray
'
,
linestyle
=
'
--
'
)
plt
.
axhline
(
md
-
1.96
*
sd
,
color
=
'
gray
'
,
linestyle
=
'
--
'
)
```
%% Cell type:code id: tags:
```
python
# draw a Bland-Altman plot
bland_altman_plot
(
measurement_python
,
measurement_imagej
)
plt
.
show
()
```
%% Output
%% Cell type:markdown id: tags:
The cofindence interval
%% Cell type:code id: tags:
```
python
data1
=
measurement_python
data2
=
measurement_imagej
mean
=
np
.
mean
([
data1
,
data2
],
axis
=
0
)
diff
=
data1
-
data2
# Difference between data1 and data2
md
=
np
.
mean
(
diff
)
# Mean of the difference
sd
=
np
.
std
(
diff
,
axis
=
0
)
# Standard deviation of the difference
CI
=
[
md
-
2
*
sd
,
md
+
2
*
sd
]
print
(
CI
)
```
%% Output
[0.3143669053595717, 3.530661688390393]
%% Cell type:code id: tags:
```
python
from
statsmodels.stats.weightstats
import
ttost_ind
pval
=
ttost_ind
(
measurement_python
,
measurement_imagej
,
low
=-
10
,
upp
=
10
)
pval
```
%% Output
(0.47051036223078757,
(0.1097795345763236, 0.4565209578658961, 48.0),
(-0.0743754713943518, 0.47051036223078757, 48.0))
%% Cell type:code id: tags:
```
python
from
scipy
import
stats
def
equivalence_ttest_rel
(
x1
,
x2
,
limit
):
alpha
=
0.05
# print(x1)
# print(x2)
# print(x1 - x2)
# less than test:
t1
,
p_value1
=
stats
.
ttest_1samp
(
x1
-
x2
,
limit
)
if
p_value1
/
2
<
alpha
and
t1
<
0
:
print
(
"
Reject null-hypothesis: Difference is above limit
"
)
# greater than test:
t2
,
p_value2
=
stats
.
ttest_1samp
(
x1
-
x2
,
-
limit
)
if
p_value2
/
2
<
alpha
and
t2
>
0
:
print
(
"
Reject null-hypothesis: Difference is below -limit
"
)
# return the maximum p_value from both test
# representing the worst case scenario
return
[
[
t1
,
p_value1
],
[
t2
,
p_value2
]
]
tolerance
=
10
equivalence_ttest_rel
(
measurement_python
,
measurement_imagej
,
tolerance
)
```
%% Output
Reject null-hypothesis: Difference is above limit
Reject null-hypothesis: Difference is below -limit
[[-49.213693923012265, 1.289351642345751e-25],
[72.64029810317597, 1.19906617345889e-29]]
%% Cell type:code id: tags:
```
python
```
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment