Most economic data are not generated by an experiment. They arrive with dependence across time, across space, and across the variables themselves. This dependence comes from market equilibrium, optimization, and selection. Each of those three forms of dependence violates the independence assumption of standard regression and complicates causal interpretation.
This chapter asks three questions.
- How do today’s values depend on past values?
- Stationarity: this means the mean and variance of a series do not depend on \(t\), which the simplest time-series methods assume.
- Autocorrelation and cross-correlation functions: these apply correlation across time lags, within one series or between two.
- How do values at one location depend on values nearby?
- Moran’s I: this is the spatial analog of the autocorrelation function. It summarizes spatial dependence in one number.
- Does a regression slope show how one variable affects another?
- Endogeneity: this is a correlation between a regressor and the error term, which biases OLS.
- Competitive market equilibrium: this simulates a market where price and quantity are jointly determined, so the regression slope confuses supply and demand.
Temporal Interdependence
Many observational datasets have temporal dependence, meaning that values at one point in time are related to past values. This violates the standard assumption of independence used in many statistical methods.
Stock prices are classic examples of temporally dependent processes. If Apple’s stock was high yesterday, it is more likely (but not guaranteed) to be high today.
Code
# Load a CSV of daily Apple stock prices and plot the daily high as a line.
library('plotly')
stock <- read.csv('https://raw.githubusercontent.com/plotly/datasets/master/finance-charts-apple.csv')
fig <- plot_ly(stock, type = 'scatter', mode = 'lines')%>%
add_trace(x = ~ Date, y = ~ AAPL.High) %>%
layout(showlegend = FALSE)
fig
Code
# Today's high is not independent of past highs.
A random walk is the simplest mathematical model of temporal dependence. Each new value is just the previous value plus a random shock (white noise).
Code
# Generate Random Walk
tN <- 200
y_rw_sim <- numeric(tN)
y_rw_sim[1] <- stock$AAPL.High[1]
for (ti in 2:tN) {
y_rw_sim[ti] <- y_rw_sim[ti-1] + runif(1, -10, 10)
}
#x_sim <- runif(tN, -1, 1) White Noise
xy_rw_sim <- data.frame(Date=1:tN, RandomWalk=y_rw_sim)
fig <- plot_ly(xy_rw_sim, type = 'scatter', mode = 'lines') %>%
add_trace(x= ~ Date, y= ~ RandomWalk) %>%
layout(showlegend = FALSE)
fig
Code
# Today's value is not independent of past values.
Modify the random walk above by changing runif(1, -10, 10) to rnorm(1, 0, 5). How does the choice of shock distribution affect the path? Does it change whether the series is stationary or nonstationary?
Hint. Both choices produce zero-mean, finite-variance shocks, so each simulated path is still a random walk. The variance of \(Y_{t}\) grows linearly in \(t\), so the series is nonstationary whether the shocks are uniform or normal. The shape of individual paths looks slightly different but the long-run behavior is the same.
In a temporally dependent series, today’s value is not independent of past values. In contrast to cross-sectional data (e.g. individual incomes), time series often require special methods to account for memory and nonstationarity.
It often helps to see the marginal distribution alongside the time path. A nonstationary series can disguise itself in a histogram because the histogram pools across \(t\).
Code
# Time path beside the marginal distribution
layout(matrix(c(1, 2), nrow = 1), widths = c(4, 1))
par(mar=c(4, 4, 1, 1))
plot(1:tN, y_rw_sim, type='l', lwd=2,
xlab='t', ylab=expression(y[t]))
title('Random walk: time path', font.main=1, adj=0)
par(mar=c(4, 1, 1, 2))
f_hat <- hist(y_rw_sim, breaks=20, plot=FALSE)
barplot(f_hat$counts, horiz=TRUE, space=0, border=NA,
col=grey(.5, .5), axes=FALSE)
axis(1)
title('Marginal', font.main=1, adj=0)
Stationary
The simplest time-series methods implicitly assume the data have a stable distribution over time; this assumption fails often enough that we need a name for it.
A time series is stationary if both its mean and variance do not depend on \(t\):
- Stationary means: \(\mathbb{E}[Y_{t}]=\mathbb{E}[Y_{t'}]\) for all time periods \(t, t'\).
- Stationary variances: \(\mathbb{V}[Y_{t}]=\mathbb{V}[Y_{t'}]\) for all time periods \(t, t'\).
Stationarity is useful as a precondition for most classical time-series tools. Note that there is more than one way to be nonstationary. A series with a deterministic trend is mean-nonstationary, while a random walk is variance-nonstationary because \(\mathbb{V}[Y_{t}]\) grows linearly in \(t\).
For example, consider the data generating process \(Y_{t} = \beta t + \epsilon_{t}\), where \(\epsilon_{t}\) is Normal with \(\mathbb{E}[\epsilon_{t}]=0\) and \(\sqrt{\mathbb{V}[\epsilon_{t}]}=\sigma+\alpha t>0\). Here \(\sigma\) is the baseline standard deviation in this Normal model. Then \(\mathbb{E}[Y_{t}]=\beta t\) and \(\mathbb{V}[Y_{t}]=(\sigma+\alpha t)^2\), so \(\beta\) affects mean stationarity and \(\alpha\) affects variance stationarity.
Code
## MAIN EXAMPLE
tN <- 200
simulate_series <- function(beta, alpha, sigma=.2){
y_sim <- numeric(tN)
for (ti in 1:tN) {
mean_ti <- beta*ti
sd_ti <- (sigma + alpha*ti)
y_sim[ti] <- mean_ti + rnorm(1, sd=sd_ti)
}
return(y_sim)
}
# Plotting Functions
plot_setup <- function(alpha, beta){
plot.new()
plot.window(xlim=c(1, tN), ylim=c(-5, 20))
axis(1)
axis(2)
mtext(expression(y[t]), 2, line=2.5)
mtext('Time (t)', 1, line=2.5)
}
plot_title <- function(alpha, beta){
beta_name <- ifelse(beta==0, 'Mean Stationary', 'Mean Nonstationary')
alpha_name <- ifelse(alpha==0, 'Var Stationary', 'Var Nonstationary')
title(paste0(beta_name, ', ', alpha_name), font.main=1, adj=0)
}
par(mfrow = c(2, 2))
for(alpha in c(0, .015)){
for(beta in c(0, .05)){
plot_setup(alpha=alpha, beta=beta)
sim_cols <- c(rgb(.8, 0, 0, .5), rgb(0, 0, .8, .5))
for( sim in 1:2){
y_sim <- simulate_series(beta=beta, alpha=alpha)
lines(y_sim, col=sim_cols[sim], lwd=2)
}
plot_title(alpha=alpha, beta=beta)
}}
In the top-left panel (\(\beta=0, \alpha=0\)), both the mean and variance are constant over time – this is stationary. In the top-right panel (\(\beta>0, \alpha=0\)), the mean drifts upward but the variance stays constant – mean nonstationary. In the bottom-left (\(\beta=0, \alpha>0\)), the mean is constant but the spread grows – variance nonstationary. The bottom-right has both problems.
Measures of temporal association
When values at one time depend on values at other times, we need correlation-based diagnostics across lags to characterize the dependence.
The autocorrelation function of \(Y_{t}\) at lag \(k\) is the correlation of \(Y_{t}\) with its own lagged value \(Y_{t-k}\), \[\text{ACF}_{Y}(k) = \frac{\mathbb{C}[Y_{t},Y_{t-k}]}{ \sqrt{\mathbb{V}[Y_{t}]\mathbb{V}[Y_{t-k}]}}.\] The cross-correlation function between \(Y_{t}\) and \(X_{t}\) at lag \(k\) is the corresponding correlation of \(Y_{t}\) with \(X_{t-k}\), \[\text{CCF}_{YX}(k) = \frac{\mathbb{C}[Y_{t},X_{t-k}]}{ \sqrt{\mathbb{V}[Y_{t}]\mathbb{V}[X_{t-k}]}}.\]
The ACF is useful for detecting temporal persistence (memory) within one series: for stationary processes it typically decays quickly, while nonstationary processes show ACFs that decay slowly or persist. The CCF is useful for detecting lagged relationships between two series, such as leading indicators or external drivers; if \(X_{t}\) is white noise, any visible structure in the CCF likely reflects nonstationarity in \(Y_{t}\).
Worked example: \(y=(2,4,6,8,10)\), with \(n=5\) and mean \(\bar{y}=6\). R’s acf() uses the biased estimator \[
\hat{\text{ACF}}(1) = \frac{\frac{1}{n}\sum_{t=2}^{n}(y_{t} - \bar{y})(y_{t-1}-\bar{y})}{\frac{1}{n}\sum_{t=1}^{n}(y_{t} - \bar{y})^2}.
\] Deviations are \((-4,-2,0,2,4)\); lag-1 cross-products are \((-4)(-2)=8\), \((-2)(0)=0\), \((0)(2)=0\), \((2)(4)=8\), summing to \(16\). Sum of squared deviations is \(16+4+0+4+16=40\). So \(\hat{\text{ACF}}(1) = 16/40 = 0.4\).
Code
y0_hat <- c(2,4,6,8,10)
acf(y0_hat, plot=FALSE)$acf[2]
## [1] 0.4
Code
## MAIN EXAMPLE
par(mfrow = c(2, 2))
for(alpha in c(0, .015)){
for(beta in c(0, .05)){
y_sim <- simulate_series(beta=beta, alpha=alpha)
acf(y_sim, main=NA)
plot_title(alpha=alpha, beta=beta)
}}
A cross-correlation plot diagnoses lagged dependence between two series at once:
Worked CCF example. Let \(y=(1,2,3,4,5)\) and \(x=(2,3,4,5,6)\), with \(\bar{y}=3, \bar{x}=4\). The lag-1 cross-correlation pairs \(y_{t}\) with \(x_{t-1}\), giving four cross-products \((2-3)(2-4) = 2\), \((3-3)(3-4) = 0\), \((4-3)(4-4) = 0\), \((5-3)(5-4) = 2\). With \(n=5\), the (biased) denominator is \(\sqrt{\sum_{t}(y_{t}-\bar y)^2 \sum_{t}(x_{t}-\bar x)^2}/n = \sqrt{10 \cdot 10}/5 = 2\), so \(\hat{\text{CCF}}(1) = (2+0+0+2)/5 / 2 = 0.4\).
Code
y0_hat <- c(1,2,3,4,5)
x0_hat <- c(2,3,4,5,6)
ccf(y0_hat, x0_hat, lag.max=1, plot=FALSE)$acf
## , , 1
##
## [,1]
## [1,] 0.4
## [2,] 1.0
## [3,] 0.4
Code
## MAIN EXAMPLE
x_sim <- runif(tN, -1, 1) # White Noise
par(mfrow = c(2, 2))
for(alpha in c(0, .015)){
for(beta in c(0, .05)){
y_sim <- simulate_series(beta=beta, alpha=alpha)
ccf(y_sim, x_sim, main=NA)
plot_title(alpha=alpha, beta=beta)
}}
Spatial Interdependence
Many observational datasets exhibit spatial dependence, meaning that values at one location tend to be related to values at nearby locations. This violates the standard assumption of independent observations used in many classical statistical methods.
For example, elevation is spatially dependent: if one location is at high elevation, nearby locations are also likely (though not guaranteed) to be high. Similarly, socioeconomic outcomes like disease rates or income often cluster geographically due to shared environmental or social factors.
Just as stock prices today depend on yesterday, spatial variables often depend on neighboring regions, creating a need for specialized statistical methods that account for spatial autocorrelation.
Raster vs. Vector Data
Spatial data typically comes in two formats, each suited to different types of information:
- Vector data uses geometric shapes (points, lines, polygons) to store data. E.g., a census tract map that stores data on population demographics.
- Raster data uses grid cells (typically squares, but sometimes hexagons) to store data. E.g., an image that stores data on elevation above seawater.
Code
# Vector Data
library('sf')
northcarolina_vector <- st_read(system.file('shape/nc.shp', package='sf'))
## Reading layer `nc' from data source `/home/jadamson/R-Libs/sf/shape/nc.shp' using driver `ESRI Shapefile'
## Simple feature collection with 100 features and 14 fields
## Geometry type: MULTIPOLYGON
## Dimension: XY
## Bounding box: xmin: -84.32385 ymin: 33.88199 xmax: -75.45698 ymax: 36.58965
## Geodetic CRS: NAD27
plot(northcarolina_vector['BIR74'], main=NA)
title('Number of Live Births in 1974', font.main=1)
Code
# https://r-spatial.github.io/spdep/articles/sids.html
Code
## MAIN EXAMPLE
# Raster Data
library('terra')
luxembourg_elevation_raster <- rast(system.file('ex/elev.tif', package='terra'))
plot(luxembourg_elevation_raster)
The size and shape of the areal units used to aggregate spatial data are a choice, and results can depend on it (Gehlke and Biehl 1934; Openshaw 1984; Fotheringham and Wong 1991), including for econometric estimates (Briant et al. 2010). See Adamson (2022) for an econometric model of ethnic maps and the endogenous areal unit problem, where the same variables shape both the units and the outcomes. Earlier work in geography studied units that are grouped non-randomly, but not units that form endogenously (Holt et al. 1996).
Stationary
Just as with temporal data, stationarity in spatial data means that the statistical properties (like mean, variance, or spatial correlation) are roughly the same across space.
- Stationary Means: \(\mathbb{E}[Y(s)]=\mathbb{E}[Y(s')]\) for all spatial locations \(s,s'\)
- Stationary Vars: \(\mathbb{V}[Y(s)]=\mathbb{V}[Y(s')]\) for all spatial locations \(s,s'\)
Code
# Simulated 2D spatial fields
n <- 20
x <- y <- seq(0, 1, length.out = n)
grid <- expand.grid(x = x, y = y)
# 1. Stationary: Gaussian with constant mean and var
z_stationary <- matrix(rnorm(n^2, 0, 1), n, n)
# 2. Nonstationary: Mean increases with x and y
z_nonstationary <- outer(x, y, function(x, y) 3*x*y) + rnorm(n^2, 0, 1)
par(mfrow = c(1, 2))
# Stationary field
image(x, y, z_stationary,
main = NA,
col = terrain.colors(100),
xlab = 'x', ylab = 'y')
title('Stationary Field', font.main = 1)
# Nonstationary field
image(x, y, z_nonstationary,
main = NA,
col = terrain.colors(100),
xlab = 'x', ylab = 'y')
title('Nonstationary Field', font.main = 1)
Measures of spatial association
Just as temporal data can exhibit autocorrelation, so can spatial data. Nearby locations tend to be more (or less) similar than spatial independence would predict.
Moran’s I (Moran 1950) is an index of spatial autocorrelation ranging from \(-1\) to \(1\). Values near \(1\) indicate that nearby locations have similar values, \(-1\) that they have dissimilar values, and \(0\) that they are spatially independent.
Moran’s I is useful as the spatial analog of the ACF. It summarizes overall spatial dependence in one number. Large positive values signal that nearby observations share information, so we cannot treat them as independent. A two-variable analog measures spatial cross-correlation, computed like the CCF but with spatial rather than temporal lags.
Code
## MAIN EXAMPLE
# Raster Data Example
autocor(luxembourg_elevation_raster, method='moran', global=TRUE)
## elevation
## 0.8917057
Moran’s I ranges from \(-1\) to \(1\). A value near \(1\) indicates strong positive spatial autocorrelation (nearby locations have similar values), near \(-1\) indicates negative spatial autocorrelation (nearby locations have dissimilar values), and near \(0\) indicates spatial independence. For elevation data, we expect strong positive autocorrelation because terrain changes gradually.
Cross-Correlation. We can also assess the relationship between two variables at varying distances.
Code
# Vector Data Example
xy_hat <- as.data.frame(northcarolina_vector)[, c('BIR74', 'SID74')]
column_means <- colMeans(xy_hat)
# Format Distances
dmat <- st_distance( st_centroid(northcarolina_vector) )
dmat <- units::set_units(dmat, 'km')
# At Which Distances to Compute CCF
# summary(dmat[, 1])
rdists <- c(-1, seq(0, 100, by=25)) # includes 0
rdists <- units::set_units(rdists , 'km')
# Compute Cross-Covariances
varXY <- prod( apply(xy_hat, 2, sd) )
CCF <- lapply( seq(2, length(rdists)), function(ri){
# Which Observations are within (rmin, rmax] distance
dmat_r <- dmat
d_id <- (dmat_r > rdists[ri-1] & dmat_r <= rdists[ri])
dmat_r[!d_id] <- NA
# Compute All Covariances (Stationary)
covs_r <- lapply(1:nrow(dmat_r), function(i){
pairsi <- which(!is.na(dmat_r[i, ]))
covXiYj <- sapply(pairsi, function(j) {
dXi <- xy_hat[i, 1] - column_means[1]
dYj <- xy_hat[j, 2] - column_means[2]
return(dXi*dYj)
})
return(covXiYj)
})
corXY <- unlist(covs_r)/varXY
return(corXY)
} )
Code
# Plot Cross-Covariance Function
x <- as.numeric(rdists[-1])
par(mfrow=c(1, 2))
# Distributional Summary
# The axis stops just past -1 and 1, so 106 of the 1708 values are not drawn
boxplot(CCF,
border=NA, medcol=grey(.4), # a darker shade of the default grey fill, for the median
outline=FALSE, whisklty=0, staplelty=0,
ylim=c(-1, 1), #quantile(unlist(CCF), probs=c(.05, .95)),
names=x,
main=NA,
xlab='Distance [km]',
ylab='Cross-Correlation of BIR74 and SID74')
# Raw Observations, in place of whiskers and outliers
stripchart(CCF,
pch='-', col=grey(0, .25), cex=1,
vert=TRUE, add=TRUE)
title('Binned Medians and IQRs', font.main=1, adj=0)
abline(h=0, col=grey(.5), lty=3)
# Inferential Summary
CCF_means <- sapply(CCF, mean)
plot(x, CCF_means,
ylim=c(-1, 1),
type='o', pch=16,
main=NA,
xlab='Distance [km]',
ylab='Cross-Correlation of BIR74 and SID74')
title('Binned Means + 95% Band', font.main=1, adj=0)
abline(h=0, col=grey(.5), lty=3)
# Quick and Dirty Subsampling CI
CCF_meanCI <- sapply(CCF, function(corXY){
ss_size <- floor(length(corXY)*3/4)
corXY_boot <- sapply(1:200, function(b){
corXY_b <- sample(corXY, ss_size, replace=FALSE)
mean(corXY_b, na.rm=TRUE)
})
quantile(corXY_boot, probs=c(.025, .975), na.rm=TRUE)
})
polygon( c(x, rev(x)),
c(CCF_meanCI[1, ], rev(CCF_meanCI[2, ])),
col=grey(0, .25), border=NA)
Two variables can also be related locally, within a window around each location (Brunsdon et al. 2002; Adamson 2021, 2025). Neighbors’ values can also enter a regression directly: a spatially lagged X model regresses outcomes on each location’s own variables and the sum of its neighbors’ values (Anselin 1988; LeSage and Pace 2009; Halleck Vega and Elhorst 2015; Adamson 2025).
Spatial dependence also matters for standard errors (Conley 1999; Müller and Watson 2022; Conley and Kelly 2025). For example, Adamson (2025) uses a spatial subsampling procedure (Politis et al. 1999; Sherman 1996; Choi and Chue 2007) for strongly dependent data.
Economic Interdependence
In addition to spatial and temporal dependence, many observational datasets exhibit interdependence between variables for economic reasons.
Endogeneity
Economic outcomes are not free variables we can move at will. Many are jointly determined, affected by selection, or driven by variables we have not measured.
A regressor is endogenous if it is correlated with the error term in a regression. The three classic sources are
- reverse causality: \(Y_{i} \to X_{i}\).
- simultaneity: \(Y_{i} \to X_{i}\) and \(X_{i} \to Y_{i}\).
- omitted variables: \(Z_{i}\to Y_{i}\) and either \(Z_{i}\to X_{i}\) or \(X_{i} \to Z_{i}\).
Endogeneity is a common reason that observational data are hard to interpret causally. In the linear model \(Y_{i}=\sum_{k=0}^{K}\beta_{k}X_{ik} + \epsilon_{i}\), endogeneity means \(\mathbb{E}[X_{ik}\epsilon_{i}] \neq 0\) for some \(k\). OLS is then biased away from the structural causal parameter.
Consider the relationship between education and wages. Identify a potential source of (a) omitted variable bias, (b) reverse causality, and (c) measurement error. For each, explain the direction in which you expect the OLS estimate to be biased.
Code
## MAIN EXAMPLE
# Simulate data with an endogeneity issue
n <- 300
z_sim <- rbinom(n, 1, .5)
xy_sim <- sapply(z_sim, function(zi){
y_sim <- rnorm(1, zi, 1)
x_sim <- rnorm(1, zi*2, 1)
c(x_sim, y_sim)
})
xy_sim <- data.frame(x_sim=xy_sim[1, ], y_sim=xy_sim[2, ])
plot(y_sim ~ x_sim, data=xy_sim, pch=16, col=grey(0, .25), main=NA)
abline(lm(y_sim ~ x_sim, data=xy_sim), col=rgb(1, 0, 0, .8), lwd=2)
I will focus on the seminal economic example to provide some intuition.
Competitive Market Equilibrium
This model has three structural relationships. First, market supply is the sum of quantities supplied by individual firms at a given price. Second, market demand is the sum of quantities demanded by individual people at a given price. Third, market supply equals market demand in equilibrium. Assuming market supply and demand are linear, we can write these three relationships as \[\begin{aligned}
Q_{S}(P) &= \alpha_{S} + \beta_{S} P + E_{S}, \\
Q_{D}(P) &= \alpha_{D} - \beta_{D} P + E_{D}, \\
Q_{D} &= Q_{S} = Q.
%% $Q_{D}(P) = \sum_{i} q_{D,i}(P)$,
\end{aligned}\]
Contamination
With multiple linear regression, endogeneity biases are not just a problem for your main variable of interest. Suppose you are interested in how \(X_{i1}\) affects \(Y_{i}\), conditioning on \(X_{i2}\), and that the data generating process is linear: \(Y_{i}=\beta_{0}+\beta_{1}X_{i1}+\beta_{2}X_{i2}+\epsilon_{i}\). You paid special attention in your research design to find a case where \(X_{i1}\) is truly exogenous. Unfortunately, if \(X_{i2}\) is correlated with the error term, then there is also a bias for \(X_{i1}\). The magnitude of the bias for \(X_{i1}\) depends on the correlations between \(X_{i1}\) and \(X_{i2}\) as well as \(X_{i2}\) and \(\epsilon_{i}\).
Exercises
Comment the script you wrote for this chapter, then restart R and check that it runs from a clean session, then check the script with AI as explained in Working with AI. Write three sentences from memory on the main statistical idea of this chapter, and ask the assistant what is wrong, vague, or missing. Finish with your own questions about whatever you found hardest.
Explain why simultaneity in a competitive market makes it difficult to interpret the OLS slope \(\hat{b}_{1}\) from a regression of quantity on price. In your answer, distinguish between the structural demand slope \(\beta_{D}\) and what OLS actually estimates.
Using the North Carolina births data (sf::st_read(system.file('shape/nc.shp', package='sf'))), compute Moran’s I for the variable SID74 (sudden infant deaths in 1974). Is there evidence of spatial autocorrelation? Briefly explain what a high value of Moran’s I would imply for standard OLS inference.
Simulate a random walk of length 200 in R (starting at 0, with increments drawn from runif(1, -1, 1)). Plot the series, compute the ACF using acf(), and describe how the ACF pattern differs from what you would expect for white noise.
Recall
This chapter introduced temporal, spatial, and economic dependence in observational data. It measured temporal dependence with the ACF and CCF, and spatial dependence with Moran’s I. For economic dependence, it listed the sources of endogeneity. The supply-demand simulation made the endogeneity bite concrete: we ran 300 market periods through qd_fun/qs_fun, fit lm(Q ~ P, data=xy1_sim), and got a slope that confuses the supply and demand sides because price and quantity are jointly determined.
Adamson, Jordan. 2021.
“The Scope of Political Jurisdictions and Violence: Theory and Evidence from Africa.” Public Choice 186 (3): 467–90.
https://doi.org/10.1007/s11127-019-00763-8.
Adamson, Jordan. 2022.
“An Econometric Model of Ethnic Maps and Evaluation of the Endogenous Areal Unit Problem.” Working Paper. In preparation.
https://papers.ssrn.com/sol3/papers.cfm?abstract_id=4091833.
Adamson, Jordan. 2025.
“Trade and the Rise of Ancient Greek City-States.” Journal of Economic Behavior & Organization 235: 107035.
https://doi.org/10.1016/j.jebo.2025.107035.
Anselin, Luc. 1988.
Spatial Econometrics: Methods and Models. Studies in Operational Regional Science. Springer Netherlands.
https://doi.org/10.1007/978-94-015-7799-1.
Briant, A., P.-P. Combes, and M. Lafourcade. 2010.
“Dots to Boxes: Do the Size and Shape of Spatial Units Jeopardize Economic Geography Estimations?” Journal of Urban Economics 67 (3): 287–302. https://doi.org/
https://doi.org/10.1016/j.jue.2009.09.014.
Brunsdon, C., A. S. Fotheringham, and M. Charlton. 2002.
“Geographically Weighted Summary Statistics: A Framework for Localised Exploratory Data Analysis.” Computers, Environment and Urban Systems 26 (6): 501–24.
https://doi.org/10.1016/S0198-9715(01)00009-6.
Choi, In, and Timothy K. Chue. 2007.
“Subsampling Hypothesis Tests for Nonstationary Panels with Applications to Exchange Rates and Stock Prices.” Journal of Applied Econometrics 22 (2): 233–64.
http://www.jstor.org/stable/25146516.
Conley, Timothy G. 1999.
“GMM Estimation with Cross Sectional Dependence.” Journal of Econometrics 92 (1): 1–45.
https://doi.org/10.1016/S0304-4076(98)00084-0.
Conley, Timothy G., and Morgan Kelly. 2025.
“The Standard Errors of Persistence.” Journal of International Economics 153: 104027.
https://doi.org/10.1016/j.jinteco.2024.104027.
Fotheringham, A S, and D W S Wong. 1991.
“The Modifiable Areal Unit Problem in Multivariate Statistical Analysis.” Environment and Planning A: Economy and Space 23 (7): 1025–44.
https://doi.org/10.1068/a231025.
Gehlke, C. E., and Katherine Biehl. 1934.
“Certain Effects of Grouping Upon the Size of the Correlation Coefficient in Census Tract Material.” Journal of the American Statistical Association 29 (185A): 169–70.
https://doi.org/10.1080/01621459.1934.10506247.
Halleck Vega, Solmaria, and J. Paul Elhorst. 2015.
“The SLX Model.” Journal of Regional Science 55 (3): 339–63.
https://doi.org/10.1111/jors.12188.
Holt, D., D. G. Steel, M. Tranmer, and N. Wrigley. 1996.
“Aggregation and Ecological Effects in Geographically Based Data.” Geographical Analysis 28 (3): 244–61.
https://doi.org/10.1111/j.1538-4632.1996.tb00933.x.
LeSage, James, and Kelley R. Pace. 2009. Introduction to Spatial Econometrics. Chapman & Hall.
Moran, P. A. P. 1950.
“Notes on Continuous Stochastic Phenomena.” Biometrika 37 (1-2): 17–23.
https://doi.org/10.1093/biomet/37.1-2.17.
Müller, Ulrich K., and Mark W. Watson. 2022.
“Spatial Correlation Robust Inference.” Econometrica 90 (6): 2901–35.
https://doi.org/10.3982/ECTA19465.
Openshaw, Stan. 1984.
“Ecological Fallacies and the Analysis of Areal Census Data.” Environment and Planning A: Economy and Space 16 (1): 17–31.
https://doi.org/10.1068/a160017.
Politis, D. N., J. P. Romano, M. Wolf, P. Diggle, and S. Fienberg. 1999.
Subsampling. Springer Series in Statistics. Springer New York.
https://books.google.de/books?id=nGu6rqjE6JoC.
Sherman, Michael. 1996.
“Variance Estimation for Statistics Computed from Spatial Lattice Data.” Journal of the Royal Statistical Society: Series B (Methodological) 58 (3): 509–23.
https://doi.org/10.1111/j.2517-6161.1996.tb02097.x.