## 5 Data Processing and Results
### Data Pre-Processing  
Data pre-processing involves two steps: (1) outliner detection, and (2) fill the missing data. For outlier detection, we consider two statistical methods, where one is the z-score method, and the other is the Interquartile Range (IQR) method. The outlier detection gives us an idea of the quality of the data. In the z-score method, a z-score is calculated for each data value based on how many standard deviations it is from the mean. If the z-score for a data item is greater than 3, then it is considered an outlier. The IQR method determines the outliers based on the spread of the middle 50% of the data, and the outliers are values outside of a range bounded by \(Q1-1.5\times IQR\), and \(Q3+1.5\times IQR\), where \(Q1\) is the first quantile value, \(Q3\) is the third quantile value, and \(IQR\) is the difference between \(Q3\) and \(Q1\). It is apparent that the \(IQR\) method would label more data items as outliers than the z-score method. We perform outlier detection for each predictor for each year of data that are available. Unlike developed countries, regions within China differ significantly in their financial and technological development levels. As such, even if some data items are identified as outliers statistically, they might not be real outliers due to measurement errors. As such, we choose not to replace the values of the outliers for the sake of authenticity of the study. We log the number of outliers and produce plots for each predictor detected by both outlier detection methods. The maximum number of outliers is \(1\) in each year of data (among the 30 regions) based on the z-score method, while the number of outliers ranges between 0 and 5 based on the IQR method. Because we choose to use 12 predictors for each subsystem, there are a total of 48 plots for our dataset \(O\). Readers who are interested in viewing these plots may generate these plots via an our source code. Here we only show in Figure 2 two plots for the predictor \(X_{11}\), one on the number of outliers based on the z-score method, and the other based on the IQR method. As much as we all would like to have access to all the data, it is inevitable that some data points are not available or invalid. In Table 3, we report the missing data status for each predictor in our dataset \(O\). In Table 4, we report the missing data status for the predictors in the reference dataset \(R\). The detailed definitions of the predictors in the reference dataset \(R\) are provided in Appendix A as part of Tables A1 and A2. Figure 2: The number of outliers determined by the z-score method (**left**), and those by the IQR method (**right**), both for predictor \(X_{11}\). We decide to use regression to fill the missing data. For each predictor, a Python script is developed to automatically identify missing data on a per row basis (i.e., for each region over the years 2002-2023). If any missing data item is found, the available data for the same region are used to train the regression model, and the trained regression model is then used to fill the missing data items. Considering that there are numerous regression models that we can choose from, we need to decide one that would produce the best estimated missing data. Because we are filling missing data, there is no direct way of determining the accuracy of the estimated missing data via regression. The best that we can do is to make the following hypothesis: if the mean squared error (MSE) of the regression on the available data for the region is smallest, then the estimated missing data would have the best accuracy. To be practical, we experiment with two regression models: (1) linear regression with polynomial features (LRPF), and (2) gradient boosting regression (GBR). For LRPF, we use three-fold cross-validation to tune the polynomial degree as the only tunable parameter. For GBR, we choose to use the default parameters. The training MSE is collected for both LRPF and GBR for whenever a missing data item is present.