text:
\section{Introduction}

Nonstationary spatial models have been used in a wide range of scientific applications, including disease modeling \citep{ejigu2020geostatistical}, remote sensing \citep{heaton2017nonstationary}, precision agriculture \citep{katzfuss2013bayesian}, precipitation modeling \citep{risser2015local}, and air pollutant monitoring \citep{fuentes2002interpolation}. Simple models assume second-order stationarity of the spatial process; however, this can be unrealistic since data are collected over heterogeneous domains. Here, the spatial processes can exhibit localized spatial behaviors. Although several methods \citep[cf.][]{fuentes2002interpolation, risser2015local, heaton2017nonstationary} have been developed for modeling nonstationary spatial data, these have focused primarily on Gaussian spatial data. Moreover, fitting these models poses both computational and inferential challenges, especially for large datasets. In this manuscript, we propose a scalable algorithm for fitting nonstationary non-Gaussian datasets. Our approach captures nonstationarity by partitioning the spatial domain and modeling local spatial processes using basis expansions. This new algorithm is computationally efficient in that: (1) partitioning the spatial domain permits parallelized computation on high-performance computation (HPC) systems; and (2) basis approximation of spatial processes dramatically reduces the computational overhead.

There is a growing literature on modeling nonstationary spatial datasets. Weighted average methods \citep{fuentes2001high, kim2005analyzing, risser2015local} combine localized spatial models to reduce computational costs. Basis function approximations \citep{nychka2002multiresolution, katzfuss2013bayesian, katzfuss2017multi,hefley2017basis} represent complex spatial processes using linear combinations of spatial basis functions. \cite{higdon1998process} and \cite{paciorek2006spatial} represent a nonstationary process using convolutions of spatially varying kernel functions. Based on the spatial partitioning strategies, some of these approaches are amenable to massive spatial datasets. For example, \cite{heaton2017nonstationary} develops a computationally efficient approach for large nonstationary spatial data by partitioning an entire domain into disjoint sets using a hierarchical clustering algorithm. \cite{katzfuss2017multi} constructs basis functions at multiple levels of resolution based on recursive partitioning of the spatial region. \cite{guhaniyogi2018meta} proposes a divide-and-conquer approach to generate a global posterior distribution by combining local posterior distributions from each subsample. Though these approaches scale well, they are limited to Gaussian responses.

Spatial generalized linear mixed models (SGLMMs) \citep{diggle1998model} are popular class of models designed for non-Gaussian spatial datasets. SGLMMs are widely used for both areal and point-referenced data, where latent Gaussian random fields can account for the spatial correlations. However, fitting SGLMMs for massive spatial datasets is computationally demanding since the dimension of correlated spatial processes grows with an increasing number of observations. Although several computational methods \citep{banerjee2008gaussian, hughes2013dimension, guan2018computationally, lee2019picar, zilber2020vecchia} have been proposed for large non-Gaussian spatial datasets, these methods assume second-order stationarity of the latent spatial processes.

In this manuscript, we propose a scalable approach for modeling massive nonstationary non-Gaussian spatial datasets. Our smooth mosaic basis approximation for nonstationary SGLMMs (SMB-SGLMMs) combines key ideas from weighted average approaches and basis approximations. SMB-SGLMM consists of four steps: (1) partition the spatial region using a spatial clustering algorithm \citep{heaton2017nonstationary}; (2) generate localized spatial basis functions; (3) fit a nonstationary basis-representation model to each partition; and (4) smooth the local processes using distance-based weighting scheme (smooth mosaic). Due to the partitioning and localized model fitting, we can leverage parallel computing, which greatly increases the scalability of the SMB-SGLMM method. To our knowledge, this study is the first attempt to develop a scalable algorithm for fitting large nonstationary non-Gaussian spatial datasets. Furthermore, our method provides an automated mechanism for selecting appropriate spatial basis functions. We also provide ready-to-use code written in \texttt{nimble} \citep{nimble2017}, a software environment for Bayesian inference.

The outline for the remainder of this paper is as follows. In Section 2, we introduce several nonstationary modeling approaches. We discuss the potential extension of stationary SGLMMs to nonstationary SGLMMs and discuss their challenges. In Section 3, we propose SMB-SGLMMs for massive spatial data and provide implementation details. Furthermore, we investigate the computational complexity of our method in detail. In Section 4, we study the performance of SMB-SGLMMs through simulated data examples. In Section 5, we apply SMB-SGLMMs to malaria incidence data and binary cloud mask data from satellite imagery. We conclude with a discussion and summary in Section 6.

\section{Nonstationary Modeling for Non-Gaussian Spatial Data}

Let $\mathbf{Z}=\lbrace Z(\mathbf{s}_i) \rbrace_{i=1}^{N}$ be the observed data and $\mathbf{X} \subset {\mathbb R}^{N\times p}$ be the matrix of covariates at the spatial locations $\mathbf{s}=\lbrace \mathbf{s}_i\rbrace_{i=1}^{N}$ in a spatial domain $\mathcal{S} \subseteq {\mathbb R}^2$. $\mathbf{W}=\lbrace W(\mathbf{s}_i) \rbrace_{i=1}^{N}$ is a mean-zero Gaussian process with covariance matrix $\Sigma\subset {\mathbb R}^{N\times N}$. Then SGLMMs can be defined as
\begin{nalign}
g\lbrace \mathbb{E}[\mathbf{Z}|\bm{\beta}, \mathbf{W}] \rbrace:= \bm{\eta} & = \mathbf{X}\bm{\beta} + \mathbf{W}\\
\mathbf{W} & \sim N(0,\Sigma)
\label{Model}
\end{nalign}
with link function $g(\cdot)$ and linear predictor $\bm{\eta}$. Standard SGLMMs \citep{diggle1998model} consider a second-order stationary Gaussian process for $\mathbf{W}$ for their convenient mathematical framework. However, this assumption can be unrealistic for spatial processes existing in large heterogeneous domains (see \cite{bradley2016comparison}, for a discussion). A natural extension to \eqref{Model} is to model $\mathbf{W}$ as a nonstationary spatial process. There is an extensive literature on modeling nonstationary spatial data \citep{sampson2010constructions} such as: (1) weighted-average methods, (2) basis function methods, and (3) process convolutions. Our method is motivated by these nonstationary modeling approaches.

Weighted average methods \citep{fuentes2001high} divide the spatial region $\mathcal{S}$ into disjoint partitions and fit locally stationary models to each partition. For example, \cite{kim2005analyzing, heaton2017nonstationary} partition the spatial domain through Voronoi tessellation. Then, the global process is constructed by combining the locally stationary processes via a weighted average. The weights are computed using the distances between the observation locations and `center' of the localized processes. These approaches scale well by taking advantage of parallel computation \citep[cf.][]{risser2015local, heaton2017nonstationary}.

Basis functions approaches represent the nonstationary covariance structure as an expansion of spatial basis functions $\lbrace \Phi_{j}(\mathbf{s}) \rbrace_{j=1}^{m}$. Let $\bm{\Phi}$ be an $N$ by $m$ matrix with columns indicate the basis functions and rows indicate locations $\bm{\Phi}_{i,j}=\Phi_{j}(\mathbf{s}_{i})$. Then we can construct a nonstationary spatial process as
\[
\mathbf{W} \approx \bm{\Phi}\bm{\delta},~~~~\bm{\delta} \sim N(0,\bm{\Sigma}_{\bm{\Phi}}),
\]
where $\bm{\delta}$ is the coefficients of basis functions. We approximate the covariance structure as $\bm{\Phi}\bm{\Sigma}_{\bm{\Phi}}\bm{\Phi}^{\top}$, which is not dependent solely on the lag between locations; hence this is nonstationary. Different types of basis functions have been used, for instance eigenfunctions obtained from the empirical covariance \citep{holland1999spatial}, multiresolution basis functions \citep{nychka2002multiresolution,nychka2015multiresolution,katzfuss2017multi}, and computationally efficient low-rank representation of nonstationary covariance \citep{katzfuss2013bayesian}.

Process convolutions represent the nonstationary spatial processes through convolutions of spatially varying kernel function and Brownian motion. For an arbitrary $\mathbf{s} \in \mathcal{S}$,
\[
\mathbf{W}(\mathbf{s}) = \int_{\mathcal{S}}
K_{\mathbf{s}}(\mathbf{u})d\mathbf{W}(\mathbf{u})
\]
where $K_{\mathbf{s}}(\cdot)$ is a kernel function centered at location $\mathbf{s}$ and $\mathbf{W}(\cdot)$ is a bivariate Brownian motion. \cite{higdon1998process} use bivariate Gaussian kernels under this framework. Several extensions have also been proposed including creating closed-form nonstationary Mat\'{e}rn covariance functions \citep{paciorek2006spatial}, extension to multivariate spatial process \citep{kleiber2012nonstationary}, and computationally efficient local likelihood approaches \citep{risser2015local}.

We note that these nonstationary models have focused on Gaussian responses. Direct application of these methods to \eqref{Model} is challenging because we cannot obtain closed-form maximum likelihood estimates by marginalizing out $\mathbf{W}$. Within the Bayesian framework, updating conditional posterior distributions requires a computational complexity of $\mathcal{O}(N^3)$, which becomes infeasible even for moderately large size datasets (e.g., binary satellite data with 100,000 observations). Although several computationally efficient approaches \citep[cf.][]{rue2009approximate,hughes2013dimension, guan2018computationally,lee2019picar, zilber2020vecchia} have been developed for non-Gaussian hierarchical spatial models, they are assuming stationarity of $\mathbf{W}$. In what follows, we develop partitioned nonstationary models for non-Gaussian spatial data. Our method is computationally efficient and provides accurate predictions over large heterogeneous spatial domains.

\section{Smooth Mosaic Basis Approximation for Nonstationary SGLMMs}

We propose a smooth mosaic basis approximation for nonstationary SGLMMs (SMB-SGLMMs) designed for massive spatial datasets. We begin with an outline of our method: \\

\noindent {\it{Step 1.}} Partition the spatial domain into disjoint subregions.\\
\noindent {\it{Step 2.}} Construct data-driven basis functions for each subregion.\\
{\it{Step 3.}} Fit a locally nonstationary basis function model to each subregion in parallel. \\
{\it{Step 4.}} Construct the global nonstationary process as a weighted average of local processes.\\

\noindent SMB-SGLMMs are described in Figure~\ref{summary}. We provide the details in the following subsections.

\begin{figure}
\begin{center}
\includegraphics[ scale = 0.9]{figures/summary.png}
\end{center}
\caption[]{Illustration for the partitioned nonstationary approach for simulated $\mathbf{W}$. (a) Nonstationary $\mathbf{W}$ is partitioned through 16 subregions; different colors indicate disjoint partitions. (b) For each partition, thin plate splines basis functions are constructed at knots; basis functions represent distinct spatial patterns. (c) The Local nonstationary model is fit to each partition using a linear combination of basis functions. (d) The global nonstationary process is obtained via a weighted average of the local processes.}
\label{summary}
\end{figure}

\subsection{Partitioned Nonstationary Spatial Models}\label{SubSec:partition}

\subsubsection*{Step 1. Partition the spatial domain into disjoint subregions}

We use an agglomerative clustering approach \citep{heaton2017nonstationary} to partition the spatial domain $\mathcal{S}$ into $K$ subregions $\lbrace \mathcal{S}_k \rbrace_{k=1}^{K}$, which satisfy $\cup_{k=1}^{K} \mathcal{S}_k = \mathcal{S}$. We fit a nonspatial generalized linear model ({\tt{glm}} function in {\tt{R}}) using responses $\mathbf{Z}$ and covariates $\mathbf{X}$. Then we obtain the spatially correlated residuals $\lbrace \epsilon(\mathbf{s}_i) \rbrace_{i=1}^{N}$. For all $i\neq j$, we calculate the dissimilarity between $\epsilon(\mathbf{s}_i)$ and $\epsilon(\mathbf{s}_i)$ as $d_{ij} = |\epsilon(\mathbf{s}_i)-\epsilon(\mathbf{s}_j)|/\|\mathbf{s}_i-\mathbf{s}_j\|$ from spatial finite differences \citep{banerjee2006bayesian}. \cite{heaton2017nonstationary} assigns locations with low dissimilarity values ($d_{ij}$) into the same partitions. The main idea is to separate locations with large pairwise dissimilarities (i.e. rapidly changing residual surfaces $\epsilon(\mathbf{s})$). We initialize $K=N$ where each observation belongs to its own cluster. Then we combine two clusters if they are Voronoi neighbors and have minimum pairwise dissimilarity. We repeat this procedure until we arrive at the desired $K$ partitions (Figure~\ref{summary} (a)). We provide details about the clustering algorithm in the supplementary material.

\subsubsection*{Step 2. Construct data-driven basis functions for each subregion}

For each partition, we generate a collection of spatial basis functions. We have $\mathbf{Z}_{k}=\lbrace Z(\mathbf{s}): \mathbf{s} \in \mathcal{S}_k \rbrace \in {\mathbb R}^{N_{k}}$, the observations belong to $\mathcal{S}_k$, where $N=\sum_{k=1}^{K}N_k$. $\mathbf{X}_k$ is an $N_k \times p$ matrix of covariates. Consider the knots (grid points) $\lbrace \mathbf{u}_{kj} \rbrace_{j=1}^{m_k}$ over $\mathcal{S}_k$ ($m_k \ll N_k$). These knots can define a wide array of spatial basis functions such as radial basis functions \citep{nychka2015multiresolution,katzfuss2017multi} and eigenbasis functions \citep{banerjee2008gaussian}. In this study, we consider thin plate splines defined as $\Phi_{kj}(\mathbf{s})=\|\mathbf{s}-\mathbf{u}_{kj}\|^2 \log(\|\mathbf{s}-\mathbf{u}_{kj}\|)$. Here $\bm{\Phi}_k$ is an $N_k \times m_k$ matrix by evaluating the basis function at $N_k$ locations in $\mathcal{S}_k$ (Figure~\ref{summary} (b)). Although we focus on thin plate splines, different types of basis functions can be considered. Examples include eigenfunctions \citep{holland1999spatial,Banerjee2013,guan2018computationally}, radial basis \citep{nychka2015multiresolution,katzfuss2017multi}, principal components \citep{higdon2008computer,cressie2015statistics}, and Moran's basis \citep{hughes2013dimension, lee2019picar}.

\subsubsection*{Step 3. Fit a locally nonstationary basis function model to each subregion in parallel.}

For each partition, we can represent the spatial random effects as $\mathbf{W}_k \approx \bm{\Phi}_k\bm{\delta}_k$ and model the conditional mean $\mathbb{E}[\mathbf{Z}_k|\bm{\beta}_k, \bm{\Phi}_k, \bm{\delta}_k]$ as
\begin{nalign}
g\lbrace \mathbb{E}[\mathbf{Z}_k|\bm{\beta}_k, \bm{\Phi}_k, \bm{\delta}_k] \rbrace & := \bm{\eta}_k = \mathbf{X}_k\bm{\beta}_k + \bm{\Phi}_k\bm{\delta}_k\\
\bm{\delta}_k & \sim N(0,\bm{\Sigma}_{\bm{\Phi}_k}),
\label{partitionedModel}
\end{nalign}
where $\bm{\Sigma}_{\bm{\Phi}_k}$ is a covariance of basis coefficients $\bm{\delta}_k$. Here we set $\bm{\Sigma}_{\bm{\Phi}_k}=\sigma^{2}_{k}\mathbf{I}_k$, as in a discrete approximation of a nontationary Gaussian process \citep{higdon1998process}. This basis representation approximates the covariance through $\sigma^{2}_{k}\bm{\Phi}_k\bm{\Phi}_{k}^{\top}$. Such approximation can capture the nonstationary behavior of the spatial process through a linear combination of basis functions (Figure~\ref{summary} (c)). Since we typically choose $m_k \ll N_k$, basis representations can drastically reduce computational costs by avoiding large matrix operations. For our simulated example (Section \ref{SubSec:SimulatedCount}), we use $m_k=81$ for a partition of size $N_k=13,129$. We provide implementation details in Section~\ref{SubSec:tune}. In addition, a clever choice of $\bm{\Phi}_k$ can also reduce correlations in $\bm{\delta}_k$, resulting in fast mixing MCMC algorithms \citep{haran2003accelerating,Christensen2006robust}. For the exponential family distribution $f(\cdot)$, the partition-specific hierarchical spatial model is as follows:
\begin{equation}
\begin{split}
& \textbf{Data Model: } \phantom{AAAAA} \mathbf{Z}_{k}|\bm{\eta}_k \sim f(\bm{\eta}_k)\\
\phantom{A}& \phantom{AAAAAAAAAAAAAA}g\lbrace \mathbb{E}[\mathbf{Z}_k|\beta_k,\bm{\Phi}_k,\bm{\delta}_k)] \rbrace:= \bm{\eta}_k =\mathbf{X}_k\beta_k + \Phi_k\bm{\delta}_k\\
& \textbf{Process  Model: } \phantom{AAA} \bm{\delta}_k|\sigma^{2}_{k} \sim N(0,\sigma^{2}_{k}\mathbf{I}_k)\\
& \textbf{Parameter  Model: } \phantom{A} \beta_k \sim p(\beta_k), \sigma^{2}_{k}\sim p(\sigma^{2}_{k})
\end{split}
\label{LocationHierarchy}
\end{equation}
We complete the hierarchical model by assigning prior distributions for the model parameters $\beta_k$ and $\sigma^{2}_{k}$.

\subsubsection*{Step 4. Construct the global nonstationary process as a weighted average of the local processes.}

To construct the global process, we use a weighted average of the fitted local processes.
Note that $\bm{\Phi}_k\in {\mathbb R}^{N_k\times m_k}$ is the basis functions matrix consisting of thin plate splines $\Phi_{kj}(\mathbf{s})=\|\mathbf{s}-\mathbf{u}_{kj}\|^2 \log(\|\mathbf{s}-\mathbf{u}_{kj}\|)$ for $s \in \mathcal{S}_k$, where $\lbrace \mathbf{u}_{kj} \rbrace_{j=1}^{m_k}$ are the knots over $\mathcal{S}_k$. Here, we introduce another notation. We define $\bm{\widetilde{\Phi}}_k\in {\mathbb R}^{N\times m_k}$ by evaluating $\Phi_{kj}(\mathbf{s})$ for all $s \in \mathcal{S}$. Let $\bm{\widetilde{\Phi}}_k(\mathbf{s}) \in {\mathbb R}^{m_k}$ be the row of $\bm{\widetilde{\Phi}}_k$ corresponding to spatial location $\mathbf{s}\in \mathcal{S}$.
Since $\mathbf{W_k(\mathbf{s})}\approx \bm{\widetilde{\Phi}}^{\top}_k(\mathbf{s})\bm{\delta}_k$, we have:
\begin{nalign}
\mathbf{W(\mathbf{s})} & = \sum_{k=1}^{K} c_{k}(\mathbf{s})\mathbf{W_k(\mathbf{s})} \approx \sum_{k=1}^{K}c_{k}(\mathbf{s})\bm{\widetilde{\Phi}}^{\top}_k(\mathbf{s})\bm{\delta}_k,\\
c_k(\mathbf{s}) & \propto \exp\Big(-\|\mathbf{s}-\widetilde{\mathbf{s}}_{k}\|^2 \Big)~~\mbox{if}~\|\mathbf{s}-\widetilde{\mathbf{s}}_k\| \leq \gamma~~\mbox{otherwise}~0,
\label{globalW}
\end{nalign}
where $\widetilde{\mathbf{s}}_{k} \in \mathcal{S}_k$ is the closest point to $\mathbf{s}$.
The weight $c_k(\mathbf{s})$ is proportional to the inverse distance between $\mathbf{s}$ and $\widetilde{\mathbf{s}}_k$; hence, shorter distances result in higher weights. We assign a 0 weight if the distance exceeds a threshold, or weighting radius, $\gamma$. We present details about choice of $\gamma$ in Section~\ref{SubSec:tune}. The weighted average of the local processes approximates the nonstationary global process (Figure~\ref{summary} (d)). Similarly, a global linear predictor $\bm{\eta}$ can be written as
\begin{equation}
\bm{\eta(\mathbf{s})}  =\sum_{k=1}^{K}[\mathbf{X}(\mathbf{s})^{\top}\bm{\beta}_k\mathbf{1}_{\{\mathbf{s}\in \mathcal{S}_k\}} + c_{k}(\mathbf{s})\bm{\widetilde{\Phi}}^{\top}_k(\mathbf{s})\bm{\delta}_k],
\label{globaleta}
\end{equation}
where $\mathbf{1}_{\{\mathbf{s}\in \mathcal{S}_k\}}$ is an indicator function. Here $\mathbf{X}(s) \in {\mathbb R}^{p}$ is a vector of the covariate matrix $\mathbf{X}$ for location $\mathbf{s}$, $\bm{\beta}_k \in {\mathbb R}^{p}$ is corresponding regression coefficients. Our method provides a partition varying estimate of $\bm{\beta}_k$. This is because the fixed effects may have spatially varying (nonstationary) behavior over large heterogeneous spatial domains. Therefore, as in \cite{heaton2017nonstationary} we provide a partition varying $\bm{\beta}_k$ in our applications. If estimating a global $\bm{\beta}$ is of interest, one may consider divide and conquer algorithms such as consensus Monte Carlo \citep{scott2016bayes} or geometric median of the subset posteriors \citep{minsker2017robust}. Such methods provide the global posterior distribution of fixed effects by combining subset posteriors.

\subsubsection*{Spatial prediction}

Spatial prediction at unobserved locations is of great interest in many scientific applications. Let $\mathbf{s}^{\ast} \in \mathcal{S}$ be an arbitrary unobserved location. From thin plate splines basis functions, we can construct a local basis as $\Phi_{kj}(\mathbf{s}^{\ast})=\|\mathbf{s}^{\ast}-\mathbf{u}_{kj}\|^2 \log(\|\mathbf{s}^{\ast}-\mathbf{u}_{kj}\|)$, where we have $\lbrace u_{kj}\rbrace_{j=1}^{m_k}$ knots in partition $k$. As in \eqref{globaleta} we can also provide a global prediction:
\begin{equation}
\bm{\eta(\mathbf{s}^{\ast})}  =\sum_{k=1}^{K}[\mathbf{X}(\mathbf{s}^{\ast})^{\top}\bm{\beta}_k\mathbf{1}_{\{\mathbf{s}^{\ast}\in \mathcal{S}_k\}} + c_{k}(\mathbf{s}^{\ast})\bm{\widetilde{\Phi}}^{\top}_k(\mathbf{s}^{\ast})\bm{\delta}_k].
\label{globaletapred}
\end{equation}
For given posterior samples $\lbrace \bm{\beta}_k, \bm{\delta}_k \rbrace_{k=1}^{K}$, we can obtain a posterior predictive distribution of $\bm{\eta(\mathbf{s}^{\ast})}$.

\subsection{Implementation Details}\label{SubSec:tune}

In this section, we provide automated heuristics for the tuning parameters. To implement SMB-SGLMMs, we need to specify the following components: (1) $K$ number of partitions, (2) location of knots in each partition, and (3) a weighting radius $\gamma$ for smoothing the local processes. In practice, we can set $K \leq C$ (number of available cores) for parallel computation. Our method is heavily parallelizable, so computational walltimes tend to decrease with larger $K$.
However, selecting a very large $K$ may result in unreliable local estimates due to a small number of observations $N_k$ within each partition. In our simulation study, we compare the performance of our approach with varying $K$. Then, we select the $K$ that minimizes the out-of-sample root cross validated mean squared prediction error ($\mbox{rCVMSPE}$). Based on simulation results, the SMB-SGLMM is robust to the choice of $K$.

To avoid overfitting, we use lasso \citep{tibshirani1996regression} to select the appropriate number and location of the knots. Initially, we set $m$ candidate knots $\lbrace \mathbf{u}_{kj} \rbrace_{j=1}^{m}$ uniformly over each partition $\mathcal{S}_k$ (e.g. $m \approx 1000$). Then we fit a penalized glm with lasso using response $\mathbf{Z}_k$ and covariates $[\mathbf{X}_k,  \mathbf{\Phi}_k]$, where $\mathbf{\Phi}_k$ is an $N_k$ by $m$ matrix. We impose an $l_1$ penalty to only the basis coefficients $\bm{\delta}_k$, not the fixed effects $\bm{\beta}_k$. We use the {\tt glmnet} package \citep{friedman2010regularization} in {\tt R} for lasso regression. For basis selection, we choose the basis functions corresponding to the nonzero basis coefficients. Since we run lasso regression independently for each partition, this step is embarrassingly parallel.

From a pre-specified set of values (e.g., $\gamma=0.01,0.025,0.05,0.1$), we choose the $\gamma$ that yields the lowest $\mbox{rCVMSPE}$. Note that we choose $\gamma$ upon completion of Steps 1-3, the computationally demanding parts of SMB-SGLMM. Since the calculations in \eqref{globaletapred} are inexpensive, there are very little additional costs associated with Step 4.

\subsection{Computational Complexity}\label{SubSec:complexity}

We examine the computational complexity of SMB-SGLMM and illustrate how our approach scales with an increasing number of observations $N$. The three computationally demanding components are (1) basis selection (lasso), (2) MCMC for fitting the local processes, and (3) obtaining the global process. Here, parallelized computing is integral to the scalability of SMB-SGLMM. We provide the following discussion on computational costs and parallelization for each step:

\begin{enumerate}
    \item \textbf{Basis Selection:} In each partition, our methods select the $m_k$ knots from $m$ candidates using a regularization method (lasso). Based on results in \cite{friedman2010regularization} the cost of the coordinate descent-based lasso is $\mathcal{O}(N_k m)$, where $N_k$ is the number of observations in a partition $\mathcal{S}_k$. We can select the basis functions for each partition in parallel across $K$ processors.
    \item \textbf{MCMC for local processes:} The computational cost is dominated by matrix-vector multiplications $\bm{\Phi}_k\bm{\delta}_k$, where $\bm{\Phi}_k$ is the $N_k$ by $m_k$ basis function matrix from the previous lasso step. The costs for this step is $\mathcal{O}(N_k m_k)$. We can fit the local processes in parallel across $K$ processors.
    \item \textbf{Global Process:} We obtain the global process using weighted averages in \eqref{globalW}. This step requires $\mathcal{O}(N^2)$ complexity to calculate a distance matrix because the weights $c_k(\mathbf{s})$ in \eqref{globalW} are based on the distances between observations. Computing $c_k(\mathbf{s})$ requires a one-time computation of the distance matrix for all $N$ locations, which can be readily parallelized across $C$ available processors. We propose a novel way to ``stream'' the distances (Supplement) so that we can compute the weights $c_k(\mathbf{s})$ without actually storing the final distance matrix (e.g. $8\mbox{TB}$ for $N=1$ million).
\end{enumerate}

Table~\ref{Complexity} summarizes complexity of SMB-SGLMM. Considering that the complexity of the stationary SGLMM is $\mathcal{O}(N^3)$, SMB-SGLMM is fast and provides accurate predictions for nonstationary processes (details in Sections~\ref{Sec:Simulation},\ref{Sec:Applications}).

\begin{table}[tt]
\centering
\begin{tabular}{ccc}
  \hline
 Operations & Complexity \\
  \hline
Basis selection & $\mathcal{O}(\sum_{k=1}^{K}N_k m/K)$  \\
MCMC & $\mathcal{O}(\sum_{k=1}^{K}N_k m_k/K)$ \\
Weighted average & $\mathcal{O}(N^2/C)$\\
   \hline
\end{tabular}
\caption{Computational complexity of SMB-SGLMMs. $K$ is the number of partitions and $C$ is the total available cores. $N_k$ is the number of observations, and $m_k$ is the number of knots from each partition. Knots are selected from $m$ candidate knots using a lasso.}
\label{Complexity}
\end{table}

\section{Simulated Data Examples}\label{Sec:Simulation}

We implement SMB-SGLMMs in two simulated examples of massive ($N=100,000$) nonstationary binary and count data. We implement our approach in {\tt{nimble}} \citep{nimble2017}, a programming language for constructing and fitting Bayesian hierarchical models. Parallel computation is implemented through the {\tt{parallel}} package in {\tt{R}}.  The computation times are based on a single 2.2 GHz Intel Xeon E5-2650v4 processor. All the code was run on the Pennsylvania State University Institute for Cyber Science-Advanced Cyber Infrastructure (ICS-ACI) high-performance computing infrastructure. Source code is provided in the Supplement.

Data is generated on $125,000$ locations on the spatial domain $\mathcal{S}\in\mathbb{R}^{2}$. We fit the spatial models using $N=100,000$ observations and reserve the remaining $N_{cv}=25,000$ observations for validation. We denote the model-fitting observations as $\mathbf{Z}=\{Z(s_{i}):s_{i}\in \mathbf{s}\}$ where $\mathbf{s}=\{s_{1},...,s_{N}\}$. Observations are generated using the SGLMM framework described in \eqref{Model} with $\bm{\beta}=(1,1)$. The nonstationary spatial random effects $\mathbf{W}=\{W(s_{i}):s_{i}\in \mathbf{s}\}$ are generated through convolving spatially varying kernel functions \citep{higdon1998process, paciorek2006spatial, risser2015local}. For some $s\in\mathbf{s}$ and reference locations $u_{j}\in \mathcal{D}$, we have $\mathbf{W}(s)=\sum_{j=1}^{J}K_{s}(u_{j})V(u_{j})$, where $K_{s}(u_{j})$ is a spatially varying Gaussian kernel function centered at reference location $u_{j}$ and $V(u_{j})$ is a realization of Gaussian white noise. Additional details are provided in the Supplement. The binary dataset uses a Bernoulli data model and a logit link function $\mbox{logit}(p)=\frac{p}{1-p}$, and the count dataset is similarly generated using a Poisson data model and a log link function.

We model the localized processes using the hierarchical framework in \eqref{LocationHierarchy}. To complete the hierarchical model, we set priors following  \citet{hughes2013dimension}: $\beta\sim N(\mathbf{0},100I)$ and $\sigma^2\sim IG(0.5,2000)$. We study SMB-SGLMM for different combinations of $K$ (the number of partitions) and $\gamma$ (weighting radius). We examine five partition groups $K=\{4, 9 , 16, 25, 36\}$ and four weighting radii $\gamma=\{0.1, 0.25, 0.5, 1\}$. In total, we study a total of $5 \times 4  = 20$ implementation.

For each case, we perform basis selection via lasso using the {\tt{glmnet}} R package \citep{glmnet2010}. We generate $100,000$ samples from the posterior distribution $\pi(\bm{\beta},\bm{\delta},\sigma^2)$ using a block random-walk Metropolis-Hastings algorithm using the adaptation routine from \citet{shaby2010exploring}. We examine predictive ability and computational cost. These include $\mbox{rCVMSPE}=\sqrt{\frac{1}{N_{cv}}\sum_{i=1}^{N_{cv}}(Z_{i}-\hat{Z}_{i})^{2}}$ and  the walltime required to run  $100,000$ iterations of the MCMC algorithm. In addition, we present the posterior predictive intensity and probability surfaces.

\subsection{Count Data}\label{SubSec:SimulatedCount}

Table~\ref{PoissonResults} presents results for the out-of-sample prediction errors for the SMB-SGLMM approach. Results indicate that the performance of our approach is robust across different combinations of $K$ and $\gamma$. For this example, predictive accuracy improves as we increase the number of partitions ($K$) and decrease the width of the weight radius ($\gamma=0.1$). We provide the posterior predictive intensity surface in Figure \ref{ProbIntensity} for the implementation yielding the lowest rCVMSPE ($K=36$ and $\gamma=0.1$). Based on visual inspection, the SMB-SGLMM approach captures the nonstationary behavior of the true latent spatial process.

We report the combined walltimes for running lasso, MCMC, and weighting. Walltimes decrease considerably as we increase the number of partitions. This is not surprising as we fit these models in parallel and the sample size for each partition tends to decrease as we increase the number of total partitions. For each partition, model fitting incurs a computational cost of $\mathcal{O}(N_{k}m_{k})$ where $N_{k}$ and $m_{k}$ are the number of observations and the number of selected basis functions (thin-plate splines) within partition $k$, respectively. For the case where $K=36$, the median number of basis functions per partition is $14$ with a range of $4$ to $169$.

The localized parameter estimates of $\bm{\beta}$ are centered around the true parameter values $\bm{\beta}=(1,1)$ (Supplement). For the case where the number of partitions $K=36$, we also provide a map of the localized estimates of $\bm{\beta}=(\beta_{1},\beta_{2})$ in the Supplement.

\begin{table}[tt]

\centering
\begin{tabular}{rrrrrr}
  \hline
   &  \multicolumn{4}{c}{Weighting Radius ($\gamma$)} & Walltime\\
 Partitions& 0.1 & 0.25 & 0.5 & 1 & (minutes)\\
  \hline
4 & 1.079 & 1.109 & 1.147 & 1.204 & 113.13 \\
  9 & 1.060 & 1.084 & 1.137 & 1.228 & 67.92 \\
  16 & 1.059 & 1.073 & 1.104 & 1.196 & 65.19 \\
  25 & 1.057 & 1.073 & 1.127 & 1.576 & 65.34 \\
  36 & \textbf{1.054} & 1.069 & 1.162 & 2.145 & 25.32 \\
   \hline
\end{tabular}
\caption{Cross-validation root mean squared prediction error (rCVMSPE) and total walltime (minutes) for the count data simulated example. Rows denote the five partition classes and columns correspond to the chosen weighting radius ($\gamma$). We report the combined walltime for lasso, MCMC, and weighting.}
\label{PoissonResults}
\end{table}

\begin{figure}
\begin{center}
\includegraphics[ scale = 0.4]{figures/ProbabilityIntensitySurface.png}
\end{center}
\caption[]{True (top left) and predicted intensity surfaces (top right) for the simulated count data example. True (bottom left) and predicted probability surfaces (top right) for the simulated binary data example. We set $K=36$ and $\gamma=0.1$ for the count example and $K=25$ and $\gamma=0.1$ for the binary case.}
\label{ProbIntensity}
\end{figure}

\subsection{Binary Data}\label{SubSec:SimulatedBinary}

In Table~\ref{BinaryResults}, we present prediction results for the binary simulated dataset. For this example, we observe that increasing the number of partitions $K$ and reducing the neighbor radius $\gamma$ results in more accurate predictions and lower computational costs. Figure \ref{ProbIntensity} includes the posterior predictive probability surface for the implementation yielding the lowest root CVMSPE ($K=25$ and $r=0.1$). For the case where $K=25$, the mean number of basis functions per partition is $7.5$ with a range of $0$ to $33$. In addition, computational walltimes decrease considerably as we increase the number of partitions for the reasons presented in Section \ref{SubSec:SimulatedCount}. The localized parameter estimates of $\bm{\beta}$ are centered around the true parameter values $\bm{\beta}=(1,1)$ (Supplement). For the case where the number of partitions $K=25$, we provide a map of the localized estimates of $\bm{\beta}=(\beta_{1},\beta_{2})$.

\begin{table}[tt]
\centering
\begin{tabular}{rrrrrr}
  \hline
   &  \multicolumn{4}{c}{Weighting Radius ($\gamma$)} & Walltime\\
 Partitions& 0.1 & 0.25 & 0.5 & 1 & (minutes)\\
  \hline
4 & 0.360 & 0.362 & 0.371 & 0.380 &  70.15 \\
  9 & \textbf{0.348} & 0.351 & 0.365 & 0.381 &  17.76 \\
  16 & \textbf{0.348} & 0.351 & 0.370 & 0.402 &  15.98 \\
  25 & \textbf{0.348} & 0.350 & 0.365 & 0.397 &  8.65 \\
  36 & 0.349 & 0.350 & 0.364 & 0.402 &  16.330 \\
   \hline
\end{tabular}
\caption{Cross-validation root mean squared prediction error (rCVMSPE) and total walltime (minutes) for the binary simulated example. Rows denote the five partition classes and columns correspond to the chosen weighting radius ($\gamma$). We report the combined walltime for lasso, MCMC, and weighting.}
\label{BinaryResults}
\end{table}

\section{Applications} \label{Sec:Applications}

In this section, we apply our method to two real-world datasets pertaining to malaria incidence in the African Great Lakes region and cloud cover from satellite imagery. For both large non-Gaussian nonstationary datasets, SMB-SGLMM provides accurate predictions within a reasonable timeframe.

\subsection{Malaria Incidence in the African Great Lakes Region}\label{SubSec:malaria}

Malaria is a parasitic disease which can lead to severe illnesses and even death. Predicting occurrences at unknown locations can be of significant interest for effective control interventions. We compiled malaria incidence data from the Demographic and Health Surveys of 2015 \citep{ICF2017}. The dataset contains malaria incidence (counts) from $4,741$ GPS clusters in nine contiguous countries in the African Great Lakes region: Burundi, the Democratic Republic of Congo, Malawi, Mozambique, Rwanda, Tanzania, Uganda, Zambia, and Zimbabwe. We use the population size, average annual rainfall, vegetation index of the region, and the proximity to water as spatial covariates. Under a spatial regression framework, \cite{gopal2019characterizing} analyzes malaria incidence in Kenya using these environmental variables. In this study, we extend this approach to multiple countries in the African Great Lakes region.

We use $N=3,973$ observations to fit the model and save $N_{cv}=948$ observations for cross-validation. We study the performance of SMB-SGLMMs for different combinations of $K\in \{2, 3, 4\}$ and $\gamma \in \{0.035,0.075,0.1,0.2,0.3\}$. For each partition, we set the number of candidate knots to be approximately $m=500$ and perform basis selection using lasso \citep{tibshirani1996regression}. On average $49.5$ basis functions are selected per partition. We fit a local spatial model \eqref{LocationHierarchy} running the MCMC algorithm for $200,000$ iterations.

\begin{table}[tt]
\centering
\begin{tabular}{rrrrrrr}
  \hline
     &  \multicolumn{5}{c}{Weighting Radius ($\gamma$)} & Walltime\\
 Partitions & 0.035 & 0.075 & 0.1 & 0.2 & 0.3 & (minutes) \\
  \hline
2 & 55.1 & 62.7 & 69.4 & 78.6 & 88.2 & 33.2 \\
  3 & 58.6 & 69.7 & 76.8 & 95.2 & 132.1 & 19.9 \\
  4 & 56.9 & 70.7 & 82.1 & 82.2 & 94.2 & 16.9 \\
   \hline
\end{tabular}
\caption{Root CVMSPE and total walltime (mins) for the malaria incidence example. Rows denote the four partition classes and columns correspond to the chosen weighting radius. We report the combined walltime for lasso, MCMC, and weighting.}
\label{Table:malaria}
\end{table}

\begin{figure}
\begin{center}
\includegraphics[ scale = 0.5]{figures/Malaria_intensity.png}
\end{center}
\caption[]{Illustration of the malaria occurrence dataset for $K=2$ and $\gamma=0.035$. True observations (left) and posterior predictive intensity surface (right) for the validation sample.}
\label{MalariaIntensity}
\end{figure}

\begin{figure}
\begin{center}
\includegraphics[ scale = 0.7]{figures/Malaria_betas.png}
\end{center}
\caption[]{Posterior mean estimates of partition-varying ($K=2$) fixed effects $\bm{\hat{\beta}}$. Estimated coefficients $(\{\hat{\beta}_{1}, \hat{\beta}_{2}, \hat{\beta}_{3}, \hat{\beta}_{4}\})$ for covariates population (top left), vegetation (top right), water (bottom left), and rain (bottom right).}
\label{MalariaBeta}
\end{figure}

Table~\ref{Table:malaria} compares the rCVMSPE for each case. We observe that rCVMSPE increases with larger weighting radii $\gamma$, possibly due to over smoothing in the partition boundaries. For smaller $\gamma$ ($0.035$ and $0.075$), we find that predictions are not sensitive to the choice of $K$. For this example, setting $K=2, \gamma=0.035$ yields the most accurate predictions. In Figure~\ref{MalariaIntensity}, the predicted intensities of the validation locations exhibit similar spatial patterns as the true count observations. We provide maps for the partition-varying coefficients ($K=2$) in Figure~\ref{MalariaBeta}. The smaller partition includes parts of northern Malawi, southern Tanzania, and northeastern Zambia. Here, the values of $\widehat{\beta}>0$ indicate that the corresponding covariates have a positive relationship with malaria incidence. From the estimates of $\widehat{\beta}_4$, we observe that while rainfall may increase malaria incidence, these effects are more pronounced in the smaller partition.

\subsection{Moderate Resolution Imaging Spectroradiometer (MODIS) Cloud Mask Data}\label{SubSec:MODIS}

The National Aeronautics and Space Administration (NASA) launched the Terra Satellite in December 1999 as part of the Earth Observing System. As in past studies \citep{sengupta2013hierarchical, bradley2019bayesian}, we model the cloud mask data captured by the Moderate Resolution Imaging Spectroradiometer (MODIS) instrument onboard the Terra satellite. The response is a binary incidence of cloud mask at a 1km $\times$ 1km spatial resolution. In this study, we selected $N=1,000,000$ observations to fit our model and reserved $N_{cv}=111,000$ for validation. We model the binary observations as a nonstationary SGLMM via the SMB-SGLMM method. Similar to \citet{sengupta2013hierarchical, bradley2019bayesian}, we include the vector $\mathbf{1}$ and a vector of latitudes as the covariates and use a logit link function.

For the SMB-SGLMM approach, we vary the number of partitions $K\in \{16, 25, 36, 49\}$ and weighting radius $\gamma \in \{0.01,0.025,0.05,0.1\}$ for a total of $16$ cases. For each partition, we begin with $m=1,000$ knots (candidates) and perform basis selection using lasso regression \cite{tibshirani1996regression}. On average, basis selection results in roughly $16.3$ basis functions per partition. For each partition, we fit a localized spatial basis SGLMM \eqref{LocationHierarchy} by running the MCMC algorithm for $100,000$ iterations.

Figure~\ref{MODISprobability} indicates that there are similar spatial patterns between binary observations and predicted probability surface. We also provide the misclassification rate for each case in Table~\ref{Table:MODIS}. The performance of SMB-SGLMMs is robust across different choices of $K$ and $\gamma$. Results suggest that a moderate number of partitions ($K=25$) and a smaller weighting radius ($\gamma=0.01$) yields the most accurate predictions. The combined walltimes decrease when using more partitions; however, these are on the order of hours in all cases.

\begin{table}[tt]
\centering
\begin{tabular}{rrrrrrrrrrr}
  \hline
  &  \multicolumn{4}{c}{Weighting Radius ($\gamma$)} & Walltime\\
 Partitions &  0.01 & 0.025 & 0.05 & 0.1 & (hours) \\
  \hline
16 & 0.192 & 0.215 & 0.229 & 0.266 & 5.4 \\
  25 & \textbf{0.174} & 0.175 & 0.184 & 0.211 & 3.9 \\
  36 & 0.182 & 0.200 & 0.223 & 0.299 & 3.2 \\
  49 & 0.186 & 0.198 & 0.222 & 0.290 & 2.8 \\

 \hline
\end{tabular}
\caption{Misclassification Rate and total walltime (hours) for the MODIS cloud mask example. Rows denote the four partition classes and columns correspond to the chosen weighting radius. We report the combined walltime for lasso, MCMC, and weighting.}
\label{Table:MODIS}
\end{table}

\begin{figure}
\begin{center}
\includegraphics[ scale = 0.7]{figures/MODISResults.png}
\end{center}
\caption[]{Illustration for the MODIS cloud mask dataset. (left) True observations of cloud mask. (right) Posterior predictive probability surface ($K=25$ and $\gamma=0.01$).}
\label{MODISprobability}
\end{figure}

\section{Discussion}\label{Sec:Discussion}
In this manuscript, we propose a scalable algorithm for modeling massive nonstationary non-Gaussian datasets. Existing approaches are limited to either stationary non-Gaussian or nonstationary Gaussian spatial data, but not both. Our method divides the spatial domain into disjoint partitions using a spatial clustering algorithm \citep{heaton2017nonstationary}. For each partition, we fit a localized model using a collection of thin plate spline basis functions. Here, the linear combinations of the basis functions capture the underlying nonstationary behavior. We provide an automated basis selection process via a regularization approach, such as lasso. This framework is computationally efficient due to parallel computing and using basis representations of complex spatial processes. Our study shows that the proposed method provides accurate estimations and predictions within a reasonable time. Moreover, our approach scales well to massive datasets, where we model $N=1$ million binary observations within 4 hours. To our knowledge, this is the first method geared towards modeling nonstationary non-Gaussian spatial data at this scale.

The proposed framework can be extended to a wider range of spatial basis functions. In the literature, there exists a wide array of spatial basis functions such as bi-square (radial) basis functions using varying resolutions \citep{cressie2008fixed,nychka2015multiresolution,katzfuss2017multi}, empirical orthogonal functions \citep{cressie2015statistics}, predictive processes \citep{banerjee2008gaussian}, Moran's basis functions \citep{griffith2003spatial, hughes2013dimension}, wavelets  \citep{nychka2002multiresolution,shi2007global}, Fourier basis functions \citep{royle2005efficient} and Gaussian kernels \citep{higdon1998process}. A closer examination of adopting Bayesian regularization methods (see \cite{o2009review} for a detailed review) for selecting basis functions is also an interesting future research avenue.

Developing scalable methods for modeling nonstationary non-Gaussian spatio-temporal data is challenging. The partition-based basis function representation can be integrated into existing hierarchical spatio-temporal models. For example, we can approximate the nonstationary processes using a tensor product of spatial and temporal basis functions or by constructing data-driven space-time basis functions.

\section*{Acknowledgements}\label{Sec:Acknowledgements}
Jaewoo Park was supported by the Yonsei University Research Fund 2020-22-0501 and the National Research Foundation of Korea (NRF-2020R1C1C1A0100386811). The authors are grateful to Matthew Heaton, Murali Haran, John Hughes, and Whitney Huang for providing useful sample code and advice. The authors are thank the anonymous reviewers for their careful review and valuable comments.

\clearpage

redpajama_set_name: RedPajamaArXiv


text:
But seriously
What we talk about when we talk about female characters on TV
Amelia Olson
I grew up thinking Winnie Cooper was basically the coolest human to ever live. She was sensitive, pretty, bossy, and liked sports. While I found sports to be as interesting as going to bed when I didn't feel tired, I still admired how Kevin Arnold was drawn to her ability to blend in with the other boys while still maintaining a sacred "feminine" aura.
Throughout my adolescence and into my 20s I found various other fictional females who became my my role models—they fit into the idea of how I had grown to expect a girl to look, act, and talk. But as I got older, I started to notice that all these girls and women, no matter how cool or independent they seemed to be, had one thing in common: their lives all somehow revolved around men and the attention they received from them. I started wondering about the purpose of having strong females lead if they are continuously bound to the affection of boys and men. What do we do with them once the flirtation/infatuation/fantasy is satisfied? What happens to a boyed-up, sweet-but-not-too-sweet, flirtacious-but-not-sexually-expressive cultural rag doll when she loses her impossible sainthood?
TV has a way of clumsily placing female characters on pedestals. Pedestals that are designed, longed for, and often intended for men to enjoy. And though I'd like to think I was, like, an unknowing feminist at age eight, I think I mostly just felt so unlike the characters I saw on TV, characters I so desperately wanted to embody and identify with, that I sort of forgot what I was even really like. Perhaps not surprisingly, I often find myself feeling the exact same way I did when I was eight about depictions of women in television, but this time I have things like a career, adult acne, and live-in-boyfriends in the mix. Does this mean that I haven't changed, or that TV hasn't changed?
Obviously, I am not the only person questioning the dynamics of female characters in media. In the last year of television, Hollywood has pumped out a handful of female-dominant series that have been met with wild critical acclaim. And in the last 15 years, female artists have created guidelines to help better decipher how women are being portrayed. One such test is the Bechdel. In case you're not familiar with it, the Bechdel test was created by cartoonist Alison Bechdel and consists of three simple guidelines:
Are there two female characters with names?
Do the two characters have a conversation with one another?
Is that conversation about anything other than a man/men?
While the Bechdel doesn't cover other forms of cultural-exclusion, like hetero-normative dialogue etc, it begs the audience to think more critically about the shows they love. Despite having female lead characters, very few recent TV series pass the Bechdel.
One of my favorite shows is The Mindy Project. Mindy Lahiri is a successful OBGYN in NYC, and yet most of her conversations revolve around men. But the way in which she chooses to talk about men interests me, and how she thinks of herself in the context of dating men interests me even more. Each episode is like a personal pep talk, helping to remind me I'm great the way I am. Kaling's ability to be both powerful and hopelessly romantic, to the point of hilarious delusion, demands a captive and respectful audience. Still, the show rarely passes the simple guidelines of the Bechdel. Does this mean the show is misogynistic? Does it mean Kaling's character is any less powerful? The truth is, I don't have an exact answer. I'm not sure I would be as drawn to the show if she didn't so bravely tackle ideas like rejection and ambition and sexual exploration in equal parts, and all through the eyes of a woman of color in a predominantly white and male-centered world.
So how do we make use of the Bechdel test? I think the questions that arise after testing shows with this method are perhaps more interesting than the test itself. Questions like:
Why are women portrayed as babbling nervous wrecks always seeking the next date?
Who is portraying them this way?
Why are they portraying them this way?
How much do these absurd depictions influence how we grow to understand what being "female" is?
How do they hold us back?
Who is tossing this bogus, misogynistic, and oppressive script and rewriting the portrayal of women in more accurate and genuinely relatable ways?
At the end of the day, we are gonna watch whatever we want to watch. And maybe that's the biggest "F you" we can give to industries that try to assert what and how we should be interested in things. But there's no doubt that we ought to have a lot of questions for the people designing Hollywood female characters, and I hope our questions are loud and commanding because I don't want our daughters denouncing their own power and incredibly authentic selves because Winnie Cooper is able to "blend in with the other boys while still maintaining a sacred 'feminine' aura."
GIFs here & here & also here
By Amelia Olson
Popular in But seriously
Tracee Ellis Ross is creating a Daria spinoff about BFF Jodie, and we already have our DVR set to series record
Mindy Kaling shared a body-positive message about wearing bikinis, and we love her so much
Mindy Kaling revealed why she won't talk about her baby's father, and her reason is obviously legit
You should plan a trip with your mother every year—because moms are the OG best friends
How to handle a breakup with someone you didn't technically date
I don't regret my abortion, and I'd like to talk about it without having to reassure you
I'm guilty of chronic ghosting when I date, but here's how I plan to stop
I denied my eating disorder for years. This is why I'm finally talking about it
How I overcame laxative abuse—the eating disorder we don't talk about enough
We need to talk about the 1991 movie All I Want for Christmas
Why we still need to talk about Alice Guy-Blaché, the first woman filmmaker
I love being a mom—but motherhood is not all I should talk about with friends, coworkers, or even my own family
From "on fleek" to the "yee haw agenda," Black digital content creators deserve more credit
Shrill talks about plus-size women and the morning-after pill when the medical community won't
The first doctor to take my pelvic pain seriously wasn't a gyno, but a talk therapist
All Topics in But seriously
Mindy Lahiri

redpajama_set_name: RedPajamaCommonCrawl


I would like to try an inexpensive solution to my sound problem stemming from traffic noise through my current windows. I would like light to shine through and am not concerned about opening the windows that face the street, and so am looking at installing a sheet of window grade plexiglass on the inside of the window.
- Should I use 2 sheets of plexiglass or is 1 sufficient?
- Could I run a strip of neoprene along the inside frame, cut the plexiglass to exact measurements, and then put the plexiglass into the window so that is fits snugly inside the frame, against the neoprene?
- Should I also caulk, or do something else?
- What's the optimal airspace to keep between my current window and the new plexiglass?
- What STC rating does window grade plexiglass have?
If you are able to locate the window grade plexiglass, you could actually cut it to fit the window frame, and simply caulk in your new plexiglass window panel. Leave as much dead air as possible between the window insert and the original paned window. This is key to getting good soundproofing from a single paned window . You could also use neoprene or a weather stripping material to seal the insert, but if it is not going to be removed on a daily or weekly basis, I'd really consider just caulking it in place.
Mandi, if the window is a regular size window and you are serious about soundproofing it, you might want to call Matt Petit @ Petit Industries. They are the manufacturers of the Magnet Seal window insert, and Matt may be able to help you with your home made insert or you may be able to purchase a high grade Magnet Seal window and save all of the aggravation hassles of cutting and installing a home made insert. Matt can be reached @ 1 (800) 947-3848. Tell him that Bob O. from Super Soundproofing referred you.
Thanks for the post Mandi.


text:
from django import template

register = template.Library()

@register.filter
def percent(num):
    return template.defaultfilters.floatformat(num * 100, 2) + '%'

redpajama_set_name: RedPajamaGithub


text:
#include "tensorflow/compiler/xla/service/gpu/while_transformer.h"

#include "tensorflow/compiler/xla/service/copy_insertion.h"
#include "tensorflow/compiler/xla/service/gpu/instruction_fusion.h"
#include "tensorflow/compiler/xla/service/hlo_verifier.h"
#include "tensorflow/compiler/xla/shape_util.h"
#include "tensorflow/compiler/xla/test.h"
#include "tensorflow/compiler/xla/test_helpers.h"
#include "tensorflow/compiler/xla/tests/hlo_test_base.h"
#include "tensorflow/core/lib/core/status_test_util.h"

namespace xla {
namespace {

using ::testing::Eq;
using ::testing::HasSubstr;

class WhileTransformerTest : public HloTestBase {
 protected:
  WhileTransformerTest()
      : module_(CreateNewModule()),
        induction_variable_shape_(ShapeUtil::MakeShape(S32, {})),
        data_shape_(ShapeUtil::MakeShape(F32, {8})),
        condition_result_shape_(ShapeUtil::MakeShape(PRED, {})) {}

  std::unique_ptr<HloComputation> BuildConditionComputation(
      const int64 tuple_index, const int64 limit) {
    auto builder = HloComputation::Builder(TestName() + ".Condition");
    auto limit_const = builder.AddInstruction(
        HloInstruction::CreateConstant(Literal::CreateR0<int32>(limit)));
    auto loop_state = builder.AddInstruction(HloInstruction::CreateParameter(
        0, GetLoopStateShape(tuple_index), "loop_state"));
    auto induction_variable =
        builder.AddInstruction(HloInstruction::CreateGetTupleElement(
            limit_const->shape(), loop_state, tuple_index));
    builder.AddInstruction(
        HloInstruction::CreateBinary(condition_result_shape_, HloOpcode::kLt,
                                     induction_variable, limit_const));
    return builder.Build();
  }

  std::unique_ptr<HloComputation> BuildBodyComputation(
      const int64 ind_var_tuple_index, const int64 data_tuple_index,
      const int64 increment) {
    auto builder = HloComputation::Builder(TestName() + ".Body");
    // Create param instruction to access loop state.
    auto loop_state = builder.AddInstruction(HloInstruction::CreateParameter(
        0, GetLoopStateShape(ind_var_tuple_index), "loop_state"));
    // Update the induction variable GTE(ind_var_tuple_index).
    auto induction_variable =
        builder.AddInstruction(HloInstruction::CreateGetTupleElement(
            induction_variable_shape_, loop_state, ind_var_tuple_index));
    auto inc = builder.AddInstruction(
        HloInstruction::CreateConstant(Literal::CreateR0<int32>(increment)));
    auto add0 = builder.AddInstruction(HloInstruction::CreateBinary(
        induction_variable->shape(), HloOpcode::kAdd, induction_variable, inc));
    // Update data GTE(data_tuple_index).
    auto data = builder.AddInstruction(HloInstruction::CreateGetTupleElement(
        data_shape_, loop_state, data_tuple_index));
    // Use 'induction_variable' in computation with no path to output tuple.
    auto update = builder.AddInstruction(
        HloInstruction::CreateBroadcast(data_shape_, induction_variable, {}));
    auto add1 = builder.AddInstruction(HloInstruction::CreateBinary(
        data_shape_, HloOpcode::kAdd, data, update));
    // Create output Tuple.
    ind_var_tuple_index == 0
        ? builder.AddInstruction(HloInstruction::CreateTuple({add0, add1}))
        : builder.AddInstruction(HloInstruction::CreateTuple({add1, add0}));
    return builder.Build();
  }

  HloInstruction* BuildWhileInstruction(HloComputation* condition,
                                        HloComputation* body,
                                        const int64 ind_var_tuple_index,
                                        const int64 ind_var_init) {
    auto builder = HloComputation::Builder(TestName() + ".While");
    auto induction_var_init = builder.AddInstruction(
        HloInstruction::CreateConstant(Literal::CreateR0<int32>(ind_var_init)));
    auto data_init = builder.AddInstruction(HloInstruction::CreateConstant(
        Literal::CreateR1<float>({0.f, 0.f, 0.f, 0.f, 0.f, 0.f, 0.f, 0.f})));
    auto loop_state_init =
        ind_var_tuple_index == 0
            ? builder.AddInstruction(
                  HloInstruction::CreateTuple({induction_var_init, data_init}))
            : builder.AddInstruction(
                  HloInstruction::CreateTuple({data_init, induction_var_init}));
    auto while_hlo = builder.AddInstruction(
        HloInstruction::CreateWhile(GetLoopStateShape(ind_var_tuple_index),
                                    condition, body, loop_state_init));
    module_->AddEntryComputation(builder.Build());
    return while_hlo;
  }

  void RunFusionPasses() {
    // Run standard fusion passes.
    EXPECT_TRUE(gpu::GpuInstructionFusion(/*may_duplicate=*/false)
                    .Run(module_.get())
                    .ValueOrDie());
    EXPECT_TRUE(gpu::GpuInstructionFusion(/*may_duplicate=*/true)
                    .Run(module_.get())
                    .ValueOrDie());
  }

  void RunCopyInsertionPass() {
    HloVerifier verifier([](const Shape& shape) {
      return ShapeUtil::ByteSizeOf(shape, /*pointer_size=*/sizeof(void*));
    });
    TF_ASSERT_OK(verifier.Run(module_.get()).status());
    CopyInsertion copy_insertion;
    TF_ASSERT_OK(copy_insertion.Run(module_.get()).status());
  }

  Shape GetLoopStateShape(const int64 ind_var_tuple_index) {
    if (ind_var_tuple_index == 0) {
      return ShapeUtil::MakeTupleShape(
          {induction_variable_shape_, data_shape_});
    } else {
      return ShapeUtil::MakeTupleShape(
          {data_shape_, induction_variable_shape_});
    }
  }

  std::unique_ptr<HloModule> module_;
  Shape induction_variable_shape_;
  Shape data_shape_;
  Shape condition_result_shape_;
};

// TODO(b/68830972): The while transformer is far too fragile. It patterns
// matches the exact expressions of opcodes. Re-enable when transformation is
// more general
TEST_F(WhileTransformerTest, DISABLED_InductionVariableAtTupleElement0) {
  // Build computation with induction variable at tuple element 0.
  auto condition =
      module_->AddEmbeddedComputation(BuildConditionComputation(0, 10));
  auto body = module_->AddEmbeddedComputation(BuildBodyComputation(0, 1, 1));
  auto while_hlo = BuildWhileInstruction(condition, body, 0, 0);
  // Run HLO Optimization passes.
  RunFusionPasses();
  RunCopyInsertionPass();
  // Run WhileTransformer.
  auto result = gpu::CanTransformWhileToFor(while_hlo);
  TF_ASSERT_OK(result.status());
  // Check results.
  EXPECT_THAT(result.ConsumeValueOrDie(),
              Eq(std::tuple<int64, int64, int64>(0, 10, 1)));
}

// TODO(b/68830972): The while transformer is far too fragile. It patterns
// matches the exact expressions of opcodes. Re-enable when transformation is
// more general
TEST_F(WhileTransformerTest, DISABLED_InductionVariableAtTupleElement1) {
  // Build computation with induction variable at tuple element 1.
  auto condition =
      module_->AddEmbeddedComputation(BuildConditionComputation(1, 10));
  auto body = module_->AddEmbeddedComputation(BuildBodyComputation(1, 0, 1));
  auto while_hlo = BuildWhileInstruction(condition, body, 1, 0);
  // Run HLO Optimization passes.
  RunFusionPasses();
  RunCopyInsertionPass();
  // Run WhileTransformer.
  auto result = gpu::CanTransformWhileToFor(while_hlo);
  TF_ASSERT_OK(result.status());
  // Check results.
  EXPECT_THAT(result.ConsumeValueOrDie(),
              Eq(std::tuple<int64, int64, int64>(0, 10, 1)));
}

// TODO(b/68830972): The while transformer is far too fragile. It patterns
// matches the exact expressions of opcodes. Re-enable when transformation is
// more general
TEST_F(WhileTransformerTest, DISABLED_InvalidLoopLimit) {
  // Build computation with invalid loop limit.
  auto condition =
      module_->AddEmbeddedComputation(BuildConditionComputation(0, 5));
  auto body = module_->AddEmbeddedComputation(BuildBodyComputation(0, 1, 1));
  auto while_hlo = BuildWhileInstruction(condition, body, 0, 10);
  // Run HLO Optimization passes.
  RunFusionPasses();
  RunCopyInsertionPass();
  // Run WhileTransformer.
  auto result = gpu::CanTransformWhileToFor(while_hlo);
  ASSERT_FALSE(result.ok());
  EXPECT_THAT(result.status().error_message(),
              HasSubstr("Loop start must be less than loop limit."));
}

// TODO(b/68830972): The while transformer is far too fragile. It patterns
// matches the exact expressions of opcodes. Re-enable when transformation is
// more general
TEST_F(WhileTransformerTest, DISABLED_InvalidLoopIncrement) {
  // Build computation with invalid loop increment.
  auto condition =
      module_->AddEmbeddedComputation(BuildConditionComputation(0, 10));
  auto body = module_->AddEmbeddedComputation(BuildBodyComputation(0, 1, -1));
  auto while_hlo = BuildWhileInstruction(condition, body, 0, 0);
  // Run HLO Optimization passes.
  RunFusionPasses();
  RunCopyInsertionPass();
  // Run WhileTransformer.
  auto result = gpu::CanTransformWhileToFor(while_hlo);
  ASSERT_FALSE(result.ok());
  EXPECT_THAT(result.status().error_message(),
              HasSubstr("Loop increment must greater than zero."));
}

}  // namespace
}  // namespace xla


text:
Barbier gets 'closer and closer' to stage win in Hungary, finishes second again
Rudy Barbier is feeling big emotions after each mass sprint finish in the Tour de Hongrie. He is both proud and happy about his consistency, but he is also disappointed and annoyed that he hasn't won yet. "I feel better and better in this race, and I get closer and closer to the victory", he said after finishing second again in the Tour de Hongrie.
The third stage was another flat one that ended in a mass sprint. Having finished fourth in the opening stage, and second by a bike length in the second stage, Barbier missed out on the third stage win by the length of a wheel.
"I am getting closer and closer", the hungry French sprinter said after the stage.
"I was waiting for the gap to appear, and when it did I gained ground quickly. However, the gap opened just too late."
Barbier was racing stage 3 in the green jersey, as the leader in the points classification was also the leader overall. After his second second-place, Barbier is now the true wearer of green.
"I am happy with this jersey," Barbier said. "It was good to be on the podium again. I am ready to defend it tomorrow and I feel like I can improve my result."


You've made the decision to make one of the largest investments you'll ever make in your life-buying your first home. You're excited, but at the same time anxious. Some of the questions you may be asking are: Will I be able to afford the home of my dreams? Do I have enough money for a down payment? Can I get a home inspected before I make an offer?
Rest assured, you are not alone. According to the 2000 National Association of REALTORS® Profile of Home Buyers and Sellers, first-time homebuyers accounted for 40 percent of the homes purchased in 1999. The homebuying process can be overwhelming, but if you go into it prepared, your first purchase can be a good experience. Here are some things to consider before making the plunge.
Getting a mortgage - Fear of being rejected for a home loan is one of the main concerns for first-time homebuyers. To lessen the stress, you may want to get pre-approved for a loan before looking at prospective homes. This will not only help you feel more confident, it will also give you an advantage when there are multiple offers for a specific home. The fact that your loan has already been approved is of great value to the seller: because it shortens the purchase process and there is less of a chance that the buyer will back out of the sale.
Mortgage Payments - The costs involved in the purchase of a home can be overwhelming to first-time buyers. However, with the help of a real estate professional, you can calculate out how much they you be able to pay each month in mortgage payments, and from there, what prospective homes offer a feasible payment plan.
Down-Payment - The down-payment amount varies depending on the value of the home you choose and your mortgage lender. And in some cases, first-time home buyers can purchase a home with no money down. Although it varies from state to state, most offer government-funded programs for first-time buyers that help people buy a home with no down-payment. Your real estate professional will be able to explain the different options available to you.
Closing Costs - First-time buyers often forget to consider the closing costs when making an offer on a home. Paying closing fees of up to 10 percent of the home sale amount is not unusual. Add that to the down-payment and you'll have quite a sum to raise before the final papers can be signed. However, a smart first-time buyer takes this into account before making an offer, and with some professional help, the costs can be estimated in advance.
Making offers - Don't feel pressured into making an offer on the first home you see. This is a common mistake of many first-time homebuyers. Make sure you view different homes to get a feel for the marketplace. When you do decide on a home to make a bid on, work with your real estate professional to get all of your questions answered first before making an offer. But don't wait too long to make an offer. The longer you wait, the greater the chance other prospective buyers may place offers, making it harder for you to negotiate a good deal.
Condition of the Home - Buying a "problem" home is another fear of first-timers. A home that needs major repairs can become a costly venture. And, unless the asking price is adjusted to reflect the hidden repairs needed, chances are the home is not worth as much as the seller is asking for it. To avoid unfortunate surprises, your real estate professional may advise you to hire a home inspector before making a serious offer. That way, you know what you are getting into.
Above all, remember that there are no silly questions. Make sure you understand and are comfortable with every aspect of the transaction. Your real estate professional can be an invaluable asset in helping you make educated decisions so that your first-home purchase is a rewarding experience.


A temporary home for your furniture and other personal items while you move.
A safe place for your household items while a part or all of your house goes through a face-lift.
A place to put your belongings while you are on assignment out of town or overseas.
A secure place to store collections, art, sports equipment, or other personal items or furniture.


text:
Tag: Ipl
Ashes Defeat: ECB Could Limit England Cricketers' Involvement In IPL
This year the IPL will likely overlap with the England's Test summer, with the knockout stages "likely to clash with their first Test against New Zealand at Lord's in early June", the report said.
IPL Mega Auction Likely To Be Held In Bengaluru On Feb 7 And 8
However with the emergence of Omicron variant of COVID-19 and cases on the rise, the situation will remain fluid but if there are restrictions with regards to overseas travel (unless all owners decide to use charter planes), conducting it in India will be less of a logistical nightmare.
IPL 2022: Kohli, Rohit, Dhoni Retained By RCB, MI, CSK Ahead Of Mega Auction
Among foreign players, Glenn Maxwell, Jos Buttler, Sunil Narine, Andre Russell, and Anrich Nortje were retained. All-rounder Kieron Pollard made the cut for Mumbai Indians whereas Moeen Ali was chosen over the likes of Sam Curran, Faf du Plessis and Dwayne Bravo at Chennai Super Kings.
IPL 2022: Punjab Kings Unlikely To Retain Any Player Ahead Of Mega Auction
Despite changing and chopping their squads, captain and coaching staff almost every season, Punjab haven't achieved much success in the history of the cash-rich league.
Virat Kohli's Moves With New Dance Teacher Going Viral! WATCH
These are shots from a recent BTS (Behind The Scenes) clip of a music video shared by IPL cricket team Royal Challengers Bangalore (RCB).
CSK Retain Dhoni For Three IPL Seasons, Rahul Likely To Lead Lucknow: Report
Earlier, Dhoni had himself confirmed that his last T20 game will be in Chennai. "I have always planned my cricket. My last ODI in India was in Ranchi. Hopefully, my last T20 will be in Chennai. Whether it's next year or in five years' time, I don't know," Dhoni had said at a recent CSK event.
Sanjay Bangar Appointed RCB Head Coach
"It's an honour and great opportunity to serve such a great franchise in the capacity of head coach."
IPL: There Is No CSK Without Dhoni, Says N Srinivasan
Dhoni has not cleared his availability for the IPL 2022. However, he did indicate that he may come back for the next season
MS Dhoni's Fate In IPL: Will CSK Retain 'Captain Cool' For 2022 Edition
With two more teams joining the bandwagon in 2022, there are lots of uncertainties around the retention rules for the franchises and the veteran wicket-keeper batsman revealed that he will take a suitable decision at the right time
IPL 2021: Will Virat Kohli Step Down As RCB Captain Too?
After Virat Kohli made announcement of quitting Team India T20 captaincy due to possible workload, another chorus has started doing the round among cricket enthusiasts. They say that the 32-year-old should also step down from the Royal Challengers Bangalore leadership role as the "work-load" in the Indian Premier League is "no less" than any international event.
Can Cuttack Make It To IPL? Team Auction On October 17
Next year IPL is going to be super exciting with ten teams expected to clash for the coveted trophy. The Board of Control for Cricket in India or the BCCI has shortlisted six cities for the eventual two new franchises in the Indian Premier League (IPL) 2022.
BCCI Issues Tender For Two New IPL Franchises
The two new franchises are expected to participate in IPL 2022. The talks of new franchises have been on for a few months now.
IPL: Rajasthan Royals Announce Signing Of World No-1 T20 Bowler Tabraiz Shamsi
South Africa's left-arm wrist spinner Tabraiz Shamsi was roped in by the Rajasthan Royals for the remainder of IPL scheduled to be held in the UAE from September 19
IPL 2021: MS Dhoni-Led Chennai Super Kings Take Off For Dubai
Chennai Super Kings will be back in action when the UAE leg of the IPL resumes on September 19 against Mumbai Indians in Dubai.
Captain Cool MS Dhoni's Never Before Seen Retro Look Is Killer
The World Cup Winning Captain and favourite skipper MS Dhoni announced his retirement from all forms of international cricket on 15 August 2020 that left his fans shocked. However, Mahi still shows his magic on field during the IPL league.
Odisha Cricket Players Have Potential To Play For India! Coach Wasim Jaffer Exudes Confidence
Wasim Jaffer, the newly appointed chief coach of the Odisha cricket team, received a warm welcome by the Odisha Cricket Association (OCA) upon his arrival at the Bhubaneswar Airport on Friday.
IPL's Remaining Matches To Be Held In UAE In September-October
Indian Premier League's (IPL) remaining matches this season will be held in United Arab Emirates in the months of September-October, the Indian cricket board confirmed on Saturday.
NZ Test Squad's IPL Players To Leave India On May 11
New Delhi: New Zealand's Test players who are part of the Indian Premier League (IPL) teams will leave India for the UK, where they face England in two Tests before…
Covid-19: Unaffected IPL Teams Start Leaving Bio-Bubble
New Delhi: The four teams not affected by the Covid-19 positive cases in their camps have been given the green signal to disperse and have already begun leaving their respective…
We Will Find A Way To Send Back Foreign Players: IPL Chairman
New Delhi: IPL chairman Brijesh Patel on Tuesday said the BCCI will "find a way" to send the league's foreign recruits back to their respective countries after the event was…
IPL 2021 Suspended Indefinitely After Multiple COVID-19 Cases In Bio-Bubble
New Delhi: The Indian Premier League was on Tuesday suspended indefinitely after multiple COVID-19 cases were reported in its bio-bubble. "The tournament has been suspended indefinitely. We will try to…
Now SRH's Wrddhiman Saha Tests Positive For COVID, IPL Match Against MI Unlikely
New Delhi: Sunrisers Hyderabad's wicketkeeper-batsman Wriddhiman Saha has tested positive for COVID-19 and it is unlikely that his team's IPL game against Mumbai Indians here this evening will go ahead.…
COVID Strikes IPL: CSK-RR Clash To Be Rescheduled Due To Balaji's Positive Report
New Delhi: The BCCI will reschedule Wednesday's IPL match between Chennai Super Kings and Rajasthan Royals here as CSK has been forced into hard quarantine after bowling coach L Balaji…
COVID Hits IPL: KKR-RCB Match Rescheduled After Two Players Test Positive
New Delhi: The COVID-19 storm struck IPL on Monday with Kolkata Knight Riders' Varun Chakravarthy and Sandeep Warrier testing positive for the dreaded virus, forcing postponement of the team's game…
IPL 2021: Andre Russell's Unbeaten 45 Takes KKR To 154/6 Against DC
Ahmedabad: Andre Russell's 27-ball unbeaten 45 helped Kolkata Knight Riders (KKR) score 154/6 in 20 overs against Delhi Capitals (DC) in an Indian Premier League (IPL) match here at the…


text:
===
title: Number
subtitle: Numeric and mathematical utilities
created: 2011-08-06 17:34:59
toc: reference
index: 6
===

§§ blurb

The `num` module provides a few numeric and mathematical functions.

§§ /blurb

This module has no dependencies.

[TOC]

## Unpacking

By loading the `core` module you can [unpack][] this module's functions
to use them in a less crippled way.

All generic functions in the `num` module are exported as utilities,
generic methods are exported to the `Number` constructor, and own
methods in the `Number.prototype` object.

[unpack]: core.html#unpacking_functions_and_own_methods

## Generic functions

### Function clamp

    (num:Number, min:Number, max:Number) ↦ Number

Returns the neares number within the given boundaries.

### Function wrap

    (num:Number, min:Number, max:Number) ↦ Number

Keeps a number within the given boundaries, but it fhe given number
exceeds it, it wraps around.

So, if you call `wrap(2, 5, 10)` you'll get `7`, as `2` is 3 units from
the minimum value, that difference is reduced from the other end.

**FIXME:**
> Come up with a description that does not suck monkey balls.

### Function snap

    (num:Number, step:Number) ↦ Number

Snaps the number to the nearest number in the arithmetic progression
defined by the `step` increment.

### Function pad

    (num:Number, size:Number) ↦ String

Prefixes a number with zeroes, such that it always has the given size.


text:
Home Cryptocurrency Mark Carney: Proposed Cryptocurrency Could Protect Global Economy
Jon Jaehnig
Mark Carney, Governor of the Bank of England (BoE) and former Chair of the Financial Stability Board, has some thoughts about cryptocurrency.
They come as a surprise to people who are familiar with Carney's past comments on crypto. However, they may be just a sign of the times – even if some say they're a little dated.
What Is Carney Afraid Of?
At a recent economic forum, Carney voiced the concern that the dollar was endangering world finances.
The dollar has dominated global trade for the last century. As a result, many countries use it as a store of wealth. This prevents them from engaging in international trade. It's the concern about spending versus saving, only on a global scale.
The problem is deeper than that, however. America's finances are looking increasingly grim, in part due to the ongoing trade war with China. In essence, the dollar is the basket that the world has put all of their eggs into. Carney fears someone's about to drop the basket.
How Can Cryptocurrency Help?
Carney doesn't just see a problem, he sees a solution. Of course, this solution was not for the pound sterling to take over for the dollar. The UK's sovereign currency has a similarly unstable future, largely due to uncertainty over Brexit.
If the share of trade invoiced in [a digital currency] were to rise, shocks in the US would have less potent spillovers through exchange rates, Carney said, according to The Guardian. And trade would become less synchronised across countries.
Carney reportedly used the proposed Libra digital currency as an example, though he pointed out that it had problems.
Carney's ideal currency would be backed by a number of different countries. This way, the currency would be widely accepted and upsets in any one country wouldn't hurt the currency.
What Has the Response Been?
Since Carney made his comments, finance experts have been quick to respond. A common response is that a global cryptocurrency already exists in Bitcoin.
Bitcoin largely fits the description of what he's looking for, cryptocurrency advocate Richard Galvin told Bloomberg. Something 'removed' from country borders and independent country-specific interest rates.
Many also point out that Carney previously denigrated and downplayed cryptocurrency, most recently in a report filed last year.
Meanwhile, a number of British legal bodies and financial minds have spoken out in favour of increased cryptocurrency adoption. The Bank of England has largely looked favourably on cryptocurrencies, pointing out crypto is beneficial as more commerce is done online. Also, DeVere Group CEO Nigel Green recently championed the cause, saying that crypto could save the UK's post-Brexit economy.
Some Problems
Naturally, Carney proposed a new currency rather than Bitcoin or Libra because it would allow greater regulation. Pursuing the best of both worlds, Carney wants a currency that can be controlled without being centralised.
It's worth noting, however, that 'Carney Coin' likely wouldn't be a major competitor to existing cryptocurrencies. Many Bitcoin advocates, for example, believe that Libra will actually improve Bitcoin adoption by introducing people to cryptocurrency. The case would be potentially similar in the case of 'Carney Coin'.
Even with Carney's perfect coin, multi-national currencies aren't foolproof. The euro was supposed to do largely the same thing as Carney's proposed currency. However, the economic crisis in Greece in recent years still greatly impacted the finances of other member countries.
One issue that few have pointed out is that Bitcoin is not free from uncertainty. While its concerns are not localised within a border or tied to a sovereign, single issues can still rock the price. Granted, this would be less true in the case of wider adoption.
Still, a multi-national cryptocurrency would help to promote some of the benefits to the individuals and the governments without bringing with it some of the fears related to state-backed crypto.
For example, China and India are working on state-backed cryptocurrencies. However, there is a general sense that this is so that the governments could use it as a means of surveillance. This would still be possible but would likely be much more difficult in the case of a multinational coin.
Jon Jaehnig is an American freelance writer specializing in Technology and Health. Jon has degrees in Scientific and Technical Communication and Journalism from Michigan Technological University and lives in Michigan's Upper Peninsula with his wife and cat. For more from Jon, you can follow him on LinkedIn and Twitter.


text:
← Acts of Contrition : C'mon Fatcats, Tell Us You're Sorry
'Burn Baby Burn' : Fight Censorship During 'Banned Books Week' →
How Fascism Happens : That Hoary Truism About Learning From History
Posted on September 29, 2008 by Thorne Dreyer
Photo by basetree.
Fascism: When bad things happen to good people
By Paul Fish / The Rag Blog / September 28, 2008
A good and recent read is John Dean's Conservatives Without Conscience which is really a rather dispassionate and mildly scholarly view of how corrupted core values and mindset can lead anyone, anytime to do things that go against their own "self interests" (to put a non-scaremongering euphemistic phrase in there). The truth is that Dean, who is still a conservative in the old Barry Goldwater sense, wrote this with a focus on the Reagan Revolution crop of neocons.
(Goldwater was viewed as "radical conservative" in his time, but would now be labeled a member of the far-left by the current crop of neocons, so successful has the Neo-Fascist revolution progressed in changing our language. Think "liberal" as a new four-letter word, when this country was, is, and always should be a shining example of a liberal experiment in government — and one for which being a liberal ought to be an honorific, a badge worn proudly.)
About tedious scaremongering itself, as opposed to calm and reasoned planning focused on "today": I apologize for trotting out a hoary truism (while paraphrasing it) with the concept that to be ignorant of history (either not knowing it or practicing denial) dooms a people to repeat it. In the world of strategic planning, it is always best to understand the core of the opposition because, otherwise, you will never effectively counter its threat.
While not a member of the Jewish culture, and being of the first generation after WWII, I do not have direct experience of the fascist regimes prevailing during that period, nor direct experience from the changes imposed upon the European public over the period leading to military action and the organized ethnic purgings against Jews, Armenians, Poles, gays and general dissidents. I only know what I know from many, many readings of history of my parents' times.
What I have gathered from those readings is that, for the most part, the step-by-step process that led directly to concentration camps, gas chambers and ovens, was that the citizens of the various European countries involved tended to go along with the step-by-step stripping of their rights, accepting the overthrow of their more democratic forms of government, and accepting racist hateful arguments of threats to their existence. They did so because most were relatively decent people, who could not fathom that "this could happen here."
The citizens of Germany and Italy became complicit in that overthrow of their liberties and freedom of will because they just could not wrap their heads around the idea that the drip, drip, drip erosion of their freedoms could ultimately lead to where it eventually went. There were plenty enough citizens to stop the brownshirts, to stop the Italian fascistic factions if they had just taken off their blinders of denial and risen up en masse. But they didn't. It just couldn't happen here.
So what is happening here?
That there may be hundreds or thousands of people choosing to use aspects of fundamentalist theology to justify committing acts of terrorism is real. Nineteen people acted, rationalized by select sections of their theology, within this country and attacked what they saw as symbols of things they deeply resent about our country. However, most of the reactionary rhetoric used by our current administration and other neocons in general appears to target almost all who share the faith of the attackers, or who derive from Middle Eastern physical types similar to the physical types of the hateful 19.
To generalize like that — and don't tell me you don't see it, otherwise why is it an "attack" on Barack Obama to suggest he is Muslim? — is no less racist than the fear mongering about the "great Jewish threat" peddled from Hitler and his brownshirts.
One key factor to what is "fascist" is letting the State (read that: government) dump "unnecessary" liberties and only keep those that are "essential," as determined by the State. We have allowed the Patriot Act. We have allowed spying on citizens. We allow rendition. We allow habeas corpus to be suspended. We allow "enhanced interrogation." We allow rewriting of near-history to support us perpetrating hateful actions (read that: outright lying from the neocons) — like invading a country that was no threat to us.
Liberties gone, and Fear as a Tool? Check.
Another key factor to what is "fascist" is that there be a single father-figure leader, but one who has total power (the term "dictator" will do, though having an Imperial Presidency is fairly faithful to the concept). The State, with this dictator as titular head, tells you that it/he is privy to information not available to the masses and, as a direct result, knows much better than the masses what is really at play in the world, knows what is best for the people. How many times over this past eight years have we heard the phrase "We have secret intelligence that shows heightened activities by…" you name it? "Based on this secret intelligence it is imperative that we now…" take this action (go to war, spy on you, torture people that we [through our secret intelligence] know to be enemy operatives — though they must never stand trial in public because our secret intelligence will be revealed, ad infinitum)?
Do we now have a dictator instead of president? Well, okay: "Dictator" seems such a harsh word; "Imperial President" seems so fuzzy and soft. Why not go with some other more euphemistic name — you know, like "Decider"? Dictators decide what action to take and make it happen, and nobody can stop him/her from doing it. Like domestic spying (nothing happens, even though it is a felony at the time it takes place). Like torture (which is a crime, well, just about everywhere more enlightened people rule). Allow oil companies to create our energy policies in closed door sessions ( civil crimes of conflict of interest and flaunting the Public Records Act). Turning the Department of Justice into a one-party kangaroo court. And, as a final nail if it goes through, the Secretary Paulsen presented bailout plan (surely at least partly penned by David Addington), there is the power-grab clause 8a which tells Congress that is has no active part in handling the nation's purse strings, and tells the Judicial branch it has no power over executive office decisions.
Check all your balances at the door if that clause goes through because, voila! we will have placed the cornerstone brick into the wall of the first American dictator.
Dictator/Decider in place? Check.
Some who say the argument about a new form of fascism taking root here is faulty base part of their argument on this: Under fascism, all of industry belongs to the State. I suggest that the arising neocon/neofascist has created a new flavor of fascism by holding a mirror to that core concept. Whether the State controls all of industry and finance or finance and industry controls the State (the neocon twist) still leaves you with one thing: A Corporate State. Palindromes still end up being the same word, no matter from which end you start your spelling. A corporate state is a corporate state and, so long as the State takes its marching orders and implements decrees from a titular-head decider, it does the duck walk and quacks.
Corporate State? Check.
Finally, and this is no afterward, no afterthought, what about all this neocon chatter over the past 30 years about restoring morality and ethics to a culture gone astray? That neocon Christianity thing? Sorry to say it folks, but that is covered under the tenets of fascism as well as being instrumental in "normalizing" diverse opinions to better reflect the ethos and "morality" of State "virtues." It is central to controlling the masses (a political end, political tool that has been used throughout the history of humankind since the first time a king or emperor claimed he or she was also a god or tuned into secret divinations from on high, directly or through their personal High Priest). To tell someone that you want half their crop just because you are a king or queen is far, far less compelling than if you tell your people that the rain will stop, mothers will be barren, that they will be visited upon by famine or pestilence or have a one-way ticket to the flaming pits of hell if they don't.
State Religion? Check.
On the off chance some may feel I'm just making this all up, pulling these tenets of fascism straight out of nether anatomical regions, I have one further reading recommendation, though it is a bit of a tough to slog through: Go a-Googling for "The Doctrine of Fascism" by one Benito Mussolini from 1932. Hitler was not the guy who created fascism; that was good old "let's restore the Roman Empire" Benito. You are probably safe in skipping past most of section one because it is all vague sky-pie generalities. However, if read from a "here in America" perspective the second section, which spells out in by-the-numbers concepts all the working parts of fascism, it is amazing how close it reads to maybe the Podhoretz, Reagan, Cheney, Rove and Bush playbook, with stark parallels in ways I've discussed above as well as many others not mentioned.
Do I share this as some "hair on fire" rant with intent to incite panic? No. Fear? Well, yes: Fear by itself is not a bad thing. It evolved as a survival mechanism across millions of years. Fear is not an end, it is a motivator. Anger? I hope so. Because this "Revolution" that Reagan, Pat Robertson and Norman Podhoretz started is not some intellectual exercise, or some too-cute-by-half term used to describe reinstituting American values our wayward culture lost along the way. It is a revolution.
The crop of neocon believers in this revolution — meaning overthrowing the core tenets of this republic — never, ever agreed with the Constitution as it was originally written and has evolved for the past few hundred years. They descend from a malcontent minority present at the start of this country, and whose ideologies were never added to the country's founding principles. The authors of this country were too liberal for their tastes. They descend from the nation's forefathers who wanted Washington to be not the First Citizen President; they wanted him to be our new king. For life. They did not want checks and balances. They wanted, on the one hand, a monarchical central leader, but with feudal Nation States under him. They never wanted a central Constitution at all. So the new neocon verbiage "strict construction" is code language for strict deconstruction in reference to the Constitution and Bill of Rights. They do not like this liberal country, founded by liberals, and run by an uber-liberal document called the Constitution.
They do not want a Bill of Rights but, instead, a Bill of Prohibitions. Otherwise these new revolutionaries would not constantly be arguing for amendments that strip or limit rights.
And, under the administration of Bush the Lesser, half of that Constitution is already gone, already in tatters. We are maybe one last election away from fruition for their revolutionary plan. Unless, of course, a security Red Alert is issued in October, with "secret intelligence" that there is a suitcase nuke loose in our borders, that Martial Law is declared to "protect us" and the elections are suspended until the threat is neutralized. Which it never will be. And Bush the Lesser remains our Decider. Strange to think that it could be that close at hand. And Bush the Lesser has the power, will, and demonstrated willingness of deceit to do it.
No. I do not see the "change" that's needed as a matter of merely restoring decency or fairness or bi-partisan negotiation or ending one given war. We can not negotiate with those who wish to overthrow the republic. We must use what non-violent tools we have left to throw them out of power, to keep them from completing their converting this country to something our founders would recognize all too well, and which the founders committed tears, sweat and blood to get rid of: A vast anti-liberal tyranny.
All that, and Condi Rice just admitted that strategies for using torture took place in the White House before it was implemented as a policy of The State. And none of them are yet in jail.
I'm just saying.
TheRealFish
[Paul Fish posts to Progressives for Obama.]
This entry was posted in Rag Bloggers and tagged Civil Liberties, Fascism, History, Nazi Germany, Neocons, World History. Bookmark the permalink.
3 Responses to How Fascism Happens : That Hoary Truism About Learning From History
smokey says:
A little bit of honesty can only be a good thing.
Hitler,Stalin, and mussolini
All leftists
All Socialists
Fascist is real specific to the political party mussolini formed
after his expulsion from the italian Socialist party.
The american left was pretty keen on fascism in the first part of the last century and only rejected european fascists when Hitler attacked the Soviet union
And isn't Neocon crypto fascist code for jew?
No you moron, the American Left marched all the time against Fascism. Fascism was an Ultranationalist ideology that was INVENTED to destroy socialism. Mussolini was a FORMER member of the Italian Socialist Party.
Hitler was NEVER a socialist. Francisco Franco was not even close to being a socialist. So, nice try, but no one who has any intellectual honesty or knowledge of ACTUAL history would claim fascism as a left wing movement. It was VIOLENTLY anti-left. Read a book by someone who isn't a lying revisionist lunatic and maybe you'll see how stupid that sounded
Hitler lead the National Socialist Party, which was in direct competition with the communist party for the minds of the young German socialists; they fought not for ideology, but for recruits and power. In the end, there is little difference between socialism, fascism, and communism–all elevate the state, the collective, above the individual. This is why the supposed right wing behavior of Hitler was so similar to the supposed left wing behavior of Stalin. There was nothing capitalist about the Nazi's. In fact, success in business is one of the characteristics they used to scapegoat the Jews. Nice attempt to distract, but you socialists are very transparent in your motives.


>  > >  > >  request.
>  > >  > View Results Tree Listener.
>  > >  > >  contains the <Location> parameter using Fiddler).
>  > >  > >  send parameters of Y.aspx?
>  > >  > Why not use follow redirect?
>  > >  > >  Any help to get the solution will be appreciated.
>  > >  contains the dynamically generated URL that needs to be redirected..
>  > >  Manager of X.aspx?
>  > What has the Header Manager got to do with this?
>  > The Header Manager is used to send additional headers.
Location header is sent *by* the server.
>  Value of the <ID> is only present in the HTTP Header of X.aspx.
will follow it if you enable following.


text:
Medical >
Promising HIV trial fails
US pharmaceutical giant Merck announced on Friday that it had halted the trials of its V520 vaccine after a study found it to be ineffective.
The supervisor of a major HIV vaccine trial in South Africa voiced "huge disappointment" Saturday after testing was halted in the wake of poor results from sister trials in Australia and the United States.
"It is a huge disappointment because this vaccine has shown promise all the way through, but it's only when you get in on these big trials that you start to see how the vaccine behaves," South Africa trials supervisor Glenda Gray told AFP.
South Africa is home to nearly 5.5 million HIV-positive people.
No protection against HIV
"Although in earlier studies we saw beautiful immune responses, it doesn't look like this immune response translates into something that could protect people against HIV infection," Gray added.
The prototype had been tested on 700 HIV-negative people since February in five South African hospitals.
"It is devastating for us, to say the least, but we have to keep going ... we need something that can prevent infection," said Gray, who also heads AIDS research at the Chris Hani Hospital in Soweto, southwest Johannesburg.
She stressed that the prototype did not have any consequence on the health of those who participated in the study.
"It is sad and... it is a huge disappointment because it is about life and prevention of new infection," said Treatment Action Campaign (TAC) president Zachie Achmat, the main organisation that helps people living with AIDS in South Africa.
"But it shows that there is proper control on human trials and when something is not effective it can be stopped," said
HIV/Aids Centre
Prevention is better than cure
HIV does not discriminate
More on HIV/AIDS
Basic disease information
Different political stances
HIV FAQ's
HIV in the body
Living with HIV/Aids
Management of HIV/Aids
Nutrition and HIV
Real-life story
Symptoms and diseases associated
The South African culture
Transmission of HIV
When AIDS sets in
Assess your HIV risk »
Your HIV/Aids knowledge »
Do you think there is a link between Gender Based Violence and HIV in South Africa?
Is it important for young people to be educated about HIV, STI'S and high risk behaviour?
Has access to medication and information reduced the spread of HIV infections in rural communities?
Are you aware of the link between the perceived high risk of acquiring HIV and frequent HIV testing?
Do you believe that every person should receive treatment for HIV regardless of their ability to pay?
Thank you for participating.
${Percentage}%
Charlie Sheen talks to Dr Oz about being HIV positive