Satellite Night-Light GDP Analysis
Matched night-time satellite brightness with World Bank indicators at the country-year level and tested how far night light holds up as a supporting indicator for GDP.
Quick read
The through-line of the work.
Open
The starting question
It started with a question: could traces of economic activity be seen even where official statistics are scarce, the way night-time satellite images of North Korea suggest?
Build
What I checked
I matched VIIRS night-light data with World Bank GDP, population, urbanisation, and electricity-access indicators at the country-year level for 2019–2023.
Turn
What changed my view
The simple regression's R-squared of 0.819 reproduced, but the urban-population and electricity-access moderators added little explanatory power. Brightness alone did not turn out to be enough to read an economy.
Close
Where I draw the line
The conclusion is not a new forecasting model but the data-integrity checks and the limits of interpretation needed before night light can be used as a supporting economic indicator.
01 · Start
The question I began with
When official statistics are scarce or late, how far can night-light intensity serve as a supporting indicator of economic activity?
02 · Material
The data and evidence
03 · Work
How I worked through it
- 01
Frame the question
Started from the need for an alternative signal where official GDP is late or limited, and took night-light intensity as the candidate indicator.
- 02
Integrate country-year data
Matched VIIRS brightness and World Bank indicators by country name and year to build a 2019–2023 panel-shaped analysis table.
- 03
Test the relationship and its moderators
Log-transformed skewed variables and added urban-population and electricity-access interaction terms to see whether the relationship changes with conditions.
- 04
Fix data integrity
Found that the brightness column in the xlsx that came with the report was misaligned, dropped the scatterplot claim, and kept only the values that the SPSS analysis file and reproduce.py reproduce.
04 · Takeaway
What the numbers suggested
In the simple regression, night-light intensity explains 81.9% of GDP variation (R-squared = 0.819, N = 791), reproducible via reproduce.py in the repository.
Adding the urban-population and electricity-access interaction terms raised explanatory power only slightly. What mattered was the baseline relationship and checking data quality, not a more complex model.
The misaligned brightness column in the accompanying xlsx could be read as a higher R-squared; the repository carries an explicit warning not to use that value.
The result is an explanatory relationship, not evidence of prediction accuracy, causation, or the ability to replace official GDP.
Not claimed
- Does not claim predictive accuracy. R-squared is in-sample explanatory power.
- Does not claim causation. Brightness does not create GDP.
- Does not propose a new method. It checks how far a known relationship holds.
05 · Use
Where this helps
Rather than replacing official statistics, night-light data can serve as a supporting signal for first-pass screening of countries and regions, or for monitoring change where statistics are missing.
06 · Boundary
What still needs checking
- •973, 820, and 791 belong to different data-processing stages, so they are never used interchangeably as one sample size.
- •The night-light–GDP relationship is an established research topic. The point of this project is not a new academic contribution but framing the question myself and verifying data integrity.
- •Because the brightness definition could differ between the report and the files, the scatterplot claim was dropped.
- •Claims about prediction or causation would need fixed effects and out-of-sample validation.
07 · Figures
Tables and figures
Alternative-data pipeline
Verified sourceThe diagram shows how satellite and economic indicators enter a country-year analysis. It explains provenance and process; it does not establish that night lights cause GDP.
Source · GDP project report, PPTX, XLSX, and SPSS output
Simple-model fit
Verified sourceReproduced R-squared
0.819
N = 791 · slope 0.834 · p < 0.001
Recomputed by the repository's reproduce.py from the SPSS analysis file. It is explanatory fit within the sample, not 81.9% prediction accuracy and not causal evidence.
Source · reproduce.py · SPSS analysis file (.sav) · ln(GDP) ~ ln(brightness)
Distinct dataset stages
Verified source973
Raw rows
820
Merged observations
791
GDP observations
973, 820, and 791 refer to raw rows, merged observations, and GDP-usable observations. They are different processing stages and must not be treated as interchangeable sample sizes.
Source · reproduce.py row counts · project spreadsheet and SPSS file