{ "cells": [ { "attachments": {}, "cell_type": "markdown", "id": "746b8a5d", "metadata": {}, "source": [ "# R: Cluster Robust Double Machine Learning\n", "\n", "\n", "## Motivation \n", "\n", "In many empirical applications, errors exhibit a clustered structure such that the usual i.i.d. assumption does not hold anymore. In order to perform valid statistical inference, researchers have to account for clustering. In this notebook, we will shortly emphasize the consequences of clustered data on inference based on the double machine learning (DML) approach as has been considered in [Chiang et al. (2021)](https://doi.org/10.1080/07350015.2021.1895815). We will demonstrate how users of the [DoubleML](https://docs.doubleml.org/stable/index.html) package can account for one- and two-way clustering in their analysis.\n", "\n", "Clustered errors in terms of one or multiple dimensions might arise in many empirical applications. For example, in a cross-sectional study, errors might be correlated (i) within regions (one-way clustering) or (ii) within regions and industries at the same time (two-way clustering). Another example for two-way clustering, discussed in [Chiang et al. (2021)](https://doi.org/10.1080/07350015.2021.1895815), refers to market share data with market shares being subject to shocks on the market and product level at the same time. We refer to [Cameron et al. (2011)](https://doi.org/10.1198/jbes.2010.07136) for an introduction to multiway clustering and a illustrative list of empirical examples.\n", "\n", "## Clustering and double machine learning\n", "\n", "Clustering creates a challenge to the double machine learning (DML) approach in terms of \n", "\n", "1. a necessary adjustment of the formulae used for estimation of the variance covariance matrix, standard errors, p-values etc., and,\n", "2. an adjusted resampling scheme for the cross-fitting algorithm.\n", "\n", "The first point equally applies to classical statistical models, for example a linear regression model (see, for example [Cameron et al. 2011](https://doi.org/10.1198/jbes.2010.07136)). The second point arises because the clustering implies a correlation of errors from train and test samples if the standard cross-fitting procedure suggested in [Chernozhukov et al. (2018)](https://doi.org/10.1111/ectj.12097) was employed. The DML approach builds on independent sample splits into partitions that are used for training of the machine learning (ML) model learners and generation of predictions that are eventually used for solving the score function. For a motivation of the necessity of sample splitting, we refer to the illustration example in the [user guide]( \n", "https://docs.doubleml.org/stable/guide/basics.html#sample-splitting-to-remove-bias-induced-by-overfitting) as well as to the explanation in [Chernozhukov et al. (2018)](https://doi.org/10.1111/ectj.12097) .\n", "\n", "In order to achieve independent data splits in a setting with one-way or multi-way clustering, [Chiang et al. (2021)](https://doi.org/10.1080/07350015.2021.1895815) develop an updated $K$-fold sample splitting procedure that ensures independent sample splits: The data set is split into disjoint partitions in terms of all clustering dimensions. For example, in a situation with two-way clustering, the data is split into $K^2$ folds. The machine learning models are then trained on a specific fold and used for generation of predictions in hold-out samples. Thereby, the sample splitting procedure ensures that the hold-out samples do not contain observations of the same clusters as used for training." ] }, { "cell_type": "code", "execution_count": 1, "id": "76984720", "metadata": { "vscode": { "languageId": "r" } }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "Warning message:\n", "\"Paket 'mlr3' wurde unter R Version 4.2.3 erstellt\"\n" ] } ], "source": [ "library('hdm')\n", "library('DoubleML')\n", "library('mlr3')\n", "library('mlr3learners')\n", "# surpress messages from mlr3 package during fitting\n", "lgr::get_logger(\"mlr3\")$set_threshold(\"warn\")\n", "\n", "library('ggplot2')\n", "library('reshape2')\n", "library('gridExtra')" ] }, { "attachments": {}, "cell_type": "markdown", "id": "171f1458", "metadata": {}, "source": [ "## A Motivating Example: Two-Way Cluster Robust DML\n", "\n", "In a first part, we show how the two-way cluster robust double machine learning (DML) ([Chiang et al. 2021](https://doi.org/10.1080/07350015.2021.1895815)) can be implemented with the [DoubleML](https://docs.doubleml.org/stable/index.html) package.\n", "[Chiang et al. (2021)](https://doi.org/10.1080/07350015.2021.1895815) consider double-indexed data\n", "\n", "\\begin{equation}\n", "\\lbrace W_{ij}: i \\in \\lbrace 1, \\ldots, N \\rbrace, j \\in \\lbrace 1, \\ldots, M \\rbrace \\rbrace\n", "\\end{equation}\n", "\n", "and the partially linear IV regression model (PLIV)\n", "\n", "$$\\begin{aligned}\n", "Y_{ij} = D_{ij} \\theta_0 + g_0(X_{ij}) + \\epsilon_{ij}, & &\\mathbb{E}(\\epsilon_{ij} | X_{ij}, Z_{ij}) = 0, \\\\\n", "Z_{ij} = m_0(X_{ij}) + v_{ij}, & &\\mathbb{E}(v_{ij} | X_{ij}) = 0.\n", "\\end{aligned}$$" ] }, { "attachments": {}, "cell_type": "markdown", "id": "349c3e43", "metadata": {}, "source": [ "### Simulate two-way cluster data\n", "\n", "We use the PLIV data generating process described in Section 4.1 of [Chiang et al. (2021)](https://doi.org/10.1080/07350015.2021.1895815).\n", "The DGP is defined as\n", "$$\\begin{aligned}\n", "Z_{ij} &= X_{ij}' \\xi_0 + V_{ij}, \\\\\n", "D_{ij} &= Z_{ij}' \\pi_{10} + X_{ij}' \\pi_{20} + v_{ij}, \\\\\n", "Y_{ij} &= D_{ij} \\theta + X_{ij}' \\zeta_0 + \\varepsilon_{ij},\n", "\\end{aligned}$$\n", "with\n", "$$\\begin{aligned}\n", "X_{ij} &= (1 - \\omega_1^X - \\omega_2^X) \\alpha_{ij}^X\n", "+ \\omega_1^X \\alpha_{i}^X + \\omega_2^X \\alpha_{j}^X, \\\\\n", "\\varepsilon_{ij} &= (1 - \\omega_1^\\varepsilon - \\omega_2^\\varepsilon) \\alpha_{ij}^\\varepsilon\n", "+ \\omega_1^\\varepsilon \\alpha_{i}^\\varepsilon + \\omega_2^\\varepsilon \\alpha_{j}^\\varepsilon, \\\\\n", "v_{ij} &= (1 - \\omega_1^v - \\omega_2^v) \\alpha_{ij}^v\n", "+ \\omega_1^v \\alpha_{i}^v + \\omega_2^v \\alpha_{j}^v, \\\\\n", "V_{ij} &= (1 - \\omega_1^V - \\omega_2^V) \\alpha_{ij}^V\n", "+ \\omega_1^V \\alpha_{i}^V + \\omega_2^V \\alpha_{j}^V,\n", "\\end{aligned}$$\n", "and $\\alpha_{ij}^X, \\alpha_{i}^X, \\alpha_{j}^X \\sim \\mathcal{N}(0, \\Sigma)$\n", "where $\\Sigma$ is a $p_x \\times p_x$ matrix with entries\n", "$\\Sigma_{kj} = s_X^{|j-k|}$.\n", "Further\n", "$$\\begin{aligned}\n", "\\left(\\begin{matrix} \\alpha_{ij}^\\varepsilon \\\\ \\alpha_{ij}^v \\end{matrix}\\right),\n", "\\left(\\begin{matrix} \\alpha_{i}^\\varepsilon \\\\ \\alpha_{i}^v \\end{matrix}\\right),\n", "\\left(\\begin{matrix} \\alpha_{j}^\\varepsilon \\\\ \\alpha_{j}^v \\end{matrix}\\right)\n", "\\sim \\mathcal{N}\\left(0, \\left(\\begin{matrix} 1 & s_{\\varepsilon v} \\\\\n", "s_{\\varepsilon v} & 1 \\end{matrix} \\right) \\right)\n", "\\end{aligned}$$\n", "and $\\alpha_{ij}^V, \\alpha_{i}^V, \\alpha_{j}^V \\sim \\mathcal{N}(0, 1)$.\n", "\n", "Data from this DGP can be generated with the [make_pliv_multiway_cluster_CKMS2021()](https://docs.doubleml.org/r/stable/reference/make_pliv_multiway_cluster_CKMS2021.html) function from [DoubleML](https://docs.doubleml.org/stable/index.html).\n", "Analogously to [Chiang et al. (2021, Section 5)](https://doi.org/10.1080/07350015.2021.1895815)\n", "we use the following parameter setting:\n", "$\\theta=1.0$, $N=M=25$, $p_x=100$, $\\pi_{10}=1.0$, $\\omega_X = \\omega_{\\varepsilon} = \\omega_V = \\omega_v = (0.25, 0.25)$, $s_X = s_{\\varepsilon v} = 0.25$ and the $j$-th entries of the $p_x$-vectors $\\zeta_0 = \\pi_{20} = \\xi_0$ are $(\\zeta_{0})_j = 0.5^j$.\n", "This are also the default values of [make_pliv_multiway_cluster_CKMS2021()](https://docs.doubleml.org/r/stable/reference/make_pliv_multiway_cluster_CKMS2021.html)." ] }, { "cell_type": "code", "execution_count": 2, "id": "1f53686a", "metadata": { "vscode": { "languageId": "r" } }, "outputs": [], "source": [ "# Set the simulation parameters\n", "N = 25 # number of observations (first dimension)\n", "M = 25 # number of observations (second dimension)\n", "dim_X = 100 # dimension of X\n", "set.seed(3141) # set seed\n", "\n", "obj_dml_data = make_pliv_multiway_cluster_CKMS2021(N, M, dim_X)" ] }, { "attachments": {}, "cell_type": "markdown", "id": "0ea047f4", "metadata": {}, "source": [ "### Data-Backend for Cluster Data\n", "The implementation of cluster robust double machine learning is based on a special data-backend called [DoubleMLClusterData](https://docs.doubleml.org/r/stable/reference/DoubleMLClusterData.html). As compared to the standard data-backend [DoubleMLData](https://docs.doubleml.org/r/stable/reference/DoubleMLData.html), users can specify the clustering variables during instantiation of a [DoubleMLClusterData](https://docs.doubleml.org/r/stable/reference/DoubleMLClusterData.html) object. The estimation framework will subsequently account for the provided clustering options." ] }, { "cell_type": "code", "execution_count": 3, "id": "dc5ab7a6", "metadata": { "vscode": { "languageId": "r" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "================= DoubleMLClusterData Object ==================\n", "\n", "\n", "------------------ Data summary ------------------\n", "Outcome variable: Y\n", "Treatment variable(s): D\n", "Cluster variable(s): cluster_var_i, cluster_var_j\n", "Covariates: X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X12, X13, X14, X15, X16, X17, X18, X19, X20, X21, X22, X23, X24, X25, X26, X27, X28, X29, X30, X31, X32, X33, X34, X35, X36, X37, X38, X39, X40, X41, X42, X43, X44, X45, X46, X47, X48, X49, X50, X51, X52, X53, X54, X55, X56, X57, X58, X59, X60, X61, X62, X63, X64, X65, X66, X67, X68, X69, X70, X71, X72, X73, X74, X75, X76, X77, X78, X79, X80, X81, X82, X83, X84, X85, X86, X87, X88, X89, X90, X91, X92, X93, X94, X95, X96, X97, X98, X99, X100\n", "Instrument(s): Z\n", "No. Observations: 625\n" ] } ], "source": [ "# The simulated data is of type DoubleMLClusterData\n", "print(obj_dml_data)" ] }, { "cell_type": "code", "execution_count": 4, "id": "e3184de7", "metadata": { "vscode": { "languageId": "r" } }, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", "\t\n", "\t\n", "\n", "\n", "\t\n", "\t\n", "\t\n", "\t\n", "\t\n", "\t\n", "\n", "
A data.table: 6 × 105
X1X2X3X4X5X6X7X8X9X10X96X97X98X99X100YDcluster_var_icluster_var_jZ
<dbl><dbl><dbl><dbl><dbl><dbl><dbl><dbl><dbl><dbl><dbl><dbl><dbl><dbl><dbl><dbl><dbl><int><int><dbl>
-0.3707775 0.994168239-0.1045303-0.1145370 0.41341040 1.01925597 0.7776071-0.2467506 0.07456127-0.1795850 0.5763996 0.49530782-0.25401679 0.06895837-0.34967621 1.150408 0.9748910611 0.3522697
-0.1577657 0.490070931-0.0702127 0.8932105-0.02163217-0.08968939 0.5025850-0.5436005-0.51966955-1.0118095-0.6243811-0.07168291-0.57715074 0.20823898 0.01403089-1.364595-0.5003517412-0.1626685
0.4416552 0.366718627-0.1557093-0.3702770-0.32458367 0.07347676-0.2619317-0.2836059 0.94906344-0.3304269-0.2080787 0.76591188 0.01351638 0.30672815-0.22336235 1.010450 0.4211349413 1.2020435
0.1144500-0.009645422-0.2103034-0.7560824-0.02247976-0.13505272-0.3800694-0.3727679-0.42412729-0.8055563-0.9304028-0.20783816-0.39425708-0.91315015-0.67245350 1.342675 0.6745349414 0.8132463
-0.5050973-1.523977545-0.4584447 0.0853505 0.92369755-0.21624417-0.9961392-0.2191274-0.67410934-0.3788859-0.0695854 0.22505965-0.42073312 0.22375856 0.50672034-1.140861-0.5699994715-0.1213405
-0.1468115-0.175635027-1.0466028-0.4199952-0.19033538 0.88173062 0.5868472 0.2670691 0.57496671-0.9802393 0.3738573 0.20219609-1.52424539-0.12707800 0.01398951 0.363276 0.0835771416 0.7241399
\n" ], "text/latex": [ "A data.table: 6 × 105\n", "\\begin{tabular}{lllllllllllllllllllll}\n", " X1 & X2 & X3 & X4 & X5 & X6 & X7 & X8 & X9 & X10 & ⋯ & X96 & X97 & X98 & X99 & X100 & Y & D & cluster\\_var\\_i & cluster\\_var\\_j & Z\\\\\n", " & & & & & & & & & & ⋯ & & & & & & & & & & \\\\\n", "\\hline\n", "\t -0.3707775 & 0.994168239 & -0.1045303 & -0.1145370 & 0.41341040 & 1.01925597 & 0.7776071 & -0.2467506 & 0.07456127 & -0.1795850 & ⋯ & 0.5763996 & 0.49530782 & -0.25401679 & 0.06895837 & -0.34967621 & 1.150408 & 0.97489106 & 1 & 1 & 0.3522697\\\\\n", "\t -0.1577657 & 0.490070931 & -0.0702127 & 0.8932105 & -0.02163217 & -0.08968939 & 0.5025850 & -0.5436005 & -0.51966955 & -1.0118095 & ⋯ & -0.6243811 & -0.07168291 & -0.57715074 & 0.20823898 & 0.01403089 & -1.364595 & -0.50035174 & 1 & 2 & -0.1626685\\\\\n", "\t 0.4416552 & 0.366718627 & -0.1557093 & -0.3702770 & -0.32458367 & 0.07347676 & -0.2619317 & -0.2836059 & 0.94906344 & -0.3304269 & ⋯ & -0.2080787 & 0.76591188 & 0.01351638 & 0.30672815 & -0.22336235 & 1.010450 & 0.42113494 & 1 & 3 & 1.2020435\\\\\n", "\t 0.1144500 & -0.009645422 & -0.2103034 & -0.7560824 & -0.02247976 & -0.13505272 & -0.3800694 & -0.3727679 & -0.42412729 & -0.8055563 & ⋯ & -0.9304028 & -0.20783816 & -0.39425708 & -0.91315015 & -0.67245350 & 1.342675 & 0.67453494 & 1 & 4 & 0.8132463\\\\\n", "\t -0.5050973 & -1.523977545 & -0.4584447 & 0.0853505 & 0.92369755 & -0.21624417 & -0.9961392 & -0.2191274 & -0.67410934 & -0.3788859 & ⋯ & -0.0695854 & 0.22505965 & -0.42073312 & 0.22375856 & 0.50672034 & -1.140861 & -0.56999947 & 1 & 5 & -0.1213405\\\\\n", "\t -0.1468115 & -0.175635027 & -1.0466028 & -0.4199952 & -0.19033538 & 0.88173062 & 0.5868472 & 0.2670691 & 0.57496671 & -0.9802393 & ⋯ & 0.3738573 & 0.20219609 & -1.52424539 & -0.12707800 & 0.01398951 & 0.363276 & 0.08357714 & 1 & 6 & 0.7241399\\\\\n", "\\end{tabular}\n" ], "text/markdown": [ "\n", "A data.table: 6 × 105\n", "\n", "| X1 <dbl> | X2 <dbl> | X3 <dbl> | X4 <dbl> | X5 <dbl> | X6 <dbl> | X7 <dbl> | X8 <dbl> | X9 <dbl> | X10 <dbl> | ⋯ ⋯ | X96 <dbl> | X97 <dbl> | X98 <dbl> | X99 <dbl> | X100 <dbl> | Y <dbl> | D <dbl> | cluster_var_i <int> | cluster_var_j <int> | Z <dbl> |\n", "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", "| -0.3707775 | 0.994168239 | -0.1045303 | -0.1145370 | 0.41341040 | 1.01925597 | 0.7776071 | -0.2467506 | 0.07456127 | -0.1795850 | ⋯ | 0.5763996 | 0.49530782 | -0.25401679 | 0.06895837 | -0.34967621 | 1.150408 | 0.97489106 | 1 | 1 | 0.3522697 |\n", "| -0.1577657 | 0.490070931 | -0.0702127 | 0.8932105 | -0.02163217 | -0.08968939 | 0.5025850 | -0.5436005 | -0.51966955 | -1.0118095 | ⋯ | -0.6243811 | -0.07168291 | -0.57715074 | 0.20823898 | 0.01403089 | -1.364595 | -0.50035174 | 1 | 2 | -0.1626685 |\n", "| 0.4416552 | 0.366718627 | -0.1557093 | -0.3702770 | -0.32458367 | 0.07347676 | -0.2619317 | -0.2836059 | 0.94906344 | -0.3304269 | ⋯ | -0.2080787 | 0.76591188 | 0.01351638 | 0.30672815 | -0.22336235 | 1.010450 | 0.42113494 | 1 | 3 | 1.2020435 |\n", "| 0.1144500 | -0.009645422 | -0.2103034 | -0.7560824 | -0.02247976 | -0.13505272 | -0.3800694 | -0.3727679 | -0.42412729 | -0.8055563 | ⋯ | -0.9304028 | -0.20783816 | -0.39425708 | -0.91315015 | -0.67245350 | 1.342675 | 0.67453494 | 1 | 4 | 0.8132463 |\n", "| -0.5050973 | -1.523977545 | -0.4584447 | 0.0853505 | 0.92369755 | -0.21624417 | -0.9961392 | -0.2191274 | -0.67410934 | -0.3788859 | ⋯ | -0.0695854 | 0.22505965 | -0.42073312 | 0.22375856 | 0.50672034 | -1.140861 | -0.56999947 | 1 | 5 | -0.1213405 |\n", "| -0.1468115 | -0.175635027 | -1.0466028 | -0.4199952 | -0.19033538 | 0.88173062 | 0.5868472 | 0.2670691 | 0.57496671 | -0.9802393 | ⋯ | 0.3738573 | 0.20219609 | -1.52424539 | -0.12707800 | 0.01398951 | 0.363276 | 0.08357714 | 1 | 6 | 0.7241399 |\n", "\n" ], "text/plain": [ " X1 X2 X3 X4 X5 X6 \n", "1 -0.3707775 0.994168239 -0.1045303 -0.1145370 0.41341040 1.01925597\n", "2 -0.1577657 0.490070931 -0.0702127 0.8932105 -0.02163217 -0.08968939\n", "3 0.4416552 0.366718627 -0.1557093 -0.3702770 -0.32458367 0.07347676\n", "4 0.1144500 -0.009645422 -0.2103034 -0.7560824 -0.02247976 -0.13505272\n", "5 -0.5050973 -1.523977545 -0.4584447 0.0853505 0.92369755 -0.21624417\n", "6 -0.1468115 -0.175635027 -1.0466028 -0.4199952 -0.19033538 0.88173062\n", " X7 X8 X9 X10 ⋯ X96 X97 \n", "1 0.7776071 -0.2467506 0.07456127 -0.1795850 ⋯ 0.5763996 0.49530782\n", "2 0.5025850 -0.5436005 -0.51966955 -1.0118095 ⋯ -0.6243811 -0.07168291\n", "3 -0.2619317 -0.2836059 0.94906344 -0.3304269 ⋯ -0.2080787 0.76591188\n", "4 -0.3800694 -0.3727679 -0.42412729 -0.8055563 ⋯ -0.9304028 -0.20783816\n", "5 -0.9961392 -0.2191274 -0.67410934 -0.3788859 ⋯ -0.0695854 0.22505965\n", "6 0.5868472 0.2670691 0.57496671 -0.9802393 ⋯ 0.3738573 0.20219609\n", " X98 X99 X100 Y D cluster_var_i\n", "1 -0.25401679 0.06895837 -0.34967621 1.150408 0.97489106 1 \n", "2 -0.57715074 0.20823898 0.01403089 -1.364595 -0.50035174 1 \n", "3 0.01351638 0.30672815 -0.22336235 1.010450 0.42113494 1 \n", "4 -0.39425708 -0.91315015 -0.67245350 1.342675 0.67453494 1 \n", "5 -0.42073312 0.22375856 0.50672034 -1.140861 -0.56999947 1 \n", "6 -1.52424539 -0.12707800 0.01398951 0.363276 0.08357714 1 \n", " cluster_var_j Z \n", "1 1 0.3522697\n", "2 2 -0.1626685\n", "3 3 1.2020435\n", "4 4 0.8132463\n", "5 5 -0.1213405\n", "6 6 0.7241399" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# The cluster variables are part of the DataFrame\n", "head(obj_dml_data$data)" ] }, { "attachments": {}, "cell_type": "markdown", "id": "983802bf", "metadata": {}, "source": [ "### Initialize the objects of class `DoubleMLPLIV`" ] }, { "cell_type": "code", "execution_count": 5, "id": "74cf6b1f", "metadata": { "vscode": { "languageId": "r" } }, "outputs": [], "source": [ "# Set machine learning methods for l, m & r\n", "ml_l = lrn(\"regr.cv_glmnet\", nfolds = 10, s = \"lambda.min\")\n", "ml_m = lrn(\"regr.cv_glmnet\", nfolds = 10, s = \"lambda.min\")\n", "ml_r = lrn(\"regr.cv_glmnet\", nfolds = 10, s = \"lambda.min\")\n", "\n", "# initialize the DoubleMLPLIV object\n", "dml_pliv_obj = DoubleMLPLIV$new(obj_dml_data,\n", " ml_l, ml_m, ml_r,\n", " n_folds=3)" ] }, { "cell_type": "code", "execution_count": 6, "id": "c70d71fc", "metadata": { "vscode": { "languageId": "r" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "================= DoubleMLPLIV Object ==================\n", "\n", "\n", "------------------ Data summary ------------------\n", "Outcome variable: Y\n", "Treatment variable(s): D\n", "Covariates: X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X12, X13, X14, X15, X16, X17, X18, X19, X20, X21, X22, X23, X24, X25, X26, X27, X28, X29, X30, X31, X32, X33, X34, X35, X36, X37, X38, X39, X40, X41, X42, X43, X44, X45, X46, X47, X48, X49, X50, X51, X52, X53, X54, X55, X56, X57, X58, X59, X60, X61, X62, X63, X64, X65, X66, X67, X68, X69, X70, X71, X72, X73, X74, X75, X76, X77, X78, X79, X80, X81, X82, X83, X84, X85, X86, X87, X88, X89, X90, X91, X92, X93, X94, X95, X96, X97, X98, X99, X100\n", "Instrument(s): Z\n", "Cluster variable(s): cluster_var_i, cluster_var_j\n", "No. Observations: 625\n", "\n", "------------------ Score & algorithm ------------------\n", "Score function: partialling out\n", "DML algorithm: dml2\n", "\n", "------------------ Machine learner ------------------\n", "ml_l: regr.cv_glmnet\n", "ml_m: regr.cv_glmnet\n", "ml_r: regr.cv_glmnet\n", "\n", "------------------ Resampling ------------------\n", "No. folds per cluster: 3\n", "No. folds: 9\n", "No. repeated sample splits: 1\n", "Apply cross-fitting: TRUE\n", "\n", "------------------ Fit summary ------------------\n", " " ] }, { "name": "stderr", "output_type": "stream", "text": [ "fit() not yet called.\n", "\n" ] } ], "source": [ "print(dml_pliv_obj)" ] }, { "cell_type": "code", "execution_count": 7, "id": "04e4a525", "metadata": { "nbsphinx": "hidden", "vscode": { "languageId": "r" } }, "outputs": [], "source": [ "library(RColorBrewer)\n", "coul <- rev(colorRampPalette(brewer.pal(8, \"RdBu\"))(3))\n", "options(repr.plot.width = 10, repr.plot.height = 10)\n", "\n", "plt_smpls = function(smpls, n_folds) {\n", " df = matrix(0, nrow = N*M, ncol = n_folds)\n", " for (i_fold in 1:n_folds){\n", " df[smpls$train_ids[[i_fold]], i_fold] = -1\n", " df[smpls$test_ids[[i_fold]], i_fold] = 1\n", " }\n", "\n", " heatmap(df, Rowv=NA, Colv=NA, col=coul, cexRow=1.5, cexCol=1.5, scale='none')\n", "}\n", "\n", "plt_smpls_cluster = function(smpls_cluster, n_folds, n_folds_per_cluster) {\n", " #options(repr.plot.width = 6, repr.plot.height = 6)\n", " plots = list()\n", " for (i_fold in 1:n_folds){\n", " mat = matrix(0, nrow = M, ncol = N)\n", " for (k in smpls_cluster$train_ids[[i_fold]][[1]]) {\n", " for (l in smpls_cluster$train_ids[[i_fold]][[2]]) {\n", " mat[k, l] = -1\n", " }\n", " }\n", " for (k in smpls_cluster$test_ids[[i_fold]][[1]]) {\n", " for (l in smpls_cluster$test_ids[[i_fold]][[2]]) {\n", " mat[k, l] = 1\n", " }\n", " }\n", " l = (i_fold-1) %% n_folds_per_cluster + 1\n", " k = ((i_fold-1) %/% n_folds_per_cluster)+1\n", " df = data.frame(mat)\n", " cols = names(df)\n", " names(df) = 1:N\n", " df$id = 1:N\n", " df_plot = melt(df, id.var = 'id')\n", " df_plot$value = factor(df_plot$value)\n", " plots[[i_fold]] = ggplot(data = df_plot, aes(x=id, y=variable)) + \n", " geom_tile(aes(fill=value), colour = \"grey50\") +\n", " scale_fill_manual(values = c(\"darkblue\", \"white\", \"darkred\")) +\n", " theme(text = element_text(size=15))\n", " # ToDo: Add Subplot titles\n", " if (k == 3) {\n", " plots[[i_fold]] = plots[[i_fold]] + xlab(expression(paste('Second Cluster Variable ', l)))\n", " } else {\n", " plots[[i_fold]] = plots[[i_fold]] + xlab('')\n", " }\n", " if (l == 1) {\n", " plots[[i_fold]] = plots[[i_fold]] + ylab(expression(paste('First Cluster Variable ', k)))\n", " } else {\n", " plots[[i_fold]] = plots[[i_fold]] + ylab('')\n", " }\n", " }\n", " return(plots)\n", "}" ] }, { "attachments": {}, "cell_type": "markdown", "id": "76f4b841", "metadata": {}, "source": [ "### Cluster Robust Cross Fitting\n", "A key element of cluster robust DML ([Chiang et al. 2021](https://doi.org/10.1080/07350015.2021.1895815)) is a special sample splitting used for the cross-fitting.\n", "In case of two-way clustering, we assume $N$ clusters in the first dimension and $M$ clusters in the second dimension.\n", "\n", "For $K$-fold cross-fitting, [Chiang et al. (2021)](https://doi.org/10.1080/07350015.2021.1895815) proposed to randomly partition $[N]:=\\{1,\\ldots,N\\}$ into $K$ subsets $\\{I_1, \\ldots, I_K\\}$ and $[M]:=\\{1,\\ldots,N\\}$ into $K$ subsets $\\{J_1, \\ldots, J_K\\}$.\n", "Effectively, one then considers $K^2$ folds.\n", "Basically for each $(k, \\ell) \\in \\{1, \\ldots, K\\} \\times \\{1, \\ldots, K\\}$, the nuisance functions are estimated for all double-indexed observations in $([N]\\setminus I_K) \\times ([M]\\setminus J_\\ell)$, i.e.,\n", "$$\n", "\\hat{\\eta}_{k\\ell} = \\hat{\\eta}\\left((W_{ij})_{(i,j)\\in ([N]\\setminus I_K) \\times ([M]\\setminus J_\\ell)}\\right)\n", "$$\n", "The causal parameter is then estimated as usual by solving a moment condition with a Neyman orthogonal score function.\n", "For two-way cluster robust double machine learning with algorithm [DML2](https://docs.doubleml.org/stable/guide/algorithms.html#algorithm-dml2) this results in solving\n", "$$\n", "\\frac{1}{K^2} \\sum_{k=1}^{K} \\sum_{\\ell=1}^{K} \\frac{1}{|I_k| |J_\\ell|} \\sum_{(i,j) \\in I_K \\times J_\\ell}\n", "\\psi(W_{ij}, \\tilde{\\theta}_0, \\hat{\\eta}_{k\\ell}) = 0\n", "$$\n", "for $\\tilde{\\theta}_0$.\n", "Here $|I_k|$ denotes the cardinality, i.e., the number of clusters in the $k$-th fold for the first cluster variable." ] }, { "attachments": {}, "cell_type": "markdown", "id": "8b3239eb", "metadata": {}, "source": [ "We can visualize the sample splitting of the $N \\cdot M = 625$ observations into $K \\cdot K = 9$ folds. The following heat map illustrates the partitioned data set that is split into $K=9$ folds. The horizontal axis corresponds to the fold indices and the vertical axis to the indices of the observations. A blue field indicates that the observation $i$ is used for fitting the nuisance part, red indicates that the fold is used for prediction generation and white means that an observation is left out from the sample splitting. \n", "\n", "For example, the first observation as displayed on the very bottom of the figure is used for training of the nuisance parts in the first, second, fourth and fifth fold and used for generation of the predictions in fold nine. At the same time the observation is left out from the sample splitting procedure in folds three, six, seven and eight." ] }, { "cell_type": "code", "execution_count": 8, "id": "6de28e86", "metadata": { "vscode": { "languageId": "r" } }, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "plot without title" ] }, "metadata": { "image/png": { "height": 600, "width": 600 } }, "output_type": "display_data" } ], "source": [ "# The function plt_smpls is defined at the end of the Notebook\n", "plt_smpls(dml_pliv_obj$smpls[[1]], dml_pliv_obj$n_folds)" ] }, { "attachments": {}, "cell_type": "markdown", "id": "73cfaae5", "metadata": {}, "source": [ "If we visualize the sample splitting in terms of the cluster variables, the partitioning of the data into $9$ folds $I_k \\times J_\\ell$ becomes clear.\n", "The identifiers for the first cluster variable $[N]:=\\{1,\\ldots,N\\}$ have been randomly partioned into $K=3$ folds denoted by $\\{I_1, I_2, I_3\\}$ and the identifiers for the second cluster variable $[M]:=\\{1,\\ldots,M\\}$ have also been randomly partioned into $K=3$ folds denoted by $\\{J_1, J_2, J_3\\}$.\n", "By considering every combination $I_k \\times J_\\ell$ for $1 \\leq k, \\ell \\leq K = 3$ we effectively base the cross-fitting on $9$ folds.\n", "\n", "We now want to focus on the top-left sub-plot showing the partitioning of the cluster data for the first fold.\n", "The $x$-axis corresponds to the first cluster variable and the $y$-axis to the second cluster variable.\n", "Observations with cluster variables $(i,j) \\in I_K \\times J_\\ell$ are used for estimation of the target parameter $\\tilde{\\theta}_0$ by solving a Neyman orthogonal score function.\n", "For estimation of the nuisance function, we only use observation where neither the first cluster variable is in $I_K$ nor the second cluster variable is in $J_\\ell$, i.e., we use observations indexed by $(i,j)\\in ([N]\\setminus I_K) \\times ([M]\\setminus J_\\ell)$ to estimate the nuisance functions\n", "$$\n", "\\hat{\\eta}_{k\\ell} = \\hat{\\eta}\\left((W_{ij})_{(i,j)\\in ([N]\\setminus I_K) \\times ([M]\\setminus J_\\ell)}\\right).\n", "$$\n", "This way we guarantee that there are never observations from the same cluster (first and/or second cluster dimension) in the sample for the nuisance function estimation (blue) and at the same time in the sample for solving the score function (red). As a result of this special sample splitting proposed by [Chiang et al. (2021)](https://doi.org/10.1080/07350015.2021.1895815), the observations in the score (red) and nuisance (blue) sample can be considered independent and the standard cross-fitting approach for double machine learning can be applied." ] }, { "cell_type": "code", "execution_count": 9, "id": "8674ef61", "metadata": { "tags": [ "nbsphinx-thumbnail" ], "vscode": { "languageId": "r" } }, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "plot without title" ] }, "metadata": { "image/png": { "height": 600, "width": 720 } }, "output_type": "display_data" } ], "source": [ "# The function plt_smpls_cluster is defined at the end of the Notebook\n", "options(repr.plot.width = 12, repr.plot.height = 10)\n", "plots = plt_smpls_cluster(dml_pliv_obj$smpls_cluster[[1]],\n", " dml_pliv_obj$n_folds,\n", " sqrt(dml_pliv_obj$n_folds))\n", "grid.arrange(grobs=plots, ncol = 3, nrow = 3)" ] }, { "attachments": {}, "cell_type": "markdown", "id": "f4fad944", "metadata": {}, "source": [ "### Cluster Robust Standard Errors\n", "In the abstract base class `DoubleML` the estimation of cluster robust standard errors is implemented for all supported double machine learning models.\n", "It is based on the assumption of a linear Neyman orthogonal score function.\n", "We use the notation $n \\wedge m := \\min\\{n,m\\}$.\n", "For the the asymptotic variance of\n", "$\\sqrt{\\underline{C}}(\\tilde{\\theta_0} - \\theta_0)$ with\n", "$\\underline{C} := N \\wedge M$\n", "[Chiang et al. (2021)](https://doi.org/10.1080/07350015.2021.1895815) then propose the following estimator\n", "$$\n", "\\hat{\\sigma}^2 = \\hat{J}^{-1} \\hat{\\Gamma} \\hat{J}^{-1}\n", "$$\n", "where\n", "$$\n", "\\begin{aligned}\n", "\\hat{\\Gamma} = \\frac{1}{K^2} \\sum_{(k, \\ell) \\in[K]^2}\n", "\\Bigg[ \\frac{|I_k| \\wedge |J_\\ell|}{(|I_k||J_\\ell|)^2}\n", "\\bigg(&\\sum_{i \\in I_k} \\sum_{j \\in J_\\ell} \\sum_{j' \\in J_\\ell}\n", "\\psi(W_{ij}; \\tilde{\\theta}, \\hat{\\eta}_{k \\ell}) \\psi(W_{ij'}; \\tilde{\\theta}_0, \\hat{\\eta}_{k \\ell}) \\\\\n", "&+ \\sum_{i \\in I_k} \\sum_{i' \\in I_k} \\sum_{j \\in J_\\ell}\n", "\\psi(W_{ij}; \\tilde{\\theta}, \\hat{\\eta}_{k \\ell}) \\psi(W_{i'j}; \\tilde{\\theta}_0, \\hat{\\eta}_{k \\ell})\n", "\\bigg)\n", "\\Bigg]\n", "\\end{aligned}$$\n", "and\n", "$$\n", "\\begin{aligned}\n", "\\hat{J} = \\frac{1}{K^2} \\sum_{(k, \\ell) \\in[K]^2} \\frac{1}{|I_k||J_\\ell|}\n", "\\sum_{i \\in I_k} \\sum_{j \\in J_\\ell}\n", "\\psi_a(W_{ij}; \\tilde{\\theta}_0, \\hat{\\eta}_{k \\ell}).\n", "\\end{aligned}\n", "$$\n", "A $(1-\\alpha)$ confidence interval is then given by ([Chiang et al. 2021](https://doi.org/10.1080/07350015.2021.1895815))\n", "$$\\begin{aligned}\n", "\\left[\n", "\\tilde{\\theta} \\pm \\Phi^{-1}(1-\\alpha/2) \\sqrt{\\hat{\\sigma}^2 / \\underline{C}}\n", "\\right]\n", "\\end{aligned}\n", "$$\n", "with $\\underline{C} = N \\wedge M$." ] }, { "cell_type": "code", "execution_count": 10, "id": "23a031d1", "metadata": { "vscode": { "languageId": "r" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Estimates and significance testing of the effect of target variables\n", " Estimate. Std. Error t value Pr(>|t|) \n", "D 0.8909 0.1258 7.084 1.4e-12 ***\n", "---\n", "Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1\n", "\n", "\n" ] } ], "source": [ "# Estimate the PLIV model with cluster robust double machine learning\n", "dml_pliv_obj$fit()\n", "dml_pliv_obj$summary()" ] }, { "attachments": {}, "cell_type": "markdown", "id": "dae66229", "metadata": {}, "source": [ "## (One-Way) Cluster Robust Double Machine Learing\n", "\n", "We again use the PLIV data generating process described in Section 4.1 of [Chiang et al. (2021)](https://doi.org/10.1080/07350015.2021.1895815).\n", "To obtain one-way clustered data, we set the following weights to zero\n", "$$\n", "\\omega_2^X = \\omega_2^\\varepsilon = \\omega_2^v = \\omega_2^V = 0.\n", "$$\n", "Again we can simulate this data with [make_pliv_multiway_cluster_CKMS2021()](https://docs.doubleml.org/r/stable/reference/make_pliv_multiway_cluster_CKMS2021.html). To prepare the data-backend for one-way clustering, we only have to alter the `cluster_cols` to be `'cluster_var_i'`." ] }, { "cell_type": "code", "execution_count": 11, "id": "62076b01", "metadata": { "vscode": { "languageId": "r" } }, "outputs": [], "source": [ "obj_dml_data = make_pliv_multiway_cluster_CKMS2021(N, M, dim_X,\n", " omega_X = c(0.25, 0),\n", " omega_epsilon = c(0.25, 0),\n", " omega_v = c(0.25, 0),\n", " omega_V = c(0.25, 0))" ] }, { "cell_type": "code", "execution_count": 12, "id": "b818119b", "metadata": { "vscode": { "languageId": "r" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "================= DoubleMLClusterData Object ==================\n", "\n", "\n", "------------------ Data summary ------------------\n", "Outcome variable: Y\n", "Treatment variable(s): D\n", "Cluster variable(s): cluster_var_i\n", "Covariates: X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X12, X13, X14, X15, X16, X17, X18, X19, X20, X21, X22, X23, X24, X25, X26, X27, X28, X29, X30, X31, X32, X33, X34, X35, X36, X37, X38, X39, X40, X41, X42, X43, X44, X45, X46, X47, X48, X49, X50, X51, X52, X53, X54, X55, X56, X57, X58, X59, X60, X61, X62, X63, X64, X65, X66, X67, X68, X69, X70, X71, X72, X73, X74, X75, X76, X77, X78, X79, X80, X81, X82, X83, X84, X85, X86, X87, X88, X89, X90, X91, X92, X93, X94, X95, X96, X97, X98, X99, X100\n", "Instrument(s): Z\n", "No. Observations: 625\n" ] } ], "source": [ "obj_dml_data$cluster_cols = 'cluster_var_i'\n", "print(obj_dml_data)" ] }, { "cell_type": "code", "execution_count": 13, "id": "29cace52", "metadata": { "vscode": { "languageId": "r" } }, "outputs": [], "source": [ "# Set machine learning methods for l, m & r\n", "ml_l = lrn(\"regr.cv_glmnet\", nfolds = 10, s = \"lambda.min\")\n", "ml_m = lrn(\"regr.cv_glmnet\", nfolds = 10, s = \"lambda.min\")\n", "ml_r = lrn(\"regr.cv_glmnet\", nfolds = 10, s = \"lambda.min\")\n", "\n", "# initialize the DoubleMLPLIV object\n", "dml_pliv_obj = DoubleMLPLIV$new(obj_dml_data,\n", " ml_l, ml_m, ml_r,\n", " n_folds=3)" ] }, { "cell_type": "code", "execution_count": 14, "id": "94a58a15", "metadata": { "vscode": { "languageId": "r" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Estimates and significance testing of the effect of target variables\n", " Estimate. Std. Error t value Pr(>|t|) \n", "D 0.92905 0.04465 20.81 <2e-16 ***\n", "---\n", "Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1\n", "\n", "\n" ] } ], "source": [ "dml_pliv_obj$fit()\n", "dml_pliv_obj$summary()" ] }, { "attachments": {}, "cell_type": "markdown", "id": "a5901bc2", "metadata": {}, "source": [ "## Real-Data Application\n", "As a real-data application we revist the consumer demand example from [Chiang et al. (2021)](https://doi.org/10.1080/07350015.2021.1895815).\n", "The U.S. automobile data of [Berry, Levinsohn, and Pakes (1995)](https://doi.org/10.2307/2171802) is obtained from the `R` package [hdm](https://cran.r-project.org/web/packages/hdm/index.html). In this example, we consider different specifications for the cluster dimensions." ] }, { "attachments": {}, "cell_type": "markdown", "id": "5d103ae5", "metadata": {}, "source": [ "### Load and Process Data" ] }, { "cell_type": "code", "execution_count": 15, "id": "97f0c9fe", "metadata": { "vscode": { "languageId": "r" } }, "outputs": [], "source": [ "## Prepare the BLP data\n", "data(BLP);\n", "blp_data <- BLP$BLP;\n", "blp_data$price <- blp_data$price + 11.761\n", "blp_data$log_p = log(blp_data$price)" ] }, { "cell_type": "code", "execution_count": 16, "id": "5924f423", "metadata": { "vscode": { "languageId": "r" } }, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", "\t\n", "\t\n", "\n", "\n", "\t\n", "\t\n", "\t\n", "\t\n", "\t\n", "\t\n", "\n", "
A data.frame: 6 × 4
hpwtairmpdspace
<dbl><dbl><dbl><dbl>
10.528996901.8881461.1502
20.494324401.9359891.2780
30.467613401.7167991.4592
40.426540301.6878711.6068
50.452488701.5042861.6458
60.450870601.7268131.6224
\n" ], "text/latex": [ "A data.frame: 6 × 4\n", "\\begin{tabular}{r|llll}\n", " & hpwt & air & mpd & space\\\\\n", " & & & & \\\\\n", "\\hline\n", "\t1 & 0.5289969 & 0 & 1.888146 & 1.1502\\\\\n", "\t2 & 0.4943244 & 0 & 1.935989 & 1.2780\\\\\n", "\t3 & 0.4676134 & 0 & 1.716799 & 1.4592\\\\\n", "\t4 & 0.4265403 & 0 & 1.687871 & 1.6068\\\\\n", "\t5 & 0.4524887 & 0 & 1.504286 & 1.6458\\\\\n", "\t6 & 0.4508706 & 0 & 1.726813 & 1.6224\\\\\n", "\\end{tabular}\n" ], "text/markdown": [ "\n", "A data.frame: 6 × 4\n", "\n", "| | hpwt <dbl> | air <dbl> | mpd <dbl> | space <dbl> |\n", "|---|---|---|---|---|\n", "| 1 | 0.5289969 | 0 | 1.888146 | 1.1502 |\n", "| 2 | 0.4943244 | 0 | 1.935989 | 1.2780 |\n", "| 3 | 0.4676134 | 0 | 1.716799 | 1.4592 |\n", "| 4 | 0.4265403 | 0 | 1.687871 | 1.6068 |\n", "| 5 | 0.4524887 | 0 | 1.504286 | 1.6458 |\n", "| 6 | 0.4508706 | 0 | 1.726813 | 1.6224 |\n", "\n" ], "text/plain": [ " hpwt air mpd space \n", "1 0.5289969 0 1.888146 1.1502\n", "2 0.4943244 0 1.935989 1.2780\n", "3 0.4676134 0 1.716799 1.4592\n", "4 0.4265403 0 1.687871 1.6068\n", "5 0.4524887 0 1.504286 1.6458\n", "6 0.4508706 0 1.726813 1.6224" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "x_cols = c('hpwt', 'air', 'mpd', 'space')\n", "head(blp_data[x_cols])" ] }, { "cell_type": "code", "execution_count": 17, "id": "01411d79", "metadata": { "vscode": { "languageId": "r" } }, "outputs": [], "source": [ "iv_vars = as.data.frame(hdm:::constructIV(blp_data$firm.id,\n", " blp_data$cdid,\n", " blp_data$id,\n", " blp_data[x_cols]))" ] }, { "cell_type": "code", "execution_count": 18, "id": "fa28c802", "metadata": { "vscode": { "languageId": "r" } }, "outputs": [ { "data": { "text/html": [ "\n", "
  1. 'hpwt'
  2. 'air'
  3. 'mpd'
  4. 'space'
  5. 'I.hpwt.2.'
  6. 'I.air.2.'
  7. 'I.mpd.2.'
  8. 'I.space.2.'
  9. 'I.hpwt.3.'
  10. 'I.air.3.'
  11. 'I.mpd.3.'
  12. 'I.space.3.'
  13. 'hpwt.air'
  14. 'hpwt.mpd'
  15. 'hpwt.space'
  16. 'air.mpd'
  17. 'air.space'
  18. 'mpd.space'
  19. 'air.I.hpwt.2.'
  20. 'mpd.I.hpwt.2.'
  21. 'space.I.hpwt.2.'
  22. 'hpwt.I.air.2.'
  23. 'mpd.I.air.2.'
  24. 'space.I.air.2.'
  25. 'hpwt.I.mpd.2.'
  26. 'air.I.mpd.2.'
  27. 'space.I.mpd.2.'
  28. 'hpwt.I.space.2.'
  29. 'air.I.space.2.'
  30. 'mpd.I.space.2.'
\n" ], "text/latex": [ "\\begin{enumerate*}\n", "\\item 'hpwt'\n", "\\item 'air'\n", "\\item 'mpd'\n", "\\item 'space'\n", "\\item 'I.hpwt.2.'\n", "\\item 'I.air.2.'\n", "\\item 'I.mpd.2.'\n", "\\item 'I.space.2.'\n", "\\item 'I.hpwt.3.'\n", "\\item 'I.air.3.'\n", "\\item 'I.mpd.3.'\n", "\\item 'I.space.3.'\n", "\\item 'hpwt.air'\n", "\\item 'hpwt.mpd'\n", "\\item 'hpwt.space'\n", "\\item 'air.mpd'\n", "\\item 'air.space'\n", "\\item 'mpd.space'\n", "\\item 'air.I.hpwt.2.'\n", "\\item 'mpd.I.hpwt.2.'\n", "\\item 'space.I.hpwt.2.'\n", "\\item 'hpwt.I.air.2.'\n", "\\item 'mpd.I.air.2.'\n", "\\item 'space.I.air.2.'\n", "\\item 'hpwt.I.mpd.2.'\n", "\\item 'air.I.mpd.2.'\n", "\\item 'space.I.mpd.2.'\n", "\\item 'hpwt.I.space.2.'\n", "\\item 'air.I.space.2.'\n", "\\item 'mpd.I.space.2.'\n", "\\end{enumerate*}\n" ], "text/markdown": [ "1. 'hpwt'\n", "2. 'air'\n", "3. 'mpd'\n", "4. 'space'\n", "5. 'I.hpwt.2.'\n", "6. 'I.air.2.'\n", "7. 'I.mpd.2.'\n", "8. 'I.space.2.'\n", "9. 'I.hpwt.3.'\n", "10. 'I.air.3.'\n", "11. 'I.mpd.3.'\n", "12. 'I.space.3.'\n", "13. 'hpwt.air'\n", "14. 'hpwt.mpd'\n", "15. 'hpwt.space'\n", "16. 'air.mpd'\n", "17. 'air.space'\n", "18. 'mpd.space'\n", "19. 'air.I.hpwt.2.'\n", "20. 'mpd.I.hpwt.2.'\n", "21. 'space.I.hpwt.2.'\n", "22. 'hpwt.I.air.2.'\n", "23. 'mpd.I.air.2.'\n", "24. 'space.I.air.2.'\n", "25. 'hpwt.I.mpd.2.'\n", "26. 'air.I.mpd.2.'\n", "27. 'space.I.mpd.2.'\n", "28. 'hpwt.I.space.2.'\n", "29. 'air.I.space.2.'\n", "30. 'mpd.I.space.2.'\n", "\n", "\n" ], "text/plain": [ " [1] \"hpwt\" \"air\" \"mpd\" \"space\" \n", " [5] \"I.hpwt.2.\" \"I.air.2.\" \"I.mpd.2.\" \"I.space.2.\" \n", " [9] \"I.hpwt.3.\" \"I.air.3.\" \"I.mpd.3.\" \"I.space.3.\" \n", "[13] \"hpwt.air\" \"hpwt.mpd\" \"hpwt.space\" \"air.mpd\" \n", "[17] \"air.space\" \"mpd.space\" \"air.I.hpwt.2.\" \"mpd.I.hpwt.2.\" \n", "[21] \"space.I.hpwt.2.\" \"hpwt.I.air.2.\" \"mpd.I.air.2.\" \"space.I.air.2.\" \n", "[25] \"hpwt.I.mpd.2.\" \"air.I.mpd.2.\" \"space.I.mpd.2.\" \"hpwt.I.space.2.\"\n", "[29] \"air.I.space.2.\" \"mpd.I.space.2.\" " ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "formula = formula(paste0(\" ~ -1 + (hpwt + air + mpd + space)^2\",\n", " \"+ I(hpwt^2)*(air + mpd + space)\",\n", " \"+ I(air^2)*(hpwt + mpd + space)\",\n", " \"+ I(mpd^2)*(hpwt + air + space)\",\n", " \"+ I(space^2)*(hpwt + air + mpd)\",\n", " \"+ I(space^2) + I(hpwt^3) + I(air^3) + I(mpd^3) + I(space^3)\"))\n", "data_transf = data.frame(model.matrix(formula, blp_data))\n", "names(data_transf)" ] }, { "cell_type": "code", "execution_count": 19, "id": "5a2b5397", "metadata": { "vscode": { "languageId": "r" } }, "outputs": [], "source": [ "y_col = 'y'\n", "d_col = 'log_p'\n", "cluster_cols = c('model.id', 'cdid')\n", "all_z_cols = c('sum.other.hpwt', 'sum.other.mpd', 'sum.other.space')\n", "z_col = all_z_cols[1]" ] }, { "cell_type": "code", "execution_count": 20, "id": "2b945460", "metadata": { "vscode": { "languageId": "r" } }, "outputs": [], "source": [ "dml_df = cbind(blp_data[c(y_col, d_col, cluster_cols)],\n", " data_transf,\n", " iv_vars[all_z_cols])" ] }, { "attachments": {}, "cell_type": "markdown", "id": "6e06f4e7", "metadata": {}, "source": [ "### Initialize `DoubleMLClusterData` object" ] }, { "cell_type": "code", "execution_count": 21, "id": "34d05896", "metadata": { "vscode": { "languageId": "r" } }, "outputs": [], "source": [ "dml_data = DoubleMLClusterData$new(dml_df,\n", " y_col=y_col,\n", " d_cols=d_col,\n", " z_cols=z_col,\n", " cluster_cols=cluster_cols,\n", " x_cols=names(data_transf))" ] }, { "cell_type": "code", "execution_count": 22, "id": "4e1f8477", "metadata": { "vscode": { "languageId": "r" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "================= DoubleMLClusterData Object ==================\n", "\n", "\n", "------------------ Data summary ------------------\n", "Outcome variable: y\n", "Treatment variable(s): log_p\n", "Cluster variable(s): model.id, cdid\n", "Covariates: hpwt, air, mpd, space, I.hpwt.2., I.air.2., I.mpd.2., I.space.2., I.hpwt.3., I.air.3., I.mpd.3., I.space.3., hpwt.air, hpwt.mpd, hpwt.space, air.mpd, air.space, mpd.space, air.I.hpwt.2., mpd.I.hpwt.2., space.I.hpwt.2., hpwt.I.air.2., mpd.I.air.2., space.I.air.2., hpwt.I.mpd.2., air.I.mpd.2., space.I.mpd.2., hpwt.I.space.2., air.I.space.2., mpd.I.space.2.\n", "Instrument(s): sum.other.hpwt\n", "No. Observations: 2217\n" ] } ], "source": [ "print(dml_data)" ] }, { "cell_type": "code", "execution_count": 23, "id": "433a0193", "metadata": { "vscode": { "languageId": "r" } }, "outputs": [], "source": [ "lasso = lrn(\"regr.cv_glmnet\", nfolds = 10, s = \"lambda.min\")" ] }, { "cell_type": "code", "execution_count": 24, "id": "57378194", "metadata": { "vscode": { "languageId": "r" } }, "outputs": [], "source": [ "coef_df = data.frame(matrix(NA_real_, ncol = 4, nrow = 1))\n", "colnames(coef_df) = c('zero-way', 'one-way-product', 'one-way-market', 'two-way')\n", "rownames(coef_df) = all_z_cols[1]\n", "se_df = coef_df\n", "n_rep = 10" ] }, { "attachments": {}, "cell_type": "markdown", "id": "f859db86", "metadata": {}, "source": [ "### Two-Way Clustering with Respect to Product and Market" ] }, { "cell_type": "code", "execution_count": 25, "id": "b6648ff4", "metadata": { "vscode": { "languageId": "r" } }, "outputs": [], "source": [ "set.seed(1111)\n", "dml_data$z_cols = z_col\n", "dml_data$cluster_cols = c('model.id', 'cdid')\n", "dml_pliv = DoubleMLPLIV$new(dml_data,\n", " lasso, lasso, lasso,\n", " n_folds=2, n_rep=n_rep)\n", "dml_pliv$fit()\n", "coef_df[1, 4] = dml_pliv$coef\n", "se_df[1, 4] = dml_pliv$se" ] }, { "attachments": {}, "cell_type": "markdown", "id": "1c7652f1", "metadata": {}, "source": [ "### One-Way Clustering with Respect to the Product" ] }, { "cell_type": "code", "execution_count": 26, "id": "569f621d", "metadata": { "vscode": { "languageId": "r" } }, "outputs": [], "source": [ "set.seed(2222)\n", "dml_data$z_cols = z_col\n", "dml_data$cluster_cols = 'model.id'\n", "dml_pliv = DoubleMLPLIV$new(dml_data,\n", " lasso, lasso, lasso,\n", " n_folds=4, n_rep=n_rep)\n", "dml_pliv$fit()\n", "coef_df[1, 2] = dml_pliv$coef\n", "se_df[1, 2] = dml_pliv$se" ] }, { "attachments": {}, "cell_type": "markdown", "id": "729ea1f8", "metadata": {}, "source": [ "### One-Way Clustering with Respect to the Market" ] }, { "cell_type": "code", "execution_count": 27, "id": "dcb8c14c", "metadata": { "vscode": { "languageId": "r" } }, "outputs": [], "source": [ "set.seed(3333)\n", "dml_data$z_cols = z_col\n", "dml_data$cluster_cols = 'cdid'\n", "dml_pliv = DoubleMLPLIV$new(dml_data,\n", " lasso, lasso, lasso,\n", " n_folds=4, n_rep=n_rep)\n", "dml_pliv$fit()\n", "coef_df[1, 3] = dml_pliv$coef\n", "se_df[1, 3] = dml_pliv$se" ] }, { "attachments": {}, "cell_type": "markdown", "id": "99463f43", "metadata": {}, "source": [ "### No Clustering / Zero-Way Clustering" ] }, { "cell_type": "code", "execution_count": 28, "id": "854596e4", "metadata": { "vscode": { "languageId": "r" } }, "outputs": [], "source": [ "dml_data = DoubleMLData$new(dml_df,\n", " y_col=y_col,\n", " d_cols=d_col,\n", " z_cols=z_col,\n", " x_cols=names(data_transf))" ] }, { "cell_type": "code", "execution_count": 29, "id": "9998f02f", "metadata": { "vscode": { "languageId": "r" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "================= DoubleMLData Object ==================\n", "\n", "\n", "------------------ Data summary ------------------\n", "Outcome variable: y\n", "Treatment variable(s): log_p\n", "Covariates: hpwt, air, mpd, space, I.hpwt.2., I.air.2., I.mpd.2., I.space.2., I.hpwt.3., I.air.3., I.mpd.3., I.space.3., hpwt.air, hpwt.mpd, hpwt.space, air.mpd, air.space, mpd.space, air.I.hpwt.2., mpd.I.hpwt.2., space.I.hpwt.2., hpwt.I.air.2., mpd.I.air.2., space.I.air.2., hpwt.I.mpd.2., air.I.mpd.2., space.I.mpd.2., hpwt.I.space.2., air.I.space.2., mpd.I.space.2.\n", "Instrument(s): sum.other.hpwt\n", "No. Observations: 2217\n" ] } ], "source": [ "print(dml_data)" ] }, { "cell_type": "code", "execution_count": 30, "id": "9b76db04", "metadata": { "vscode": { "languageId": "r" } }, "outputs": [], "source": [ "set.seed(4444)\n", "dml_data$z_cols = z_col\n", "dml_pliv = DoubleMLPLIV$new(dml_data,\n", " lasso, lasso, lasso,\n", " n_folds=4, n_rep=n_rep)\n", "dml_pliv$fit()\n", "coef_df[1, 1] = dml_pliv$coef\n", "se_df[1, 1] = dml_pliv$se" ] }, { "attachments": {}, "cell_type": "markdown", "id": "3f71db0a", "metadata": {}, "source": [ "### Application Results" ] }, { "cell_type": "code", "execution_count": 31, "id": "d9112d98", "metadata": { "vscode": { "languageId": "r" } }, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", "\t\n", "\t\n", "\n", "\n", "\t\n", "\n", "
A data.frame: 1 × 4
zero-wayone-way-productone-way-markettwo-way
<dbl><dbl><dbl><dbl>
sum.other.hpwt-5.956047-5.747945-5.569911-5.257207
\n" ], "text/latex": [ "A data.frame: 1 × 4\n", "\\begin{tabular}{r|llll}\n", " & zero-way & one-way-product & one-way-market & two-way\\\\\n", " & & & & \\\\\n", "\\hline\n", "\tsum.other.hpwt & -5.956047 & -5.747945 & -5.569911 & -5.257207\\\\\n", "\\end{tabular}\n" ], "text/markdown": [ "\n", "A data.frame: 1 × 4\n", "\n", "| | zero-way <dbl> | one-way-product <dbl> | one-way-market <dbl> | two-way <dbl> |\n", "|---|---|---|---|---|\n", "| sum.other.hpwt | -5.956047 | -5.747945 | -5.569911 | -5.257207 |\n", "\n" ], "text/plain": [ " zero-way one-way-product one-way-market two-way \n", "sum.other.hpwt -5.956047 -5.747945 -5.569911 -5.257207" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "coef_df" ] }, { "cell_type": "code", "execution_count": 32, "id": "f98544f5", "metadata": { "vscode": { "languageId": "r" } }, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", "\t\n", "\t\n", "\n", "\n", "\t\n", "\n", "
A data.frame: 1 × 4
zero-wayone-way-productone-way-markettwo-way
<dbl><dbl><dbl><dbl>
sum.other.hpwt0.51079110.97314470.7158581.48404
\n" ], "text/latex": [ "A data.frame: 1 × 4\n", "\\begin{tabular}{r|llll}\n", " & zero-way & one-way-product & one-way-market & two-way\\\\\n", " & & & & \\\\\n", "\\hline\n", "\tsum.other.hpwt & 0.5107911 & 0.9731447 & 0.715858 & 1.48404\\\\\n", "\\end{tabular}\n" ], "text/markdown": [ "\n", "A data.frame: 1 × 4\n", "\n", "| | zero-way <dbl> | one-way-product <dbl> | one-way-market <dbl> | two-way <dbl> |\n", "|---|---|---|---|---|\n", "| sum.other.hpwt | 0.5107911 | 0.9731447 | 0.715858 | 1.48404 |\n", "\n" ], "text/plain": [ " zero-way one-way-product one-way-market two-way\n", "sum.other.hpwt 0.5107911 0.9731447 0.715858 1.48404" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "se_df" ] }, { "attachments": {}, "cell_type": "markdown", "id": "ca8e628b", "metadata": {}, "source": [ "## References\n", "Berry, S., Levinsohn, J., and Pakes, A. (1995), Automobile Prices in Market\n", "Equilibrium, Econometrica: Journal of the Econometric Society, 63, 841-890, doi: [10.2307/2171802](https://doi.org/10.2307/2171802).\n", "\n", "Cameron, A. C., Gelbach, J. B. and Miller, D. L. (2011), Robust Inference with Multiway Clustering, Journal of Business & Economic Statistics, 29:2, 238-249, doi: [10.1198/jbes.2010.07136](https://doi.org/10.1198/jbes.2010.07136).\n", "\n", "Chernozhukov, V., Chetverikov, D., Demirer, M., Duflo, E., Hansen, C., Newey, W. and Robins, J. (2018), Double/debiased machine learning for treatment and structural parameters. The Econometrics Journal, 21: C1-C68, doi: [10.1111/ectj.12097](https://doi.org/10.1111/ectj.12097).\n", "\n", "Chiang, H. D., Kato K., Ma, Y. and Sasaki, Y. (2021), Multiway Cluster Robust Double/Debiased Machine Learning, Journal of Business & Economic Statistics, doi: [10.1080/07350015.2021.1895815](https://doi.org/10.1080/07350015.2021.1895815), arXiv: [1909.03489](https://arxiv.org/abs/1909.03489)." ] }, { "attachments": {}, "cell_type": "markdown", "id": "41aa4acd", "metadata": {}, "source": [ "## Define Helper Functions for Plotting" ] }, { "cell_type": "code", "execution_count": 33, "id": "6340b897", "metadata": { "vscode": { "languageId": "r" } }, "outputs": [], "source": [ "library(RColorBrewer)\n", "coul <- rev(colorRampPalette(brewer.pal(8, \"RdBu\"))(3))\n", "options(repr.plot.width = 10, repr.plot.height = 10)\n", "\n", "plt_smpls = function(smpls, n_folds) {\n", " df = matrix(0, nrow = N*M, ncol = n_folds)\n", " for (i_fold in 1:n_folds){\n", " df[smpls$train_ids[[i_fold]], i_fold] = -1\n", " df[smpls$test_ids[[i_fold]], i_fold] = 1\n", " }\n", "\n", " heatmap(df, Rowv=NA, Colv=NA, col=coul, cexRow=1.5, cexCol=1.5, scale='none')\n", "}\n", "\n", "plt_smpls_cluster = function(smpls_cluster, n_folds, n_folds_per_cluster) {\n", " #options(repr.plot.width = 6, repr.plot.height = 6)\n", " plots = list()\n", " for (i_fold in 1:n_folds){\n", " mat = matrix(0, nrow = M, ncol = N)\n", " for (k in smpls_cluster$train_ids[[i_fold]][[1]]) {\n", " for (l in smpls_cluster$train_ids[[i_fold]][[2]]) {\n", " mat[k, l] = -1\n", " }\n", " }\n", " for (k in smpls_cluster$test_ids[[i_fold]][[1]]) {\n", " for (l in smpls_cluster$test_ids[[i_fold]][[2]]) {\n", " mat[k, l] = 1\n", " }\n", " }\n", " l = (i_fold-1) %% n_folds_per_cluster + 1\n", " k = ((i_fold-1) %/% n_folds_per_cluster)+1\n", " df = data.frame(mat)\n", " cols = names(df)\n", " names(df) = 1:N\n", " df$id = 1:N\n", " df_plot = melt(df, id.var = 'id')\n", " df_plot$value = factor(df_plot$value)\n", " plots[[i_fold]] = ggplot(data = df_plot, aes(x=id, y=variable)) + \n", " geom_tile(aes(fill=value), colour = \"grey50\") +\n", " scale_fill_manual(values = c(\"darkblue\", \"white\", \"darkred\")) +\n", " theme(text = element_text(size=15))\n", " # ToDo: Add Subplot titles\n", " if (k == 3) {\n", " plots[[i_fold]] = plots[[i_fold]] + xlab(expression(paste('Second Cluster Variable ', l)))\n", " } else {\n", " plots[[i_fold]] = plots[[i_fold]] + xlab('')\n", " }\n", " if (l == 1) {\n", " plots[[i_fold]] = plots[[i_fold]] + ylab(expression(paste('First Cluster Variable ', k)))\n", " } else {\n", " plots[[i_fold]] = plots[[i_fold]] + ylab('')\n", " }\n", " }\n", " return(plots)\n", "}" ] } ], "metadata": { "celltoolbar": "Edit Metadata", "kernelspec": { "display_name": "R", "language": "R", "name": "ir" }, "language_info": { "codemirror_mode": "r", "file_extension": ".r", "mimetype": "text/x-r-source", "name": "R", "pygments_lexer": "r", "version": "4.2.2" } }, "nbformat": 4, "nbformat_minor": 5 }