{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Simple example\n", "\n", "Here we run a simple linear regression model (even without intercept) \n", "and make a selection when the $Z$ score is larger than 2.\n", "\n", "The functions `partial_model_inference` and `pivot_plot` below are just simulation utilities\n", "used to simulate results in least squares regression. The underlying functionality\n", "is contained in the function `selectinf.learning.core.infer_general_target`.\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import functools\n", "\n", "import numpy as np, pandas as pd\n", "import matplotlib.pyplot as plt\n", "%matplotlib inline\n", "\n", "from selectinf.tests.instance import gaussian_instance\n", "\n", "from selectinf.learning.utils import partial_model_inference, pivot_plot\n", "from selectinf.learning.core import normal_sampler\n", "from selectinf.learning.Rfitters import logit_fit" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/Users/jonathantaylor/anaconda/envs/py36/lib/python3.6/site-packages/sklearn/ensemble/weight_boosting.py:29: DeprecationWarning: numpy.core.umath_tests is an internal NumPy module and should not be imported. It will be removed in a future NumPy release.\n", " from numpy.core.umath_tests import inner1d\n", "Using TensorFlow backend.\n", "/Users/jonathantaylor/anaconda/envs/py36/lib/python3.6/site-packages/tensorflow/python/framework/dtypes.py:455: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n", " _np_qint8 = np.dtype([(\"qint8\", np.int8, 1)])\n", "/Users/jonathantaylor/anaconda/envs/py36/lib/python3.6/site-packages/tensorflow/python/framework/dtypes.py:456: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n", " _np_quint8 = np.dtype([(\"quint8\", np.uint8, 1)])\n", "/Users/jonathantaylor/anaconda/envs/py36/lib/python3.6/site-packages/tensorflow/python/framework/dtypes.py:457: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n", " _np_qint16 = np.dtype([(\"qint16\", np.int16, 1)])\n", "/Users/jonathantaylor/anaconda/envs/py36/lib/python3.6/site-packages/tensorflow/python/framework/dtypes.py:458: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n", " _np_quint16 = np.dtype([(\"quint16\", np.uint16, 1)])\n", "/Users/jonathantaylor/anaconda/envs/py36/lib/python3.6/site-packages/tensorflow/python/framework/dtypes.py:459: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n", " _np_qint32 = np.dtype([(\"qint32\", np.int32, 1)])\n", "/Users/jonathantaylor/anaconda/envs/py36/lib/python3.6/site-packages/tensorflow/python/framework/dtypes.py:462: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n", " np_resource = np.dtype([(\"resource\", np.ubyte, 1)])\n", "R[write to console]: Loaded gbm 2.1.5\n", "\n", "R[write to console]: randomForest 4.6-14\n", "\n", "R[write to console]: Type rfNews() to see new features/changes/bug fixes.\n", "\n" ] } ], "source": [ "np.random.seed(0) # for replicability\n", "def simulate(n=20, p=1, s=1, signal=1, sigma=2, alpha=0.1, B=2000):\n", "\n", " # description of statistical problem\n", "\n", " X, y, truth = gaussian_instance(n=n,\n", " p=p, \n", " s=s,\n", " equicorrelated=False,\n", " rho=0.5, \n", " sigma=sigma,\n", " signal=signal,\n", " random_signs=True,\n", " scale=False)[:3]\n", "\n", " dispersion = sigma**2\n", "\n", " S = X.T.dot(y)\n", " covS = dispersion * X.T.dot(X)\n", " sampler = normal_sampler(S, covS)\n", "\n", " def base_algorithm(X, dispersion, sampler):\n", "\n", " success = np.zeros(p)\n", "\n", " scale = 0.\n", " noisy_S = sampler(scale=scale)\n", " \n", " Z = noisy_S / np.sqrt(np.linalg.norm(X)**2 * dispersion)\n", " if Z > 2:\n", " return set([0])\n", " else:\n", " return set([])\n", "\n", " selection_algorithm = functools.partial(base_algorithm, X, dispersion)\n", "\n", " # run selection algorithm\n", "\n", " return partial_model_inference(X,\n", " y,\n", " truth,\n", " selection_algorithm,\n", " sampler,\n", " B=B,\n", " fit_probability=logit_fit,\n", " fit_args={'df':20})" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/Users/jonathantaylor/git-repos/selectinf/selectinf/distributions/discrete_family.py:86: RuntimeWarning: divide by zero encountered in log\n", " self._lw = np.array([np.log(v) for v in xw[:,1]])\n" ] } ], "source": [ "dfs = []\n", "for i in range(1000):\n", " df = simulate()\n", " if df is not None:\n", " dfs.append(df)" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "<Figure size 576x576 with 1 Axes>" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig = plt.figure(figsize=(8, 8))\n", "results = pd.concat(dfs)\n", "pivot_plot(results, fig=fig);" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] } ], "metadata": { "jupytext": { "cell_metadata_filter": "all,-slideshow", "formats": "ipynb,Rmd" }, "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.6.2" } }, "nbformat": 4, "nbformat_minor": 2 }