“At a certain stage of development, the material productive forces of society come into conflict with the existing relations of production or – this merely expresses the same thing in legal terms – with the property relations within the framework of which they have operated hitherto. From forms of development of the productive forces these relations turn into their fetters. Then begins an era of social revolution. The changes in the economic foundation lead sooner or later to the transformation of the whole immense superstructure. In studying such transformations it is always necessary to distinguish between the material transformation of the economic conditions of production, which can be determined with the precision of natural science, and the legal, political, religious, artistic or philosophic—in short, ideological forms in which men become conscious of this conflict and fight it out.”

– Karl Marx1

“The most widely used, and most fallacious, method in the realm of social phenomena is to tear out individual minor facts and juggle with examples. Selecting chance examples presents no difficulty at all, but is of no value, or of purely negative value, for in each individual case everything hinges on the historically concrete situation. Facts, if we take them in their entirety, in their interconnection, are not only stubborn things, but undoubtedly proof-bearing things. Minor facts, if taken out of their entirety, out of their interconnection, if they are arbitrarily selected and torn out of context, are merely things for juggling, or even worse. […] We must seek to build a reliable foundation of precise and indisputable facts that can be confronted to any of the "general" or "example-based" arguments now so grossly misused in certain countries. And if it is to be a real foundation, we must take not individual facts, but the sum total of facts, without a single exception, relating to the question under discussion. Otherwise there will be the inevitable, and fully justified, suspicion that the facts were selected or compiled arbitrarily, that instead of historical phenomena being presented in objective interconnection and interdependence and treated as a whole, we are presenting a”subjective" concoction to justify what might prove to be a dirty business. This does happen … and more often than one might think.

“Proceeding from these considerations, we have decided to begin with statistics, fully aware of course that statistics are deeply antipathetic to certain readers, who prefer”flattering deception" to “base truths”, and to certain authors, who are prone to smuggle in political contraband under cover of “general” disquisitions about internationalism, cosmopolitanism, nationalism, patriotism, etc. […] For a proper survey of the whole complex of data on national movements, we must take the whole population of the earth. And in so doing, two criteria must be established with the utmost accuracy and examined with the utmost fullness: first, national homogeneity or heterogeneity of the population of various states; second, division of states (or of state-like formations in cases where there is doubt that we are really dealing with a state) into politically independent and politically dependent."

– Vladimir I. Lenin2

“A Marxist must take cognisance of real life, of the true facts of reality, and not cling to a theory of yesterday, which, like all theories, at best only outlines the main and the general.”

– Vladimir I. Lenin3

“More economics. But not in the sense of”general" discussions, learned reviews, intellectual plans and similar piffle, for, I regret to say, they are all too often just piffle and nothing more. By economics we mean the gathering, careful checking and study of the facts of the actual organisation of the new life."

– Vladimir I. Lenin4

1 Introduction

The general purpose of this project is to characterize the main unfolding structures of late global capitalist society, using the Marxist (accounting and theoretical) framework to organize the study of major sets of high quality, publicly-available international data, such as the following:

The general term structure designates a phenomenon that, though constituted by distinguishable component parts, cannot be reduced to these parts regarded in isolation. Rather, a structure is an emergent property of all of its component parts combined, which exists on a plane that transcends that of its elementary components. The term social structure, in particular, refers here to a relatively stable set of social relations of production. These social structures are quantifiable by means of suitable proportions or (structural) parameters. For example, following Marx (1867), a proportion that summarizes the conditions of the overall class balance of forces in a capitalist society is the rate of exploitation, which appears phenomenally (i.e. distorted or transformed by competition among individual capitals) as the normal profit rate. Thus, a goal of this project is to produce plausible empirical estimates of these proportions, trace out their evolution in the last few decades, and investigate the mutual interplay among them.

In sum, late global society will be viewed as a complex array of intertwined social structures. The elementary components of late global society are the more than 7 billion of human beings currently living on earth. The phenomenon called “late global society” is the resultant of their interactions, jelling into relatively stable social inter-relations or structures, such as capital aggregates, national and multinational states, etc.

At first sight, human society globally considered is conformed as a multinational conglomerate, with national states defining its units. As politically organized and legally constituted in their national states, individuals appears as citizens or subjects of these states. The interrelations among these discrete political entities falls under the rubric of “international” relations. Thus, “international” refers to the interrelations among national states, i.e. the international composition or structure of “global” society. The “regional” structures refer to those that involve aggregates of countries on the basis of shared geographic, demographic (population size), economic (size and productivity), and ethnolinguistic characteristics.

The term “global” highlights that the commonalities connecting all humans in the world are much more fundamental, organic, and fluid than the political and juridical structures of the national states may suggest. In fact, the political and legal structures are rather superficial forms (not necessarily unimportant in practice) in which the deeper structures, structures of an economic character, connecting the world population manifest.

As indicated above, the chief goal of this project is to characterize and summarize these deeper economic structures of global society, i.e. the basic social relations that flow most immediately from the individuals’ ongoing reproduction of their “material lives”: the measure, composition, and evolution of such structures using the vast stock of empirical material publicly available. There is an implicit self critique here, namely that Marxism needs to quantify these structures rather than simply speculate about them or draw inferences unsystematically from ad-hoc factual information. And something similar can be said about the international, regional, and sectoral levels.

For a summary of the theoretical framework used in this study, drawn from (Marx 1867), (Marx 1885), and (Marx 1894), using modern mathematical language, and showing then the rough correspondence between conventional national-accounting categories and Marx’s own, radical, critical, political-economic categories, see my notes on the Marxist framework for macro data analysis, the Marxist framework for inter-industry data analysis.

The first part of the project will use a battery of sample statistics and plots to describe the structure and evolution of late global society. The third will use the methodology of modern cross-sectional, time-series, and panel econometrics to estimate relations among variables and test a host of hypotheses concerning the main proportions involved. A concluding part will summarize, and attempt a brief synthesis, of the chief findings of the project.

2 Penn World Table 10.0

The Penn World Table 10.0 (PWT) contains internationally-comparable annual data on real GDP output-method \(Y\), real GDP expenditure-method \(Y_e\), population \(N\), employment \(E\), average hours of labor per employed person \(l\), labor share of income \(\omega\), consumption share of income \(c\), end-of-period capital stock \(K\), capital services \(K^s\), and the internal rate of return of capital \(\tilde{r}\) for 183 countries. The period under consideration ranges from 1954 to 2019 with an emphasis on the 1971-2019 subperiod.

The data are interpreted naively, i.e. under the strong assumption that the variables in the data set match exactly the corresponding Marxist categories. Admittedly, this assumption implies a measurement error of unknown size. However, with the resources at hand and considering the potential alternative uses, the cost of transforming a data set of these dimensions to make its variables conform to the theoretical categories seems to be much to steep.

The mapping of the primary theoretical and empirical categories follows:

Symbol Marxist variable PWT variable
\(N\) population population
\(E\) employed workers engaged persons
\(L\) direct labor time hours worked by engaged persons
\(Y\) value added real GDP output method
\(Y_e\) value added real GDP expenditure method
\(W\) variable capital labor income
\(C\) variable capital consumption spending
\(K_s\) constant capital capital services
\(K\) capital stock fixed capital stock

The largest discrepancies between Marxist and empirical categories are related to (1) the likely overestimation of the annual value added as a host of ostensibly nonproductive activities are deemed to add value, and (2) the likely overestimation of the labor share of income (value added) and, correspondingly, the underestimation of the capitalists’ surplus value, as national accounting conventions include the hefty salaries and labor benefits of managers as labor income.

However, much of the focus of this paper is on the empirical time path of these categories. The time-series characterization of the structural variables of interest (productivity, exploitation, and profitability measures) is affected by these discrepancies only to the extent such discrepancies grow or decay significantly over time. As long as the magnitude of the discrepancies between theoretical and empirical categories remains relatively constant, the time-series implications of the analysis are barely affected.

To allow full replicability of results, data sets and R code are stored in this repository:

https://github.com/jhuato/deeper_structures

Section

library(readr)
x  <- read_csv("Downloads/pwt100.csv") 
## Parsed with column specification:
## cols(
##   .default = col_double(),
##   countrycode = col_character(),
##   country = col_character(),
##   currency_unit = col_character(),
##   i_cig = col_character(),
##   i_xm = col_character(),
##   i_xr = col_character(),
##   i_outlier = col_character(),
##   i_irr = col_character()
## )
## See spec(...) for full column specifications.
x <- x[ which(x$year > 1953 ), ]
x$c <- x$csh_c
x$c[x$c<0 | x$c>1] <- NA 
x$Y <- x$rgdpo 
x$Ye <- x$rgdpe
x$om <- x$labsh
x$l <- x$avh
x$Ks <- x$rkna
x$W <- x$labsh * x$Y
x$C <- x$c * x$Ye
x$K <- x$rnna
x$N <- x$pop
x$E <- x$emp
x$L <- x$avh * x$E
x <- x[ , c(1, 4, 53:64)]
str(x)
## tibble [12,078 × 14] (S3: tbl_df/tbl/data.frame)
##  $ countrycode: chr [1:12078] "ABW" "ABW" "ABW" "ABW" ...
##  $ year       : num [1:12078] 1954 1955 1956 1957 1958 ...
##  $ c          : num [1:12078] NA NA NA NA NA NA NA NA NA NA ...
##  $ Y          : num [1:12078] NA NA NA NA NA NA NA NA NA NA ...
##  $ Ye         : num [1:12078] NA NA NA NA NA NA NA NA NA NA ...
##  $ om         : num [1:12078] NA NA NA NA NA NA NA NA NA NA ...
##  $ l          : num [1:12078] NA NA NA NA NA NA NA NA NA NA ...
##  $ Ks         : num [1:12078] NA NA NA NA NA NA NA NA NA NA ...
##  $ W          : num [1:12078] NA NA NA NA NA NA NA NA NA NA ...
##  $ C          : num [1:12078] NA NA NA NA NA NA NA NA NA NA ...
##  $ K          : num [1:12078] NA NA NA NA NA NA NA NA NA NA ...
##  $ N          : num [1:12078] NA NA NA NA NA NA NA NA NA NA ...
##  $ E          : num [1:12078] NA NA NA NA NA NA NA NA NA NA ...
##  $ L          : num [1:12078] NA NA NA NA NA NA NA NA NA NA ...
summary(x)
##  countrycode             year            c                Y           
##  Length:12078       Min.   :1954   Min.   :0.0260   Min.   :      28  
##  Class :character   1st Qu.:1970   1st Qu.:0.5315   1st Qu.:    7152  
##  Mode  :character   Median :1986   Median :0.6306   Median :   30951  
##                     Mean   :1986   Mean   :0.6268   Mean   :  311619  
##                     3rd Qu.:2003   3rd Qu.:0.7415   3rd Qu.:  161706  
##                     Max.   :2019   Max.   :0.9993   Max.   :20596100  
##                                    NA's   :2167     NA's   :1918      
##        Ye                 om              l              Ks       
##  Min.   :      20   Min.   :0.090   Min.   :1381   Min.   :0.005  
##  1st Qu.:    6790   1st Qu.:0.452   1st Qu.:1785   1st Qu.:0.206  
##  Median :   30329   Median :0.537   Median :1964   Median :0.454  
##  Mean   :  309391   Mean   :0.532   Mean   :1981   Mean   :0.489  
##  3rd Qu.:  159017   3rd Qu.:0.621   3rd Qu.:2160   3rd Qu.:0.748  
##  Max.   :20862690   Max.   :0.903   Max.   :3040   Max.   :1.975  
##  NA's   :1918       NA's   :4315    NA's   :8696   NA's   :4983   
##        W                  C                  K                  N            
##  Min.   :      38   Min.   :      12   Min.   :      28   Min.   :   0.0044  
##  1st Qu.:    6854   1st Qu.:    4803   1st Qu.:   24296   1st Qu.:   1.5444  
##  Median :   26665   Median :   19753   Median :  127152   Median :   6.0838  
##  Mean   :  234110   Mean   :  183156   Mean   : 1474787   Mean   :  31.0420  
##  3rd Qu.:  130695   3rd Qu.:   90794   3rd Qu.:  775260   3rd Qu.:  19.8403  
##  Max.   :12297749   Max.   :14677080   Max.   :81726344   Max.   :1433.7837  
##  NA's   :4735       NA's   :2167       NA's   :2003       NA's   :1918       
##        E                  L            
##  Min.   :  0.0012   Min.   :    169.3  
##  1st Qu.:  0.7602   1st Qu.:   5429.6  
##  Median :  2.8442   Median :  12147.1  
##  Mean   : 14.2215   Mean   :  61610.1  
##  3rd Qu.:  8.2734   3rd Qu.:  43932.6  
##  Max.   :799.3066   Max.   :1733631.2  
##  NA's   :2772       NA's   :8696
x0 <- x

The variables (hereon called “parameters”) that capture the deeper structures of a capitalist society are, respectively,

  1. Labor productivity, measured by
  1. Exploitation or balance of class forces, measured by
  1. Profitability of capital, measured by

This computes the annual parameters for each country:

x$yN <- x$Y/x$N
x$yE <- x$Y/x$E
x$yL <- x$Y/x$L
x$wN <- (1 - x$om)*x$Y/x$N
x$wE <- (1 - x$om)*x$Y/x$E
x$wL <- (1 - x$om)*x$Y/x$L
x$s <- (1 - x$om)/x$om
x$ss <- (1 - x$c)/x$c
x$h <- x$Ks/x$W
x$rho <- x$Y/x$K
x$r <- (1 - x$om)*x$Y/x$K
x$ka <- (1 - x$c)*x$Y/x$K
str(x)
## tibble [12,078 × 26] (S3: tbl_df/tbl/data.frame)
##  $ countrycode: chr [1:12078] "ABW" "ABW" "ABW" "ABW" ...
##  $ year       : num [1:12078] 1954 1955 1956 1957 1958 ...
##  $ c          : num [1:12078] NA NA NA NA NA NA NA NA NA NA ...
##  $ Y          : num [1:12078] NA NA NA NA NA NA NA NA NA NA ...
##  $ Ye         : num [1:12078] NA NA NA NA NA NA NA NA NA NA ...
##  $ om         : num [1:12078] NA NA NA NA NA NA NA NA NA NA ...
##  $ l          : num [1:12078] NA NA NA NA NA NA NA NA NA NA ...
##  $ Ks         : num [1:12078] NA NA NA NA NA NA NA NA NA NA ...
##  $ W          : num [1:12078] NA NA NA NA NA NA NA NA NA NA ...
##  $ C          : num [1:12078] NA NA NA NA NA NA NA NA NA NA ...
##  $ K          : num [1:12078] NA NA NA NA NA NA NA NA NA NA ...
##  $ N          : num [1:12078] NA NA NA NA NA NA NA NA NA NA ...
##  $ E          : num [1:12078] NA NA NA NA NA NA NA NA NA NA ...
##  $ L          : num [1:12078] NA NA NA NA NA NA NA NA NA NA ...
##  $ yN         : num [1:12078] NA NA NA NA NA NA NA NA NA NA ...
##  $ yE         : num [1:12078] NA NA NA NA NA NA NA NA NA NA ...
##  $ yL         : num [1:12078] NA NA NA NA NA NA NA NA NA NA ...
##  $ wN         : num [1:12078] NA NA NA NA NA NA NA NA NA NA ...
##  $ wE         : num [1:12078] NA NA NA NA NA NA NA NA NA NA ...
##  $ wL         : num [1:12078] NA NA NA NA NA NA NA NA NA NA ...
##  $ s          : num [1:12078] NA NA NA NA NA NA NA NA NA NA ...
##  $ ss         : num [1:12078] NA NA NA NA NA NA NA NA NA NA ...
##  $ h          : num [1:12078] NA NA NA NA NA NA NA NA NA NA ...
##  $ rho        : num [1:12078] NA NA NA NA NA NA NA NA NA NA ...
##  $ r          : num [1:12078] NA NA NA NA NA NA NA NA NA NA ...
##  $ ka         : num [1:12078] NA NA NA NA NA NA NA NA NA NA ...

These structures are defined globally, by agggregation of

N <- tapply(x$N, x$year, sum, na.rm=TRUE) 
E <- tapply(x$E, x$year, sum, na.rm=TRUE)
L <- tapply(x$L, x$year, sum, na.rm=TRUE) 
Y <- tapply(x$Y, x$year, sum, na.rm=TRUE) 
Ye <- tapply(x$Ye, x$year, sum, na.rm=TRUE) 
W <- tapply(x$W, x$year, sum, na.rm=TRUE) 
C <- tapply(x$C, x$year, sum, na.rm=TRUE) 
K <- tapply(x$K, x$year, sum, na.rm=TRUE)
Ks <- tapply(x$Ks, x$year, sum, na.rm=TRUE)
yN <- Y/N
yE <- Y/E
yL <- Y/L
wN <- W/N
wE <- W/E
wL <- W/L
s <- (Y-W)/W
ss <- (Y - C)/C
h <- Ks/W
rho <- Y/K
r <- (Y-W)/K
ka <- (Y-C)/K
year <- c(1954:2019)
g <- data.frame(year, N, E, L, Y, Ye, W, C, K, yN, yE, yL, wN, wE, wL, 
                s, ss, h, rho, r, ka)
str(g)
## 'data.frame':    66 obs. of  21 variables:
##  $ year: int  1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 ...
##  $ N   : num  2049 2122 2163 2206 2250 ...
##  $ E   : num  832 860 877 894 920 ...
##  $ L   : num  668870 682443 693198 698754 696364 ...
##  $ Y   : num  8223652 8892769 9255498 9598716 9787235 ...
##  $ Ye  : num  8173657 8839403 9204950 9534211 9748980 ...
##  $ W   : num  5063572 5412092 5676998 5871016 5970366 ...
##  $ C   : num  5293654 5683958 5895475 6107692 6238964 ...
##  $ K   : num  37615393 39987898 41830131 43816962 45515156 ...
##  $ yN  : num  4014 4191 4280 4350 4350 ...
##  $ yE  : num  9882 10346 10554 10735 10639 ...
##  $ yL  : num  12.3 13 13.4 13.7 14.1 ...
##  $ wN  : num  2472 2551 2625 2661 2653 ...
##  $ wE  : num  6085 6296 6474 6566 6490 ...
##  $ wL  : num  7.57 7.93 8.19 8.4 8.57 ...
##  $ s   : num  0.624 0.643 0.63 0.635 0.639 ...
##  $ ss  : num  0.553 0.565 0.57 0.572 0.569 ...
##  $ h   : num  7.74e-07 8.27e-07 8.34e-07 9.06e-07 1.05e-06 ...
##  $ rho : num  0.219 0.222 0.221 0.219 0.215 ...
##  $ r   : num  0.084 0.087 0.0855 0.0851 0.0839 ...
##  $ ka  : num  0.0779 0.0802 0.0803 0.0797 0.078 ...

Also, these structures are defined internationally by taking account, in due turn, of each country’s

The analysis seeks to empirically characterize

The last section reports on the results of VARs, SVARs, VECM, and SVECM estimations, in an attempt to capture structural relations among

3 Global results

The global aggregation of the primary variables offers a structural history of late capitalist society in which each person and unit of value (2011 USD), regardless of country or year, appear as the basic units of observation.

The following plots offer a graphical summary of the contrast between the various measures of labor productivity (per capita, per worker, and per hour) and the corresponding measures of the real wage (per capita, per worker, and per hour):

byN <- coef(lm(log(g$yN) ~ g$year))[2]
bwN <- coef(lm(log(g$wN) ~ g$year))[2]
plot(g$year, g$yN, type="l", ylim=c(2000, 15000), 
     main="Global per-capita productivity and wage", 
     xlab="Year", ylab="2011 USD")
lines(g$year, g$wN, lty=2)
mtext(bquote(hat(y[N]) ==.(round(byN, 4))~","~ hat(w[N]) ==.(round(bwN, 4))))
legend("topleft", bty="n", lty=c(1, 2), c(expression(paste(y[N]), paste(w[N]))))

byE <- coef(lm(log(g$yE) ~ g$year))[2]
bwE <- coef(lm(log(g$wE) ~ g$year))[2]
plot(g$year, g$yE, type="l", ylim=c(5000, 35000), 
     main="Global per-worker productivity and wage", 
     xlab="Year", ylab="2011 USD")
lines(g$year, g$wE, lty=2)
mtext(bquote(hat(y[E]) ==.(round(byE, 4))~","~ hat(w[E]) ==.(round(bwE, 4))))
legend("topleft", bty="n", lty=c(1, 2), c(expression(paste(y[E]), paste(w[E]))))

byL <- coef(lm(log(g$yL[-c(1:16)]) ~ g$year[-c(1:16)]))[2]
bwL <- coef(lm(log(g$wL[-c(1:16)]) ~ g$year[-c(1:16)]))[2]
plot(g$year[-c(1:16)], g$yL[-c(1:16)], type="l", ylim=c(0, 20), 
     main="Global per-hour productivity and wage", 
     xlab="Year", ylab="2011 USD")
lines(g$year[-c(1:16)], g$wL[-c(1:16)], lty=2)
mtext(bquote(hat(y[L])  ==.(round(byL, 4))~","~ hat(w[L])  ==.(round(bwL, 4))))
legend("topleft", bty="n", lty=c(1, 2), c(expression(paste(y[L]), paste(w[L]))))

These plots show, respectively, the exploitation and expenditure-exploitation rates:

bs <- coef(lm(log(g$s) ~ g$year))[2]
bss <- coef(lm(log(g$ss) ~ g$year))[2]
plot(g$year, g$s, type="l", ylim=c(0.4, 1),
     main="Global exploitation rates", 
     xlab="Year", ylab=" ")
lines(g$year, g$ss, lty=2)
mtext(bquote(hat(sigma)  ==.(round(bs, 4))~","~ hat(sigma[e]) ==.(round(bss, 4))))
legend("topleft", bty="n", lty=c(1, 2), c(expression(paste(sigma), paste(sigma[e] ))))

The flow-flow capital consumption plot follows:

bh <- coef(lm(log(g$h) ~ g$year))[2]
plot(g$year, g$h, type="l", 
     main="Global flow-flow capital composition", 
     xlab="Year", ylab="h")
mtext(bquote(hat(h) ==.(round(bh, 4))))

The output-capital ratio plot follows:

brho <- coef(lm(log(g$rho) ~ g$year))[2]
plot(g$year, g$rho, type="l", 
     main="Global output-capital ratio", 
     xlab="Year", ylab=expression(paste(rho)))
mtext(bquote(hat(rho) ==.(round(brho, 4))))

The following plots show the profit and accumulation rates:

br <- coef(lm(log(g$r) ~ g$year))[2]
bka <- coef(lm(log(g$ka) ~ g$year))[2]
plot(g$year, g$r, type="l", ylim=c(0.08, .13),
     main="Global profit rates", 
     xlab="Year", ylab=" ")
lines(g$year, g$ka, lty=2)
mtext(bquote(hat(r)  ==.(round(br, 4))~","~ hat(kappa) ==.(round(bka, 4))))
legend("topleft", bty="n", lty=c(1, 2), c(expression(paste(r), paste(kappa))))

4 International results

The following density plots show the international distribution of the structural parameters in selected years: 1975, 1995, and 2015:

yN75<-log(na.omit(subset(x$yN, x$year==1975)))
yN95<-log(na.omit(subset(x$yN, x$year==1995)))
yN15<-log(na.omit(subset(x$yN, x$year==2015)))

yE75<-log(na.omit(subset(x$yE, x$year==1975)))
yE95<-log(na.omit(subset(x$yE, x$year==1995)))
yE15<-log(na.omit(subset(x$yE, x$year==2015)))

yL75<-log(na.omit(subset(x$yL, x$year==1975)))
yL95<-log(na.omit(subset(x$yL, x$year==1995)))
yL15<-log(na.omit(subset(x$yL, x$year==2015)))

wN75<-log(na.omit(subset(x$wN, x$year==1975)))
wN95<-log(na.omit(subset(x$wN, x$year==1995)))
wN15<-log(na.omit(subset(x$wN, x$year==2015)))

wE75<-log(na.omit(subset(x$wE, x$year==1975)))
wE95<-log(na.omit(subset(x$wE, x$year==1995)))
wE15<-log(na.omit(subset(x$wE, x$year==2015)))

wL75<-log(na.omit(subset(x$wL, x$year==1975)))
wL95<-log(na.omit(subset(x$wL, x$year==1995)))
wL15<-log(na.omit(subset(x$wL, x$year==2015)))

s75<-log(na.omit(subset(x$s, x$year==1975)))
s95<-log(na.omit(subset(x$s, x$year==1995)))
s15<-log(na.omit(subset(x$s, x$year==2015)))

ss75<-log(na.omit(subset(x$ss, x$year==1975)))
ss95<-log(na.omit(subset(x$ss, x$year==1995)))
ss15<-log(na.omit(subset(x$ss, x$year==2015)))

h75<-log(na.omit(subset(x$h, x$year==1975)))
h95<-log(na.omit(subset(x$h, x$year==1995)))
h15<-log(na.omit(subset(x$h, x$year==2015)))

rho75<-log(na.omit(subset(x$rho, x$year==1975)))
rho95<-log(na.omit(subset(x$rho, x$year==1995)))
rho15<-log(na.omit(subset(x$rho, x$year==2015)))

r75<-log(na.omit(subset(x$r, x$year==1975)))
r95<-log(na.omit(subset(x$r, x$year==1995)))
r15<-log(na.omit(subset(x$r, x$year==2015)))

ka75<-log(na.omit(subset(x$ka, x$year==1975)))
ka95<-log(na.omit(subset(x$ka, x$year==1995)))
ka15<-log(na.omit(subset(x$ka, x$year==2015)))

# Multi plot function:
# The input of the function MUST be a numeric list
plot.multi.dens <- function(s)
{
        junk.x = NULL
        junk.y = NULL
        for(i in 1:length(s))
        {
                junk.x = c(junk.x, density(s[[i]])$x)
                junk.y = c(junk.y, density(s[[i]])$y)
        }
        xr <- range(junk.x)
        yr <- range(junk.y)
        plot(density(s[[1]]), xlim = xr, ylim = yr, main = "", xlab = "")
        for(i in 1:length(s))
        {
                lines(density(s[[i]]), xlim = xr, ylim = yr, lty=i)
        }
}

library(Hmisc)
## Loading required package: lattice
## Loading required package: survival
## Loading required package: Formula
## Loading required package: ggplot2
## 
## Attaching package: 'Hmisc'
## The following objects are masked from 'package:base':
## 
##     format.pval, units
# Density plots:
plot.multi.dens(list(yN75,yN95,yN15))
title(main = expression(paste(log(y[N]), ": Per-capita productivity")))
legend("topleft", bty="n", legend=c("1975","1995","2015"), lty =(1:3))

plot.multi.dens(list(yE75,yE95,yE15))
title(main = expression(paste(log(y[E]), ": Per-worker productivity")))
legend("topleft", bty="n", legend=c("1975","1995","2015"), lty =(1:3))

plot.multi.dens(list(yL75,yL95,yL15))
title(main = expression(paste(log(y[L]), ": Per-hour productivity")))
legend("topleft", bty="n", legend=c("1975","1995","2015"), lty =(1:3))

plot.multi.dens(list(wN75,wN95,wN15))
title(main = expression(paste(log(w[N]), ": Per-capita wage")))
legend("topleft", bty="n", legend=c("1975","1995","2015"), lty =(1:3))

plot.multi.dens(list(wE75,wE95,wE15))
title(main = expression(paste(log(w[E]), ": Per-worker wage")))
legend("topleft", bty="n", legend=c("1975","1995","2015"), lty =(1:3))

plot.multi.dens(list(wL75,wL95,wL15))
title(main = expression(paste(log(w[L]), ": Per-hour wage")))
legend("topleft", bty="n", legend=c("1975","1995","2015"), lty =(1:3))

plot.multi.dens(list(s75,s95,s15))
title(main = expression(paste(log(sigma), ": Exploitation rate")))
legend("topleft", bty="n", legend=c("1975","1995","2015"), lty =(1:3))

plot.multi.dens(list(ss75,ss95,ss15))
title(main = expression(paste(log(sigma[e]), ": Expenditure-exploitation rate")))
legend("topleft", bty="n", legend=c("1975","1995","2015"), lty =(1:3))

plot.multi.dens(list(h75,h95,h15))
title(main = expression(paste(log(h), ": Capital composition")))
legend("topleft", bty="n", legend=c("1975","1995","2015"), lty =(1:3))

plot.multi.dens(list(rho75,rho95,rho15))
title(main = expression(paste(log(rho), ": Output-capital ratio")))
legend("topleft", bty="n", legend=c("1975","1995","2015"), lty =(1:3))

plot.multi.dens(list(r75,r95,r15))
title(main = expression(paste(log(r), ": Profit rate")))
legend("topleft", bty="n", legend=c("1975","1995","2015"), lty =(1:3))

plot.multi.dens(list(ka75,ka95,ka15))
title(main = expression(paste(log(kappa), ": Accumulation rate")))
legend("topleft", bty="n", legend=c("1975","1995","2015"), lty =(1:3))

4.1 Unweighted aggregates: one country, one observation unit

Under current international law, national states are endowed with formal political sovereignity. History shows that the weight of the juridical figure is relative in terms of effective international relations. As a first approximation to the characterization of the deep international structures of postwar global capitalist society, one must consider the time-series features of plain unweighted aggregates (means, standard errors of means, medians, etc.) of the primary variables (those with people and value flows as measurement units), and their resulting structural ratios.

The following plots provide a graphical summary of the evolution of these unweighted aggregates, as well as their resulting structural parameters, over the 1971-2019 period. Let a primary variable for a country \(i\) and a year \(t\) be denoted as \(X_{it}\). Then the mean of this variable across all countries in year \(t\) is denoted as \(\bar{X}_t.\) The time mean of this variable is then denoted as \(\bar{X}^T \equiv \sum_{i=1}^T\) where \(T\) is the length of the time-series sample. Similarly, the cross-country median of the variable is denoted as \(\tilde{X}_t\) and its time mean as \(\tilde{X}^T\). In general, the superscript \(T\) denotes a time mean of the corresponding variable. The geometric mean of the annual growth rate of any variable \(X\) over the period is denoted as \(\hat{X}\). Confidence intervals around the cross-country mean of a variable (in year \(t\), not indicated) are constructed as \([\bar{X} \pm 2 \ \text{se}(\bar{X})]\), where \(\text{se}(\bar{X}) = \bar{X}/\sqrt{n}\), where \(n\) is the length of the country sample in that particular year.

library(plotrix)
iyN <- tapply(x$yN, x$year, mean, na.rm=TRUE)
summary(iyN)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    4775   11900   13328   13252   15969   22068
biyN <- coef(lm(log(iyN[c(20:64)]) ~ year[c(20:64)]))[2]
seiyN <- tapply(x$yN, x$year, std.error, na.rm=TRUE)
miyN <- tapply(x$yN, x$year, median, na.rm=TRUE)
ciH <- iyN + 2*seiyN
ciL <- iyN - 2*seiyN
plot(year[c(20:64)], iyN[c(20:64)], type="l", lty=0, 
     main=expression(paste("Mean (95% CI) and median of per-capita output ", y[N])), 
     xlab="Year", ylab="2011 USD/capita", ylim=c(4000, 25000), sub = "Data: PWT")
polygon(c(year[c(20:64)], rev(year[c(20:64)])), 
        c(ciL[c(20:64)], rev(ciH[c(20:64)])), 
        col="gray90", border=NA)
lines(year[c(20:64)], iyN[c(20:64)], lty=1)
lines(year[c(20:64)], miyN[c(20:64)], lty=2)
legend("top", bty="n", 
       legend=c(expression(paste(bar(y[N]))), expression(paste(tilde(y[N])))), 
       lty =c(1,2))
mtext(bquote(bar(y[N])^T  == .(round(mean(iyN[c(20:64)]), 1))~ "
             "~se(bar(y[N]))^T ==.(round(mean(seiyN[c(20:64)]), 1))~" 
             "~tilde(y[N])^T  == .(round(mean(miyN[c(20:64)]), 1))~" 
             "~hat(bar(y[N]))  ==.(round(biyN, 4))))

iyE <- tapply(x$yE, x$year, mean, na.rm=TRUE)
summary(iyE)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   13993   27830   32178   31279   36583   49407
biyE <- coef(lm(log(iyE[c(20:64)]) ~ year[c(20:64)]))[2]
seiyE <- tapply(x$yE, x$year, std.error, na.rm=TRUE)
miyE <- tapply(x$yE, x$year, median, na.rm=TRUE)
ciH <- iyE + 2*seiyE
ciL <- iyE - 2*seiyE
plot(year[c(20:64)], iyE[c(20:64)], type="l", lty=0, 
     main=expression(paste("Mean (95% CI) and median of per-worker output ", y[E])), 
     xlab="Year", ylab="2011 USD/worker", ylim=c(0, 55000), sub = "Data: PWT")
polygon(c(year[c(20:64)], rev(year[c(20:64)])), 
        c(ciL[c(20:64)], rev(ciH[c(20:64)])), 
        col="gray90", border=NA)
lines(year[c(20:64)], iyE[c(20:64)], lty=1)
lines(year[c(20:64)], miyE[c(20:64)], lty=2)
legend("top", bty="n", 
       legend=c(expression(paste(bar(y[E]))), expression(paste(tilde(y[E])))), 
       lty =c(1,2))
mtext(bquote(bar(y[E])^T  == .(round(mean(iyE[c(20:64)]), 1))~ "
             "~se(bar(y[E]))^T ==.(round(mean(seiyE[c(20:64)]), 1))~" 
             "~tilde(y[E])^T  == .(round(mean(miyE[c(20:64)]), 1))~" 
             "~hat(bar(y[E]))  ==.(round(biyE, 4))))

iyL <- tapply(x$yL, x$year, mean, na.rm=TRUE)
summary(iyL)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   8.688  14.667  19.876  21.963  27.620  39.938
biyL <- coef(lm(log(iyL[c(20:64)]) ~ year[c(20:64)]))[2]
seiyL <- tapply(x$yL, x$year, std.error, na.rm=TRUE)
miyL <- tapply(x$yL, x$year, median, na.rm=TRUE)
ciH <- iyL + 2*seiyL
ciL <- iyL - 2*seiyL
plot(year[c(20:64)], iyL[c(20:64)], type="l", lty=0, 
     main=expression(paste("Mean (95% CI) and median of per-hour output ", y[L])), 
     xlab="Year", ylab="2011 USD/hour", ylim=c(10, 40), sub = "Data: PWT")
polygon(c(year[c(20:64)], rev(year[c(20:64)])), 
        c(ciL[c(20:64)], rev(ciH[c(20:64)])), 
        col="gray90", border=NA)
lines(year[c(20:64)], iyL[c(20:64)], lty=1)
lines(year[c(20:64)], miyL[c(20:64)], lty=2)
legend("top", bty="n", 
       legend=c(expression(paste(bar(y[L]))), expression(paste(tilde(y[L])))), 
       lty =c(1,2))
mtext(bquote(bar(y[L])^T  == .(round(mean(iyL[c(20:64)]), 1))~ "
             "~se(bar(y[L]))^T ==.(round(mean(seiyL[c(20:64)]), 1))~" 
             "~tilde(y[L])^T  == .(round(mean(miyL[c(20:64)]), 1))~" 
             "~hat(bar(y[L]))  ==.(round(biyL, 4))))

iwN <- tapply(x$wN, x$year, mean, na.rm=TRUE)
summary(iwN)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    2322    4941    6145    6743    8640   12820
biwN <- coef(lm(log(iwN[c(20:64)]) ~ year[c(20:64)]))[2]
seiwN <- tapply(x$wN, x$year, std.error, na.rm=TRUE)
miwN <- tapply(x$wN, x$year, median, na.rm=TRUE)
ciH <- iwN + 2*seiwN
ciL <- iwN - 2*seiwN
plot(year[c(20:64)], iwN[c(20:64)], type="l", lty=0, 
     main=expression(paste("Mean (95% CI) and median of per-capita wage ", w[N])), 
     xlab="Year", ylab="2011 USD/capita", ylim=c(1500, 15000), sub = "Data: PWT")
polygon(c(year[c(20:64)], rev(year[c(20:64)])), 
        c(ciL[c(20:64)], rev(ciH[c(20:64)])), 
        col="gray90", border=NA)
lines(year[c(20:64)], iwN[c(20:64)], lty=1)
lines(year[c(20:64)], miwN[c(20:64)], lty=2)
# lines(year[c(20:64)], iwN[c(20:64)] + 2*seiwN[c(20:64)], lty=2)
# lines(year[c(20:64)], iwN[c(20:64)] - 2*seiwN[c(20:64)], lty=2)
legend("top", bty="n", 
       legend=c(expression(paste(bar(w[N]))), expression(paste(tilde(w[N])))), 
       lty =c(1,2))
mtext(bquote(bar(w[N])^T  == .(round(mean(iwN[c(20:64)]), 1))~ "
             "~se(bar(w[N]))^T ==.(round(mean(seiwN[c(20:64)]), 1))~" 
             "~tilde(w[N])^T  == .(round(mean(miwN[c(20:64)]), 1))~" 
             "~hat(bar(w[N]))  ==.(round(biwN, 4))))

iwE <- tapply(x$wE, x$year, mean, na.rm=TRUE)
summary(iwE)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    6021   13010   16203   16139   19579   27955
biwE <- coef(lm(log(iwE[c(20:64)]) ~ year[c(20:64)]))[2]
seiwE <- tapply(x$wE, x$year, std.error, na.rm=TRUE)
miwE <- tapply(x$wE, x$year, median, na.rm=TRUE)
ciH <- iwE + 2*seiwE
ciL <- iwE - 2*seiwE
plot(year[c(20:64)], iwE[c(20:64)], type="l", lty=0, 
     main=expression(paste("Mean (95% CI) and median of per-worker wage ", w[E])), 
     xlab="Year", ylab="2011 USD/worker", ylim=c(5000, 32000), sub = "Data: PWT")
polygon(c(year[c(20:64)], rev(year[c(20:64)])), 
        c(ciL[c(20:64)], rev(ciH[c(20:64)])), 
        col="gray90", border=NA)
lines(year[c(20:64)], iwE[c(20:64)], lty=1)
lines(year[c(20:64)], miwE[c(20:64)], lty=2)
legend("top", bty="n", 
       legend=c(expression(paste(bar(w[E]))), expression(paste(tilde(w[E])))), 
       lty =c(1,2))
mtext(bquote(bar(w[E])^T  == .(round(mean(iwE[c(20:64)]), 1))~ "
             "~se(bar(w[E]))^T ==.(round(mean(seiwE[c(20:64)]), 1))~" 
             "~tilde(w[E])^T  == .(round(mean(miwE[c(20:64)]), 1))~" 
             "~hat(bar(w[E]))  ==.(round(biwE, 4))))

iwL <- tapply(x$wL, x$year, mean, na.rm=TRUE)
summary(iwL)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   3.310   5.991   8.846   9.925  12.919  19.126
biwL <- coef(lm(log(iwL[c(20:64)]) ~ year[c(20:64)]))[2]
seiwL <- tapply(x$wL, x$year, std.error, na.rm=TRUE)
miwL <- tapply(x$wL, x$year, median, na.rm=TRUE)
ciH <- iwL + 2*seiwL
ciL <- iwL - 2*seiwL
plot(year[c(20:64)], iwL[c(20:64)], type="l", lty=0, 
     main=expression(paste("Mean (95% CI) and median of per-hour wage ", w[L])), 
     xlab="Year", ylab="2011 USD/hour", ylim=c(4, 20), sub = "Data: PWT")
polygon(c(year[c(20:64)], rev(year[c(20:64)])), 
        c(ciL[c(20:64)], rev(ciH[c(20:64)])), 
        col="gray90", border=NA)
lines(year[c(20:64)], iwL[c(20:64)], lty=1)
lines(year[c(20:64)], miwL[c(20:64)], lty=2)
legend("top", bty="n", 
       legend=c(expression(paste(bar(w[L]))), expression(paste(tilde(w[L])))), 
       lty =c(1,2))
mtext(bquote(bar(w[L])^T  == .(round(mean(iwL[c(20:64)]), 2))~ "
             "~se(bar(w[L]))^T ==.(round(mean(seiwL[c(20:64)]), 2))~" 
             "~tilde(w[L])^T  == .(round(mean(miwL[c(20:64)]), 2))~" 
             "~hat(bar(w[L]))  ==.(round(biwL, 4))))

is <- tapply(x$s, x$year, mean, na.rm=TRUE)
summary(is)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##  0.7591  0.9501  1.0005  0.9990  1.0958  1.2128
bis <- coef(lm(log(is[c(20:64)]) ~ year[c(20:64)]))[2]
seis <- tapply(x$s, x$year, std.error, na.rm=TRUE)
mis <- tapply(x$s, x$year, median, na.rm=TRUE)
ciH <- is + 2*seis
ciL <- is - 2*seis
plot(year[c(20:64)], is[c(20:64)], type="l", lty=0, 
     main=expression(paste("Mean (95% CI) and median of exploitation rate ", sigma)), 
     xlab="Year", ylab=" ", ylim=c(.6, 1.4), sub = "Data: PWT")
polygon(c(year[c(20:64)], rev(year[c(20:64)])), 
        c(ciL[c(20:64)], rev(ciH[c(20:64)])), 
        col="gray90", border=NA)
lines(year[c(20:64)], is[c(20:64)], lty=1)
lines(year[c(20:64)], mis[c(20:64)], lty=2)
legend("top", bty="n", 
       legend=c(expression(paste(bar(sigma))), expression(paste(tilde(sigma)))), 
       lty =c(1,2))
mtext(bquote(bar(sigma)^T  == .(round(mean(is[c(20:64)]), 3))~ "
             "~se(bar(sigma))^T ==.(round(mean(seis[c(20:64)]), 3))~" 
             "~tilde(sigma)^T  == .(round(mean(mis[c(20:64)]), 3))~" 
             "~hat(bar(sigma))  ==.(round(bis, 4))))

iss <- tapply(x$ss, x$year, mean, na.rm=TRUE)
summary(iss)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##  0.5426  0.6771  0.8140  0.7864  0.8745  1.1315
biss <- coef(lm(log(iss[c(20:64)]) ~ year[c(20:64)]))[2]
seiss <- tapply(x$ss, x$year, std.error, na.rm=TRUE)
miss <- tapply(x$ss, x$year, median, na.rm=TRUE)
ciH <- iss + 2*seiss
ciL <- iss - 2*seiss
plot(year[c(20:64)], iss[c(20:64)], type="l", lty=0, 
     main=expression(paste("Mean (95% CI) and median of exploitation rate[e] ", sigma[e])), 
     xlab="Year", ylab=" ", ylim=c(.3, 1.5), sub = "Data: PWT")
polygon(c(year[c(20:64)], rev(year[c(20:64)])), 
        c(ciL[c(20:64)], rev(ciH[c(20:64)])), 
        col="gray90", border=NA)
lines(year[c(20:64)], iss[c(20:64)], lty=1)
lines(year[c(20:64)], miss[c(20:64)], lty=2)
legend("top", bty="n", 
       legend=c(expression(paste(bar(sigma[e]))), expression(paste(tilde(sigma[e])))), 
       lty =c(1,2))
mtext(bquote(bar(sigma[e])^T  == .(round(mean(iss[c(20:64)]), 3))~ "
             "~se(bar(sigma[e]))^T ==.(round(mean(seiss[c(20:64)]), 3))~" 
             "~tilde(sigma[e])^T  == .(round(mean(miss[c(20:64)]), 3))~" 
             "~hat(bar(sigma[e]))  ==.(round(biss, 4))))

ih <- tapply(x$h, x$year, mean, na.rm=TRUE)
summary(ih)
##      Min.   1st Qu.    Median      Mean   3rd Qu.      Max. 
## 1.038e-05 2.115e-05 6.790e-05 5.843e-05 8.904e-05 9.932e-05
bih <- coef(lm(log(ih[c(20:64)]) ~ year[c(20:64)]))[2]
seih <- tapply(x$h, x$year, std.error, na.rm=TRUE)
mih <- tapply(x$h, x$year, median, na.rm=TRUE)
ciH <- ih + 2*seih
ciL <- ih - 2*seih
plot(year[c(20:64)], ih[c(20:64)], type="l", lty=0, 
     main=expression(paste("Mean (95% CI) and median of capital composition ", h)), 
     xlab="Year", ylab=" ", ylim=c(-0.00001, 2.4e-04), sub = "Data: PWT")
polygon(c(year[c(20:64)], rev(year[c(20:64)])), 
        c(ciL[c(20:64)], rev(ciH[c(20:64)])), 
        col="gray90", border=NA)
lines(year[c(20:64)], ih[c(20:64)], lty=1)
lines(year[c(20:64)], mih[c(20:64)], lty=2)
legend("top", bty="n", 
       legend=c(expression(paste(bar(h))), expression(paste(tilde(h)))), 
       lty =c(1,2))
mtext(bquote(bar(h)^T  == .(round(mean(ih[c(20:64)]), 6))~ "
             "~se(bar(h))^T ==.(round(mean(seih[c(20:64)]), 6))~" 
             "~tilde(h)^T  == .(round(mean(mih[c(20:64)]), 6))~" 
             "~hat(bar(h))  ==.(round(bih, 6))))

irho <- tapply(x$rho, x$year, mean, na.rm=TRUE)
summary(irho)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##  0.2742  0.3017  0.3394  0.3608  0.4304  0.5050
birho <- coef(lm(log(irho[c(20:64)]) ~ year[c(20:64)]))[2]
seirho <- tapply(x$rho, x$year, std.error, na.rm=TRUE)
mirho <- tapply(x$rho, x$year, median, na.rm=TRUE)
ciH <- irho + 2*seirho
ciL <- irho - 2*seirho
plot(year[c(20:64)], irho[c(20:64)], type="l", lty=0, 
     main=expression(paste("Mean (95% CI) and median of output-capital ratio ", rho)), 
     xlab="Year", ylab=" ", ylim=c(.2, .7), sub = "Data: PWT")
polygon(c(year[c(20:64)], rev(year[c(20:64)])), 
        c(ciL[c(20:64)], rev(ciH[c(20:64)])), 
        col="gray90", border=NA)
lines(year[c(20:64)], irho[c(20:64)], lty=1)
lines(year[c(20:64)], mirho[c(20:64)], lty=2)
legend("top", bty="n", 
       legend=c(expression(paste(bar(rho))), expression(paste(tilde(rho)))), 
       lty =c(1,2))
mtext(bquote(bar(rho)^T  == .(round(mean(irho[c(20:64)]), 4))~ "
             "~se(bar(rho))^T ==.(round(mean(seirho[c(20:64)]), 4))~" 
             "~tilde(rho)^T  == .(round(mean(mirho[c(20:64)]), 4))~" 
             "~hat(bar(rho))  ==.(round(birho, 5))))

ir <- tapply(x$r, x$year, mean, na.rm=TRUE)
summary(ir)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##  0.1250  0.1376  0.1478  0.1491  0.1588  0.1878
bir <- coef(lm(log(ir[c(20:64)]) ~ year[c(20:64)]))[2]
seir <- tapply(x$r, x$year, std.error, na.rm=TRUE)
mir <- tapply(x$r, x$year, median, na.rm=TRUE)
ciH <- ir + 2*seir
ciL <- ir - 2*seir
plot(year[c(20:64)], ir[c(20:64)], type="l", lty=0, 
     main=expression(paste("Mean (95% CI) and median of profit rate ", r)), 
     xlab="Year", ylab=" ", ylim=c(.07, .26), sub = "Data: PWT")
polygon(c(year[c(20:64)], rev(year[c(20:64)])), 
        c(ciL[c(20:64)], rev(ciH[c(20:64)])), 
        col="gray90", border=NA)
lines(year[c(20:64)], ir[c(20:64)], lty=1)
lines(year[c(20:64)], mir[c(20:64)], lty=2)
legend("top", bty="n", 
       legend=c(expression(paste(bar(r))), expression(paste(tilde(r)))), 
       lty =c(1,2))
mtext(bquote(bar(r)^T  == .(round(mean(ir[c(20:64)]), 4))~ "
             "~se(bar(r))^T ==.(round(mean(seir[c(20:64)]), 4))~" 
             "~tilde(r)^T  == .(round(mean(mir[c(20:64)]), 4))~" 
             "~hat(bar(r))  ==.(round(bir, 5))))

ika <- tapply(x$ka, x$year, mean, na.rm=TRUE)
summary(ika)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
## 0.08963 0.10361 0.11702 0.11993 0.12689 0.17743
bika <- coef(lm(log(ika[c(20:64)]) ~ year[c(20:64)]))[2]
seika <- tapply(x$ka, x$year, std.error, na.rm=TRUE)
mika <- tapply(x$ka, x$year, median, na.rm=TRUE)
ciH <- ika + 2*seika
ciL <- ika - 2*seika
plot(year[c(20:64)], ika[c(20:64)], type="l", lty=0, 
     main=expression(paste("Mean (95% CI) and median of accumulation rate ", kappa)), 
     xlab="Year", ylab=" ", ylim=c(0, .3), sub = "Data: PWT")
polygon(c(year[c(20:64)], rev(year[c(20:64)])), 
        c(ciL[c(20:64)], rev(ciH[c(20:64)])), 
        col="gray90", border=NA)
lines(year[c(20:64)], ika[c(20:64)], lty=1)
lines(year[c(20:64)], mika[c(20:64)], lty=2)
legend("top", bty="n", 
       legend=c(expression(paste(bar(kappa))), expression(paste(tilde(kappa)))), 
       lty =c(1,2))
mtext(bquote(bar(kappa)^T  == .(round(mean(ika[c(20:64)]), 4))~ "
             "~se(bar(kappa))^T ==.(round(mean(seika[c(20:64)]), 4))~" 
             "~tilde(kappa)^T  == .(round(mean(mika[c(20:64)]), 4))~" 
             "~hat(bar(ka))  ==.(round(bika, 5))))

# Comparisons

iyN <- tapply(x$yN, x$year, mean, na.rm=TRUE)
miyN <- tapply(x$yN, x$year, median, na.rm=TRUE)
seiyN <- tapply(x$yN, x$year, std.error, na.rm=TRUE)
ciH <- iyN + 2*seiyN
ciL <- iyN - 2*seiyN
biyN <- coef(lm(log(iyN) ~ year))[2]
plot(year[c(20:64)], iyN[c(20:64)], type="l", lty=0, 
     main=expression(paste("Means (95% CI) and medians of ", y[N], " and ", w[N])), 
     xlab="Year", ylab="2011 USD", ylim=c(900, 30000))
polygon(c(year[c(20:64)], rev(year[c(20:64)])), 
        c(ciL[c(20:64)], rev(ciH[c(20:64)])), 
        col=rgb(1, 0, 0, alpha=.25), border=NA)
lines(year[c(20:64)], iyN[c(20:64)], lty=1, col="red")
lines(year[c(20:64)], miyN[c(20:64)], lty=2, col="red")
iwN <- tapply(x$wN, x$year, mean, na.rm=TRUE)
miwN <- tapply(x$wN, x$year, median, na.rm=TRUE)
seiwN <- tapply(x$wN, x$year, std.error, na.rm=TRUE)
ciH <- iwN + 2*seiwN
ciL <- iwN - 2*seiwN
biwN <- coef(lm(log(iwN) ~ year))[2]
lines(year[c(20:64)], iwN[c(20:64)], lty=0)
polygon(c(year[c(20:64)], rev(year[c(20:64)])), 
        c(ciL[c(20:64)], rev(ciH[c(20:64)])), 
        col=rgb(0, 0, 1, .25), border=NA)
lines(year[c(20:64)], iwN[c(20:64)], lty=1, col="blue")
lines(year[c(20:64)], miwN[c(20:64)], lty=2, col="blue")
legend("top", bty="n", legend=c(expression(paste(bar(y[N]))), 
                                expression(paste(bar(w[N]))), 
                                expression(paste(tilde(y[N]))), 
                                expression(paste(tilde(w[N])))), 
       lty =c(1,1, 2, 2), lwd = c(1, 1, 2, 2), col=c("red", "blue", "red", "blue"))
mtext(bquote(hat(bar(y[N]))  ==.(round(biyN, 4))~","~ hat(bar(w[N])) ==.(round(biwN, 4))))

iyE <- tapply(x$yE, x$year, mean, na.rm=TRUE)
miyE <- tapply(x$yE, x$year, median, na.rm=TRUE)
seiyE <- tapply(x$yE, x$year, std.error, na.rm=TRUE)
ciH <- iyE + 2*seiyE
ciL <- iyE - 2*seiyE
biyE <- coef(lm(log(iyE) ~ year))[2]
plot(year[c(20:64)], iyE[c(20:64)], type="l", lty=0, 
     main=expression(paste("Means (95% CI) and medians of ", y[E], 
                           " and ", w[E])), 
     xlab="Year", ylab="2011 USD", ylim=c(5000, 60000))
polygon(c(year[c(20:64)], rev(year[c(20:64)])), 
        c(ciL[c(20:64)], rev(ciH[c(20:64)])), 
        col=rgb(1, 0, 0, alpha=.25), border=NA)
lines(year[c(20:64)], iyE[c(20:64)], lty=1, col="red")
lines(year[c(20:64)], miyE[c(20:64)], lty=2, col="red")
iwE <- tapply(x$wE, x$year, mean, na.rm=TRUE)
miwE <- tapply(x$wE, x$year, median, na.rm=TRUE)
seiwE <- tapply(x$wE, x$year, std.error, na.rm=TRUE)
ciH <- iwE + 2*seiwE
ciL <- iwE - 2*seiwE
biwE <- coef(lm(log(iwE) ~ year))[2]
lines(year[c(20:64)], iwE[c(20:64)], lty=0)
polygon(c(year[c(20:64)], rev(year[c(20:64)])), 
        c(ciL[c(20:64)], rev(ciH[c(20:64)])), 
        col=rgb(0, 0, 1, .25), border=NA)
lines(year[c(20:64)], iwE[c(20:64)], lty=1, col="blue")
lines(year[c(20:64)], miwE[c(20:64)], lty=2, col="blue")
legend("top", bty="n", legend=c(expression(paste(bar(y[E]))), 
                                expression(paste(bar(w[E]))), 
                                expression(paste(tilde(y[E]))), 
                                expression(paste(tilde(w[E])))), 
       lty =c(1,1, 2, 2), lwd = c(1, 1, 2, 2), col=c("red", "blue", "red", "blue"))
mtext(bquote(hat(bar(y[E]))  ==.(round(biyE, 4))~","~ hat(bar(w[E])) ==.(round(biwE, 4))))

iyL <- tapply(x$yL, x$year, mean, na.rm=TRUE)
miyL <- tapply(x$yL, x$year, median, na.rm=TRUE)
seiyL <- tapply(x$yL, x$year, std.error, na.rm=TRUE)
ciH <- iyL + 2*seiyL
ciL <- iyL - 2*seiyL
biyL <- coef(lm(log(iyL) ~ year))[2]
plot(year[c(20:64)], iyL[c(20:64)], type="l", lty=0, 
     main=expression(paste("Means (95% CI) and medians of ", y[L], 
                           " and ", w[L])), 
     xlab="Year", ylab="2011 USD", ylim=c(4, 41))
polygon(c(year[c(20:64)], rev(year[c(20:64)])), 
        c(ciL[c(20:64)], rev(ciH[c(20:64)])), 
        col=rgb(1, 0, 0, alpha=.25), border=NA)
lines(year[c(20:64)], iyL[c(20:64)], lty=1, col="red")
lines(year[c(20:64)], miyL[c(20:64)], lty=2, col="red")
iwL <- tapply(x$wL, x$year, mean, na.rm=TRUE)
miwL <- tapply(x$wL, x$year, median, na.rm=TRUE)
seiwL <- tapply(x$wL, x$year, std.error, na.rm=TRUE)
ciH <- iwL + 2*seiwL
ciL <- iwL - 2*seiwL
biwL <- coef(lm(log(iwL) ~ year))[2]
lines(year[c(20:64)], iwL[c(20:64)], lty=0)
polygon(c(year[c(20:64)], rev(year[c(20:64)])), 
        c(ciL[c(20:64)], rev(ciH[c(20:64)])), 
        col=rgb(0, 0, 1, .25), border=NA)
lines(year[c(20:64)], iwL[c(20:64)], lty=1, col="blue")
lines(year[c(20:64)], miwL[c(20:64)], lty=2, col="blue")
legend("topleft", bty="n", legend=c(expression(paste(bar(y[L]))), 
                                expression(paste(bar(w[L]))), 
                                expression(paste(tilde(y[L]))), 
                                expression(paste(tilde(w[L])))), 
       lty =c(1,1, 2, 2), lwd = c(1, 1, 2, 2), col=c("red", "blue", "red", "blue"))
mtext(bquote(hat(bar(y[L]))  ==.(round(biyL, 4))~","~ hat(bar(w[L])) ==.(round(biwL, 4))))

is <- tapply(x$s, x$year, mean, na.rm=TRUE)
mis <- tapply(x$s, x$year, median, na.rm=TRUE)
seis <- tapply(x$s, x$year, std.error, na.rm=TRUE)
ciH <- is + 2*seis
ciL <- is - 2*seis
bis <- coef(lm(log(is) ~ year))[2]
plot(year[c(20:64)], is[c(20:64)], type="l", lty=0, 
     main=expression(paste("Means (95% CI) and medians of ", 
                           sigma, " and ", sigma[e])), 
     xlab="Year", ylab=" ", ylim=c(0.4, 1.7))
polygon(c(year[c(20:64)], rev(year[c(20:64)])), 
        c(ciL[c(20:64)], rev(ciH[c(20:64)])), 
        col=rgb(1, 0, 0, alpha=.25), border=NA)
lines(year[c(20:64)], is[c(20:64)], lty=1, col="red")
lines(year[c(20:64)], mis[c(20:64)], lty=2, col="red")
iss <- tapply(x$ss, x$year, mean, na.rm=TRUE)
miss <- tapply(x$ss, x$year, median, na.rm=TRUE)
seiss <- tapply(x$ss, x$year, std.error, na.rm=TRUE)
ciH <- iss + 2*seiss
ciL <- iss - 2*seiss
biss <- coef(lm(log(iss) ~ year))[2]
lines(year[c(20:64)], iss[c(20:64)], lty=0)
polygon(c(year[c(20:64)], rev(year[c(20:64)])), 
        c(ciL[c(20:64)], rev(ciH[c(20:64)])), 
        col=rgb(0, 0, 1, .25), border=NA)
lines(year[c(20:64)], iss[c(20:64)], lty=1, col="blue")
lines(year[c(20:64)], miss[c(20:64)], lty=2, col="blue")
legend("top", bty="n", legend=c(expression(paste(bar(sigma))), 
                                    expression(paste(bar(sigma[e]))), 
                                    expression(paste(tilde(sigma))), 
                                    expression(paste(tilde(sigma[e])))), 
       lty =c(1,1, 2, 2), col=c("red", "blue", "red", "blue"))
mtext(bquote(hat(bar(sigma))  ==.(round(bis, 4))~","~ hat(bar(sigma[e])) ==.(round(biss, 4))))

ir <- tapply(x$r, x$year, mean, na.rm=TRUE)
mir <- tapply(x$r, x$year, median, na.rm=TRUE)
seir <- tapply(x$r, x$year, std.error, na.rm=TRUE)
ciH <- ir + 2*seir
ciL <- ir - 2*seir
bir <- coef(lm(log(ir) ~ year))[2]
plot(year[c(20:64)], ir[c(20:64)], type="l", lty=0, 
     main=expression(paste("Means (95% CI) and medians of ", 
                           r, " and ", kappa)), 
     xlab="Year", ylab=" ", ylim=c(0.05, .3))
polygon(c(year[c(20:64)], rev(year[c(20:64)])), 
        c(ciL[c(20:64)], rev(ciH[c(20:64)])), 
        col=rgb(1, 0, 0, alpha=.25), border=NA)
lines(year[c(20:64)], ir[c(20:64)], lty=1, col="red")
lines(year[c(20:64)], mir[c(20:64)], lty=2, col="red")
ika <- tapply(x$ka, x$year, mean, na.rm=TRUE)
mika <- tapply(x$ka, x$year, median, na.rm=TRUE)
seika <- tapply(x$ka, x$year, std.error, na.rm=TRUE)
ciH <- ika + 2*seika
ciL <- ika - 2*seika
bika <- coef(lm(log(ika) ~ year))[2]
lines(year[c(20:64)], ika[c(20:64)], lty=0)
polygon(c(year[c(20:64)], rev(year[c(20:64)])), 
        c(ciL[c(20:64)], rev(ciH[c(20:64)])), 
        col=rgb(0, 0, 1, .25), border=NA)
lines(year[c(20:64)], ika[c(20:64)], lty=1, col="blue")
lines(year[c(20:64)], mika[c(20:64)], lty=2, col="blue")
legend("top", bty="n", legend=c(expression(paste(bar(r))), 
                                expression(paste(bar(kappa))), 
                                expression(paste(tilde(r))), 
                                expression(paste(tilde(kappa)))), 
       lty =c(1,1, 2, 2), lwd = c(1, 1, 2, 2), col=c("red", "blue", "red", "blue"))
mtext(bquote(hat(bar(r))  ==.(round(bir, 4))~","~ hat(bar(kappa)) ==.(round(bika, 4))))

4.2 Output-weighted country aggregates

International relations, those of a political and military character, are largely unconstrained by international law. The actual political interactions among nations are power relations, i.e. they depend ultimately on their respective economic clout. Speaking bluntly, the large degree of international economic inequality conditions the existence of imperialism (colonial, semi-colonial, and neo-colonial domination), defined conventionally as the systematic use of extra-economic methods of exploitation of the working people in poorer nations by, chiefly, the ruling classes in the richer nations, a type of super-exploitation overlaid on the regular economic exploitation, mediated by international trade and finance. Economic power is thus, compounded or leveraged politically and militarily in international affairs.

In sum, the political (and military) might that a nation can project internationally is, ultimately, a function of its productive force. This does not mean that international law is completely irrelevant, but only that its effect is secondary compared to the effects that flow from the highly unequal international distribution of the productive forces of labor.

A rough measure of each nation’s productivity is its annual output. Thus, as a second approximation to the characterization of the deeper international structures of late global capitalist society, one must consider the time-series features of \(Y\)-weighted aggregates (means, standard errors of means, medians, etc.) of the primary variables (those with people and value flows as measurement units), and their resulting structural ratios.

The following plots offer a graphical summary of the evolution of these economically-weighted aggregates, as well as their resulting structural parameters, over the 1971-2019 period. The notational conventions above are also followed here.

iyN <- tapply(x$yN, x$year, mean, na.rm=TRUE)
summary(iyN)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    4775   11900   13328   13252   15969   22068
biyN <- coef(lm(log(iyN[c(20:64)]) ~ year[c(20:64)]))[2]
seiyN <- tapply(x$yN, x$year, std.error, na.rm=TRUE)
miyN <- tapply(x$yN, x$year, median, na.rm=TRUE)
ciH <- iyN + 2*seiyN
ciL <- iyN - 2*seiyN
plot(year[c(20:64)], iyN[c(20:64)], type="l", lty=0, 
     main=expression(paste("Mean (95% CI) and median of per-capita output ", y[N])), 
     xlab="Year", ylab="2011 USD/capita", ylim=c(4000, 25000), sub = "Data: PWT")
polygon(c(year[c(20:64)], rev(year[c(20:64)])), 
        c(ciL[c(20:64)], rev(ciH[c(20:64)])), 
        col="gray90", border=NA)
lines(year[c(20:64)], iyN[c(20:64)], lty=1)
lines(year[c(20:64)], miyN[c(20:64)], lty=2)
legend("top", bty="n", 
       legend=c(expression(paste(bar(y[N]))), expression(paste(tilde(y[N])))), 
       lty =c(1,2))
mtext(bquote(bar(y[N])^T  == .(round(mean(iyN[c(20:64)]), 1))~ "
             "~se(bar(y[N]))^T ==.(round(mean(seiyN[c(20:64)]), 1))~" 
             "~tilde(y[N])^T  == .(round(mean(miyN[c(20:64)]), 1))~" 
             "~hat(bar(y[N]))  ==.(round(biyN, 4))))

iyE <- tapply(x$yE, x$year, mean, na.rm=TRUE)
summary(iyE)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   13993   27830   32178   31279   36583   49407
biyE <- coef(lm(log(iyE[c(20:64)]) ~ year[c(20:64)]))[2]
seiyE <- tapply(x$yE, x$year, std.error, na.rm=TRUE)
miyE <- tapply(x$yE, x$year, median, na.rm=TRUE)
ciH <- iyE + 2*seiyE
ciL <- iyE - 2*seiyE
plot(year[c(20:64)], iyE[c(20:64)], type="l", lty=0, 
     main=expression(paste("Mean (95% CI) and median of per-worker output ", y[E])), 
     xlab="Year", ylab="2011 USD/worker", ylim=c(0, 55000), sub = "Data: PWT")
polygon(c(year[c(20:64)], rev(year[c(20:64)])), 
        c(ciL[c(20:64)], rev(ciH[c(20:64)])), 
        col="gray90", border=NA)
lines(year[c(20:64)], iyE[c(20:64)], lty=1)
lines(year[c(20:64)], miyE[c(20:64)], lty=2)
legend("top", bty="n", 
       legend=c(expression(paste(bar(y[E]))), expression(paste(tilde(y[E])))), 
       lty =c(1,2))
mtext(bquote(bar(y[E])^T  == .(round(mean(iyE[c(20:64)]), 1))~ "
             "~se(bar(y[E]))^T ==.(round(mean(seiyE[c(20:64)]), 1))~" 
             "~tilde(y[E])^T  == .(round(mean(miyE[c(20:64)]), 1))~" 
             "~hat(bar(y[E]))  ==.(round(biyE, 4))))

iyL <- tapply(x$yL, x$year, mean, na.rm=TRUE)
summary(iyL)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   8.688  14.667  19.876  21.963  27.620  39.938
biyL <- coef(lm(log(iyL[c(20:64)]) ~ year[c(20:64)]))[2]
seiyL <- tapply(x$yL, x$year, std.error, na.rm=TRUE)
miyL <- tapply(x$yL, x$year, median, na.rm=TRUE)
ciH <- iyL + 2*seiyL
ciL <- iyL - 2*seiyL
plot(year[c(20:64)], iyL[c(20:64)], type="l", lty=0, 
     main=expression(paste("Mean (95% CI) and median of per-hour output ", y[L])), 
     xlab="Year", ylab="2011 USD/hour", ylim=c(10, 40), sub = "Data: PWT")
polygon(c(year[c(20:64)], rev(year[c(20:64)])), 
        c(ciL[c(20:64)], rev(ciH[c(20:64)])), 
        col="gray90", border=NA)
lines(year[c(20:64)], iyL[c(20:64)], lty=1)
lines(year[c(20:64)], miyL[c(20:64)], lty=2)
legend("top", bty="n", 
       legend=c(expression(paste(bar(y[L]))), expression(paste(tilde(y[L])))), 
       lty =c(1,2))
mtext(bquote(bar(y[L])^T  == .(round(mean(iyL[c(20:64)]), 1))~ "
             "~se(bar(y[L]))^T ==.(round(mean(seiyL[c(20:64)]), 1))~" 
             "~tilde(y[L])^T  == .(round(mean(miyL[c(20:64)]), 1))~" 
             "~hat(bar(y[L]))  ==.(round(biyL, 4))))

iwN <- tapply(x$wN, x$year, mean, na.rm=TRUE)
summary(iwN)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    2322    4941    6145    6743    8640   12820
biwN <- coef(lm(log(iwN[c(20:64)]) ~ year[c(20:64)]))[2]
seiwN <- tapply(x$wN, x$year, std.error, na.rm=TRUE)
miwN <- tapply(x$wN, x$year, median, na.rm=TRUE)
ciH <- iwN + 2*seiwN
ciL <- iwN - 2*seiwN
plot(year[c(20:64)], iwN[c(20:64)], type="l", lty=0, 
     main=expression(paste("Mean (95% CI) and median of per-capita wage ", w[N])), 
     xlab="Year", ylab="2011 USD/capita", ylim=c(1500, 15000), sub = "Data: PWT")
polygon(c(year[c(20:64)], rev(year[c(20:64)])), 
        c(ciL[c(20:64)], rev(ciH[c(20:64)])), 
        col="gray90", border=NA)
lines(year[c(20:64)], iwN[c(20:64)], lty=1)
lines(year[c(20:64)], miwN[c(20:64)], lty=2)
# lines(year[c(20:64)], iwN[c(20:64)] + 2*seiwN[c(20:64)], lty=2)
# lines(year[c(20:64)], iwN[c(20:64)] - 2*seiwN[c(20:64)], lty=2)
legend("top", bty="n", 
       legend=c(expression(paste(bar(w[N]))), expression(paste(tilde(w[N])))), 
       lty =c(1,2))
mtext(bquote(bar(w[N])^T  == .(round(mean(iwN[c(20:64)]), 1))~ "
             "~se(bar(w[N]))^T ==.(round(mean(seiwN[c(20:64)]), 1))~" 
             "~tilde(w[N])^T  == .(round(mean(miwN[c(20:64)]), 1))~" 
             "~hat(bar(w[N]))  ==.(round(biwN, 4))))

iwE <- tapply(x$wE, x$year, mean, na.rm=TRUE)
summary(iwE)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    6021   13010   16203   16139   19579   27955
biwE <- coef(lm(log(iwE[c(20:64)]) ~ year[c(20:64)]))[2]
seiwE <- tapply(x$wE, x$year, std.error, na.rm=TRUE)
miwE <- tapply(x$wE, x$year, median, na.rm=TRUE)
ciH <- iwE + 2*seiwE
ciL <- iwE - 2*seiwE
plot(year[c(20:64)], iwE[c(20:64)], type="l", lty=0, 
     main=expression(paste("Mean (95% CI) and median of per-worker wage ", w[E])), 
     xlab="Year", ylab="2011 USD/worker", ylim=c(5000, 32000), sub = "Data: PWT")
polygon(c(year[c(20:64)], rev(year[c(20:64)])), 
        c(ciL[c(20:64)], rev(ciH[c(20:64)])), 
        col="gray90", border=NA)
lines(year[c(20:64)], iwE[c(20:64)], lty=1)
lines(year[c(20:64)], miwE[c(20:64)], lty=2)
legend("top", bty="n", 
       legend=c(expression(paste(bar(w[E]))), expression(paste(tilde(w[E])))), 
       lty =c(1,2))
mtext(bquote(bar(w[E])^T  == .(round(mean(iwE[c(20:64)]), 1))~ "
             "~se(bar(w[E]))^T ==.(round(mean(seiwE[c(20:64)]), 1))~" 
             "~tilde(w[E])^T  == .(round(mean(miwE[c(20:64)]), 1))~" 
             "~hat(bar(w[E]))  ==.(round(biwE, 4))))

iwL <- tapply(x$wL, x$year, mean, na.rm=TRUE)
summary(iwL)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   3.310   5.991   8.846   9.925  12.919  19.126
biwL <- coef(lm(log(iwL[c(20:64)]) ~ year[c(20:64)]))[2]
seiwL <- tapply(x$wL, x$year, std.error, na.rm=TRUE)
miwL <- tapply(x$wL, x$year, median, na.rm=TRUE)
ciH <- iwL + 2*seiwL
ciL <- iwL - 2*seiwL
plot(year[c(20:64)], iwL[c(20:64)], type="l", lty=0, 
     main=expression(paste("Mean (95% CI) and median of per-hour wage ", w[L])), 
     xlab="Year", ylab="2011 USD/hour", ylim=c(4, 20), sub = "Data: PWT")
polygon(c(year[c(20:64)], rev(year[c(20:64)])), 
        c(ciL[c(20:64)], rev(ciH[c(20:64)])), 
        col="gray90", border=NA)
lines(year[c(20:64)], iwL[c(20:64)], lty=1)
lines(year[c(20:64)], miwL[c(20:64)], lty=2)
legend("top", bty="n", 
       legend=c(expression(paste(bar(w[L]))), expression(paste(tilde(w[L])))), 
       lty =c(1,2))
mtext(bquote(bar(w[L])^T  == .(round(mean(iwL[c(20:64)]), 2))~ "
             "~se(bar(w[L]))^T ==.(round(mean(seiwL[c(20:64)]), 2))~" 
             "~tilde(w[L])^T  == .(round(mean(miwL[c(20:64)]), 2))~" 
             "~hat(bar(w[L]))  ==.(round(biwL, 4))))

is <- tapply(x$s, x$year, mean, na.rm=TRUE)
summary(is)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##  0.7591  0.9501  1.0005  0.9990  1.0958  1.2128
bis <- coef(lm(log(is[c(20:64)]) ~ year[c(20:64)]))[2]
seis <- tapply(x$s, x$year, std.error, na.rm=TRUE)
mis <- tapply(x$s, x$year, median, na.rm=TRUE)
ciH <- is + 2*seis
ciL <- is - 2*seis
plot(year[c(20:64)], is[c(20:64)], type="l", lty=0, 
     main=expression(paste("Mean (95% CI) and median of exploitation rate ", sigma)), 
     xlab="Year", ylab=" ", ylim=c(.6, 1.4), sub = "Data: PWT")
polygon(c(year[c(20:64)], rev(year[c(20:64)])), 
        c(ciL[c(20:64)], rev(ciH[c(20:64)])), 
        col="gray90", border=NA)
lines(year[c(20:64)], is[c(20:64)], lty=1)
lines(year[c(20:64)], mis[c(20:64)], lty=2)
legend("top", bty="n", 
       legend=c(expression(paste(bar(sigma))), expression(paste(tilde(sigma)))), 
       lty =c(1,2))
mtext(bquote(bar(sigma)^T  == .(round(mean(is[c(20:64)]), 3))~ "
             "~se(bar(sigma))^T ==.(round(mean(seis[c(20:64)]), 3))~" 
             "~tilde(sigma)^T  == .(round(mean(mis[c(20:64)]), 3))~" 
             "~hat(bar(sigma))  ==.(round(bis, 4))))

iss <- tapply(x$ss, x$year, mean, na.rm=TRUE)
summary(iss)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##  0.5426  0.6771  0.8140  0.7864  0.8745  1.1315
biss <- coef(lm(log(iss[c(20:64)]) ~ year[c(20:64)]))[2]
seiss <- tapply(x$ss, x$year, std.error, na.rm=TRUE)
miss <- tapply(x$ss, x$year, median, na.rm=TRUE)
ciH <- iss + 2*seiss
ciL <- iss - 2*seiss
plot(year[c(20:64)], iss[c(20:64)], type="l", lty=0, 
     main=expression(paste("Mean (95% CI) and median of exploitation rate[e] ", sigma[e])), 
     xlab="Year", ylab=" ", ylim=c(.3, 1.5), sub = "Data: PWT")
polygon(c(year[c(20:64)], rev(year[c(20:64)])), 
        c(ciL[c(20:64)], rev(ciH[c(20:64)])), 
        col="gray90", border=NA)
lines(year[c(20:64)], iss[c(20:64)], lty=1)
lines(year[c(20:64)], miss[c(20:64)], lty=2)
legend("top", bty="n", 
       legend=c(expression(paste(bar(sigma[e]))), expression(paste(tilde(sigma[e])))), 
       lty =c(1,2))
mtext(bquote(bar(sigma[e])^T  == .(round(mean(iss[c(20:64)]), 3))~ "
             "~se(bar(sigma[e]))^T ==.(round(mean(seiss[c(20:64)]), 3))~" 
             "~tilde(sigma[e])^T  == .(round(mean(miss[c(20:64)]), 3))~" 
             "~hat(bar(sigma[e]))  ==.(round(biss, 4))))

ih <- tapply(x$h, x$year, mean, na.rm=TRUE)
summary(ih)
##      Min.   1st Qu.    Median      Mean   3rd Qu.      Max. 
## 1.038e-05 2.115e-05 6.790e-05 5.843e-05 8.904e-05 9.932e-05
bih <- coef(lm(log(ih[c(20:64)]) ~ year[c(20:64)]))[2]
seih <- tapply(x$h, x$year, std.error, na.rm=TRUE)
mih <- tapply(x$h, x$year, median, na.rm=TRUE)
ciH <- ih + 2*seih
ciL <- ih - 2*seih
plot(year[c(20:64)], ih[c(20:64)], type="l", lty=0, 
     main=expression(paste("Mean (95% CI) and median of capital composition ", h)), 
     xlab="Year", ylab=" ", ylim=c(-0.00001, 2.4e-04), sub = "Data: PWT")
polygon(c(year[c(20:64)], rev(year[c(20:64)])), 
        c(ciL[c(20:64)], rev(ciH[c(20:64)])), 
        col="gray90", border=NA)
lines(year[c(20:64)], ih[c(20:64)], lty=1)
lines(year[c(20:64)], mih[c(20:64)], lty=2)
legend("top", bty="n", 
       legend=c(expression(paste(bar(h))), expression(paste(tilde(h)))), 
       lty =c(1,2))
mtext(bquote(bar(h)^T  == .(round(mean(ih[c(20:64)]), 6))~ "
             "~se(bar(h))^T ==.(round(mean(seih[c(20:64)]), 6))~" 
             "~tilde(h)^T  == .(round(mean(mih[c(20:64)]), 6))~" 
             "~hat(bar(h))  ==.(round(bih, 6))))

irho <- tapply(x$rho, x$year, mean, na.rm=TRUE)
summary(irho)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##  0.2742  0.3017  0.3394  0.3608  0.4304  0.5050
birho <- coef(lm(log(irho[c(20:64)]) ~ year[c(20:64)]))[2]
seirho <- tapply(x$rho, x$year, std.error, na.rm=TRUE)
mirho <- tapply(x$rho, x$year, median, na.rm=TRUE)
ciH <- irho + 2*seirho
ciL <- irho - 2*seirho
plot(year[c(20:64)], irho[c(20:64)], type="l", lty=0, 
     main=expression(paste("Mean (95% CI) and median of output-capital ratio ", rho)), 
     xlab="Year", ylab=" ", ylim=c(.2, .7), sub = "Data: PWT")
polygon(c(year[c(20:64)], rev(year[c(20:64)])), 
        c(ciL[c(20:64)], rev(ciH[c(20:64)])), 
        col="gray90", border=NA)
lines(year[c(20:64)], irho[c(20:64)], lty=1)
lines(year[c(20:64)], mirho[c(20:64)], lty=2)
legend("top", bty="n", 
       legend=c(expression(paste(bar(rho))), expression(paste(tilde(rho)))), 
       lty =c(1,2))
mtext(bquote(bar(rho)^T  == .(round(mean(irho[c(20:64)]), 4))~ "
             "~se(bar(rho))^T ==.(round(mean(seirho[c(20:64)]), 4))~" 
             "~tilde(rho)^T  == .(round(mean(mirho[c(20:64)]), 4))~" 
             "~hat(bar(rho))  ==.(round(birho, 5))))

ir <- tapply(x$r, x$year, mean, na.rm=TRUE)
summary(ir)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##  0.1250  0.1376  0.1478  0.1491  0.1588  0.1878
bir <- coef(lm(log(ir[c(20:64)]) ~ year[c(20:64)]))[2]
seir <- tapply(x$r, x$year, std.error, na.rm=TRUE)
mir <- tapply(x$r, x$year, median, na.rm=TRUE)
ciH <- ir + 2*seir
ciL <- ir - 2*seir
plot(year[c(20:64)], ir[c(20:64)], type="l", lty=0, 
     main=expression(paste("Mean (95% CI) and median of profit rate ", r)), 
     xlab="Year", ylab=" ", ylim=c(.07, .26), sub = "Data: PWT")
polygon(c(year[c(20:64)], rev(year[c(20:64)])), 
        c(ciL[c(20:64)], rev(ciH[c(20:64)])), 
        col="gray90", border=NA)
lines(year[c(20:64)], ir[c(20:64)], lty=1)
lines(year[c(20:64)], mir[c(20:64)], lty=2)
legend("top", bty="n", 
       legend=c(expression(paste(bar(r))), expression(paste(tilde(r)))), 
       lty =c(1,2))
mtext(bquote(bar(r)^T  == .(round(mean(ir[c(20:64)]), 4))~ "
             "~se(bar(r))^T ==.(round(mean(seir[c(20:64)]), 4))~" 
             "~tilde(r)^T  == .(round(mean(mir[c(20:64)]), 4))~" 
             "~hat(bar(r))  ==.(round(bir, 5))))

ika <- tapply(x$ka, x$year, mean, na.rm=TRUE)
summary(ika)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
## 0.08963 0.10361 0.11702 0.11993 0.12689 0.17743
bika <- coef(lm(log(ika[c(20:64)]) ~ year[c(20:64)]))[2]
seika <- tapply(x$ka, x$year, std.error, na.rm=TRUE)
mika <- tapply(x$ka, x$year, median, na.rm=TRUE)
ciH <- ika + 2*seika
ciL <- ika - 2*seika
plot(year[c(20:64)], ika[c(20:64)], type="l", lty=0, 
     main=expression(paste("Mean (95% CI) and median of accumulation rate ", kappa)), 
     xlab="Year", ylab=" ", ylim=c(0, .3), sub = "Data: PWT")
polygon(c(year[c(20:64)], rev(year[c(20:64)])), 
        c(ciL[c(20:64)], rev(ciH[c(20:64)])), 
        col="gray90", border=NA)
lines(year[c(20:64)], ika[c(20:64)], lty=1)
lines(year[c(20:64)], mika[c(20:64)], lty=2)
legend("top", bty="n", 
       legend=c(expression(paste(bar(kappa))), expression(paste(tilde(kappa)))), 
       lty =c(1,2))
mtext(bquote(bar(kappa)^T  == .(round(mean(ika[c(20:64)]), 4))~ "
             "~se(bar(kappa))^T ==.(round(mean(seika[c(20:64)]), 4))~" 
             "~tilde(kappa)^T  == .(round(mean(mika[c(20:64)]), 4))~" 
             "~hat(bar(ka))  ==.(round(bika, 5))))

# Comparisons

iyN <- tapply(x$yN, x$year, mean, na.rm=TRUE)
miyN <- tapply(x$yN, x$year, median, na.rm=TRUE)
seiyN <- tapply(x$yN, x$year, std.error, na.rm=TRUE)
ciH <- iyN + 2*seiyN
ciL <- iyN - 2*seiyN
biyN <- coef(lm(log(iyN) ~ year))[2]
plot(year[c(20:64)], iyN[c(20:64)], type="l", lty=0, 
     main=expression(paste("Means (95% CI) and medians of ", y[N], " and ", w[N])), 
     xlab="Year", ylab="2011 USD", ylim=c(900, 30000))
polygon(c(year[c(20:64)], rev(year[c(20:64)])), 
        c(ciL[c(20:64)], rev(ciH[c(20:64)])), 
        col=rgb(1, 0, 0, alpha=.25), border=NA)
lines(year[c(20:64)], iyN[c(20:64)], lty=1, col="red")
lines(year[c(20:64)], miyN[c(20:64)], lty=2, col="red")
iwN <- tapply(x$wN, x$year, mean, na.rm=TRUE)
miwN <- tapply(x$wN, x$year, median, na.rm=TRUE)
seiwN <- tapply(x$wN, x$year, std.error, na.rm=TRUE)
ciH <- iwN + 2*seiwN
ciL <- iwN - 2*seiwN
biwN <- coef(lm(log(iwN) ~ year))[2]
lines(year[c(20:64)], iwN[c(20:64)], lty=0)
polygon(c(year[c(20:64)], rev(year[c(20:64)])), 
        c(ciL[c(20:64)], rev(ciH[c(20:64)])), 
        col=rgb(0, 0, 1, .25), border=NA)
lines(year[c(20:64)], iwN[c(20:64)], lty=1, col="blue")
lines(year[c(20:64)], miwN[c(20:64)], lty=2, col="blue")
legend("top", bty="n", legend=c(expression(paste(bar(y[N]))), 
                                expression(paste(bar(w[N]))), 
                                expression(paste(tilde(y[N]))), 
                                expression(paste(tilde(w[N])))), 
       lty =c(1,1, 2, 2), lwd = c(1, 1, 2, 2), col=c("red", "blue", "red", "blue"))
mtext(bquote(hat(bar(y[N]))  ==.(round(biyN, 4))~","~ hat(bar(w[N])) ==.(round(biwN, 4))))

iyE <- tapply(x$yE, x$year, mean, na.rm=TRUE)
miyE <- tapply(x$yE, x$year, median, na.rm=TRUE)
seiyE <- tapply(x$yE, x$year, std.error, na.rm=TRUE)
ciH <- iyE + 2*seiyE
ciL <- iyE - 2*seiyE
biyE <- coef(lm(log(iyE) ~ year))[2]
plot(year[c(20:64)], iyE[c(20:64)], type="l", lty=0, 
     main=expression(paste("Means (95% CI) and medians of ", y[E], 
                           " and ", w[E])), 
     xlab="Year", ylab="2011 USD", ylim=c(5000, 60000))
polygon(c(year[c(20:64)], rev(year[c(20:64)])), 
        c(ciL[c(20:64)], rev(ciH[c(20:64)])), 
        col=rgb(1, 0, 0, alpha=.25), border=NA)
lines(year[c(20:64)], iyE[c(20:64)], lty=1, col="red")
lines(year[c(20:64)], miyE[c(20:64)], lty=2, col="red")
iwE <- tapply(x$wE, x$year, mean, na.rm=TRUE)
miwE <- tapply(x$wE, x$year, median, na.rm=TRUE)
seiwE <- tapply(x$wE, x$year, std.error, na.rm=TRUE)
ciH <- iwE + 2*seiwE
ciL <- iwE - 2*seiwE
biwE <- coef(lm(log(iwE) ~ year))[2]
lines(year[c(20:64)], iwE[c(20:64)], lty=0)
polygon(c(year[c(20:64)], rev(year[c(20:64)])), 
        c(ciL[c(20:64)], rev(ciH[c(20:64)])), 
        col=rgb(0, 0, 1, .25), border=NA)
lines(year[c(20:64)], iwE[c(20:64)], lty=1, col="blue")
lines(year[c(20:64)], miwE[c(20:64)], lty=2, col="blue")
legend("top", bty="n", legend=c(expression(paste(bar(y[E]))), 
                                expression(paste(bar(w[E]))), 
                                expression(paste(tilde(y[E]))), 
                                expression(paste(tilde(w[E])))), 
       lty =c(1,1, 2, 2), lwd = c(1, 1, 2, 2), col=c("red", "blue", "red", "blue"))
mtext(bquote(hat(bar(y[E]))  ==.(round(biyE, 4))~","~ hat(bar(w[E])) ==.(round(biwE, 4))))

iyL <- tapply(x$yL, x$year, mean, na.rm=TRUE)
miyL <- tapply(x$yL, x$year, median, na.rm=TRUE)
seiyL <- tapply(x$yL, x$year, std.error, na.rm=TRUE)
ciH <- iyL + 2*seiyL
ciL <- iyL - 2*seiyL
biyL <- coef(lm(log(iyL) ~ year))[2]
plot(year[c(20:64)], iyL[c(20:64)], type="l", lty=0, 
     main=expression(paste("Means (95% CI) and medians of ", y[L], 
                           " and ", w[L])), 
     xlab="Year", ylab="2011 USD", ylim=c(4, 41))
polygon(c(year[c(20:64)], rev(year[c(20:64)])), 
        c(ciL[c(20:64)], rev(ciH[c(20:64)])), 
        col=rgb(1, 0, 0, alpha=.25), border=NA)
lines(year[c(20:64)], iyL[c(20:64)], lty=1, col="red")
lines(year[c(20:64)], miyL[c(20:64)], lty=2, col="red")
iwL <- tapply(x$wL, x$year, mean, na.rm=TRUE)
miwL <- tapply(x$wL, x$year, median, na.rm=TRUE)
seiwL <- tapply(x$wL, x$year, std.error, na.rm=TRUE)
ciH <- iwL + 2*seiwL
ciL <- iwL - 2*seiwL
biwL <- coef(lm(log(iwL) ~ year))[2]
lines(year[c(20:64)], iwL[c(20:64)], lty=0)
polygon(c(year[c(20:64)], rev(year[c(20:64)])), 
        c(ciL[c(20:64)], rev(ciH[c(20:64)])), 
        col=rgb(0, 0, 1, .25), border=NA)
lines(year[c(20:64)], iwL[c(20:64)], lty=1, col="blue")
lines(year[c(20:64)], miwL[c(20:64)], lty=2, col="blue")
legend("topleft", bty="n", legend=c(expression(paste(bar(y[L]))), 
                                expression(paste(bar(w[L]))), 
                                expression(paste(tilde(y[L]))), 
                                expression(paste(tilde(w[L])))), 
       lty =c(1,1, 2, 2), lwd = c(1, 1, 2, 2), col=c("red", "blue", "red", "blue"))
mtext(bquote(hat(bar(y[L]))  ==.(round(biyL, 4))~","~ hat(bar(w[L])) ==.(round(biwL, 4))))

is <- tapply(x$s, x$year, mean, na.rm=TRUE)
mis <- tapply(x$s, x$year, median, na.rm=TRUE)
seis <- tapply(x$s, x$year, std.error, na.rm=TRUE)
ciH <- is + 2*seis
ciL <- is - 2*seis
bis <- coef(lm(log(is) ~ year))[2]
plot(year[c(20:64)], is[c(20:64)], type="l", lty=0, 
     main=expression(paste("Means (95% CI) and medians of ", 
                           sigma, " and ", sigma[e])), 
     xlab="Year", ylab=" ", ylim=c(0.4, 1.7))
polygon(c(year[c(20:64)], rev(year[c(20:64)])), 
        c(ciL[c(20:64)], rev(ciH[c(20:64)])), 
        col=rgb(1, 0, 0, alpha=.25), border=NA)
lines(year[c(20:64)], is[c(20:64)], lty=1, col="red")
lines(year[c(20:64)], mis[c(20:64)], lty=2, col="red")
iss <- tapply(x$ss, x$year, mean, na.rm=TRUE)
miss <- tapply(x$ss, x$year, median, na.rm=TRUE)
seiss <- tapply(x$ss, x$year, std.error, na.rm=TRUE)
ciH <- iss + 2*seiss
ciL <- iss - 2*seiss
biss <- coef(lm(log(iss) ~ year))[2]
lines(year[c(20:64)], iss[c(20:64)], lty=0)
polygon(c(year[c(20:64)], rev(year[c(20:64)])), 
        c(ciL[c(20:64)], rev(ciH[c(20:64)])), 
        col=rgb(0, 0, 1, .25), border=NA)
lines(year[c(20:64)], iss[c(20:64)], lty=1, col="blue")
lines(year[c(20:64)], miss[c(20:64)], lty=2, col="blue")
legend("top", bty="n", legend=c(expression(paste(bar(sigma))), 
                                    expression(paste(bar(sigma[e]))), 
                                    expression(paste(tilde(sigma))), 
                                    expression(paste(tilde(sigma[e])))), 
       lty =c(1,1, 2, 2), col=c("red", "blue", "red", "blue"))
mtext(bquote(hat(bar(sigma))  ==.(round(bis, 4))~","~ hat(bar(sigma[e])) ==.(round(biss, 4))))

ir <- tapply(x$r, x$year, mean, na.rm=TRUE)
mir <- tapply(x$r, x$year, median, na.rm=TRUE)
seir <- tapply(x$r, x$year, std.error, na.rm=TRUE)
ciH <- ir + 2*seir
ciL <- ir - 2*seir
bir <- coef(lm(log(ir) ~ year))[2]
plot(year[c(20:64)], ir[c(20:64)], type="l", lty=0, 
     main=expression(paste("Means (95% CI) and medians of ", 
                           r, " and ", kappa)), 
     xlab="Year", ylab=" ", ylim=c(0.05, .3))
polygon(c(year[c(20:64)], rev(year[c(20:64)])), 
        c(ciL[c(20:64)], rev(ciH[c(20:64)])), 
        col=rgb(1, 0, 0, alpha=.25), border=NA)
lines(year[c(20:64)], ir[c(20:64)], lty=1, col="red")
lines(year[c(20:64)], mir[c(20:64)], lty=2, col="red")
ika <- tapply(x$ka, x$year, mean, na.rm=TRUE)
mika <- tapply(x$ka, x$year, median, na.rm=TRUE)
seika <- tapply(x$ka, x$year, std.error, na.rm=TRUE)
ciH <- ika + 2*seika
ciL <- ika - 2*seika
bika <- coef(lm(log(ika) ~ year))[2]
lines(year[c(20:64)], ika[c(20:64)], lty=0)
polygon(c(year[c(20:64)], rev(year[c(20:64)])), 
        c(ciL[c(20:64)], rev(ciH[c(20:64)])), 
        col=rgb(0, 0, 1, .25), border=NA)
lines(year[c(20:64)], ika[c(20:64)], lty=1, col="blue")
lines(year[c(20:64)], mika[c(20:64)], lty=2, col="blue")
legend("top", bty="n", legend=c(expression(paste(bar(r))), 
                                expression(paste(bar(kappa))), 
                                expression(paste(tilde(r))), 
                                expression(paste(tilde(kappa)))), 
       lty =c(1,1, 2, 2), lwd = c(1, 1, 2, 2), col=c("red", "blue", "red", "blue"))
mtext(bquote(hat(bar(r))  ==.(round(bir, 4))~","~ hat(bar(kappa)) ==.(round(bika, 4))))

4.3 Population-weighted country aggregates

Given the potential of humans to learn from others (e.g. to appropriate technology or productive knowledge developed by others), contemporaneous output levels may not suffice to properly quantify the productive potential in a given nation. As a third and final approximation to characterizing the deeper international structures of late global capitalist society, the time-series features of \(N\)-weighted aggregates (means, standard errors of means, medians, etc.) of the primary variables (those with people and value flows as measurement units), and their result structural ratios, are now presented.

The plots summarize graphically the evolution of these demographically-weighted aggregates, as well as their corresponding structural parameters, over the 1971-2019 period. The notational conventions above are maintained in this section as well.

R code here.

References

Lenin, Vladimir I. 1917a. “Letters on Tactics.” Collected Works 24, 1977.

———. 1917b. “Statistics and Sociology.” Collected Works 23, 1977.

———. 1921. “The Character of Our Newspapers.” Collected Works 28, 1977.

Marx, Karl. 1867. Capital: A Critique of Political Economy. Vol. I.

———. 1885. Capital: A Critique of Political Economy. Vol. II.

———. 1894. Capital: A Critique of Political Economy. Vol. III.

———. 2010. A Contribution to the Critique of Political Economy, 1859.


  1. Marx (2010), p. 263.↩︎

  2. Lenin (1917b), pp. 272-3.↩︎

  3. Lenin (1917a), p. 45.↩︎

  4. Lenin (1921), p. 96-7.↩︎

  5. Note that \(l\) is the average per-worker hours worked.↩︎

  6. Note that \(\omega\) is the labor share of total income and \(c\) is the consumption share of total expenditure.↩︎