Ok new model weight matrix is back to Wij = Lj/Li
Confirmed the largest eig is 1 and M is non-negative and stochastic like the paper requires; https://arxiv.org/pdf/2104.02764.pdf
eigs are all real except for a few and most have very small imaginary components and I don't really know why. For this reason I'm taking the magnitude of the eigenvector
Anyway, if this model is correct, the first six industries in Lucca's table dominate with minerals accounting for ~43% of the centrality.
theta is 0.5 cuz idk I'll find a good interpretation once I'm certain I programmed the model properly but If it's supposed to be a "tradeoff between weight and degree" like the paper says my best guess is it is related to the eigenvectors/eigenvalues and matrix sparsity.
gamma is 0.85 because that's the value for page rank; best guess is it could be some probability of striking in the supply chain the I/O table represents.
Haven't played with gamma and theta yet.
import numpy as np import matplotlib.pyplot as plt from numpy import linalg as LA A = np.array([[1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1], [1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1], [1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1]]) #adjacency matrix of italian economy 1973/1974 L = np.array([[12117, 1689, 2532, 3692, 2854, 11732, 3653, 3810, 11441, 8190, 15366, 13647, 8079, 2267, 6803, 29338],]) #labor vector 1973 name = np.array([["agr,for,fish", "energy", "metallic minerals", "non metallic minerals", "chem and pharm", "non transport mach. equip.", "transportation equip.", "food bev. cig.", "cloths", "tree stuff", "building + wpa", "vacation + malls", "trans. + comm.", "banks", "houses", "agr,for,fish"],]) theta = 0.5 gamma = 0.85 print(L) #print((1/L).T) W = ((1/L).T)@L print(W) S = np.diag(1/(W@(np.ones(16).T))) #print(S) D = np.diag(1/(A@(np.ones(16).T))) #print(D) M = ((theta*S@W) + ((1-theta)*D@A)).T #print(M) Mf = (gamma*M) + ((1-gamma)*np.ones((16,16))/16) #print(Mf) eigval, eigvec = LA.eig(Mf) print(Mf > 0) print(M.T@(np.ones(16).T)) print("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX") print(np.real(eigval)) print(np.imag(eigval)) print(100*abs(eigvec[0])/np.sum(abs(eigvec[0]))) print(name) print("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX")
*Last string in name should be "Gov. services"
A = np.array([[1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1], [1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1], [1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1]]) #adjacency matrix of italian economy 1973/1974 L = np.array([[12117, 1689, 2532, 3692, 2854, 11732, 3653, 3810, 11441, 8190, 15366, 13647, 8079, 2267, 6803, 29338],]) #labor vector 1973 name = np.array([["agr,for,fish", "energy", "metallic minerals", "non metallic minerals", "chem and pharm", "non transport mach. equip.", "transportation equip.", "food bev. cig.", "cloths", "tree stuff", "building + wpa", "vacation + malls", "trans. + comm.", "banks", "houses", "gov"],]) theta = 0.5 gamma = 0.85 print(L) #print((1/L).T) W = (((1/L).T)@L)*A #labor weight print(W) S = np.diag(1/(W@(np.ones(16).T))) #out strength #print(S) D = np.diag(1/(A@(np.ones(16).T))) #out degree #print(D) M = ((theta*S@W) + ((1-theta)*D@A)).T #print(M) Mf = (gamma*M) + ((1-gamma)*np.ones((16,16))/16) #for eigendecomposition #print(Mf) eigval, eigvec = LA.eig(Mf) print(Mf > 0) print(M.T@(np.ones(16).T)) print("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX") print(np.real(eigval)) print(np.imag(eigval)) print("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX") print(100*abs(eigvec[0])/np.sum(abs(eigvec[0]))) #weighted page rank print(name) print("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX")
slight correction the weight matrix should be multiplied (element wise) by the connectivity matrix
this is great information
how are you
thanks for the warm welcome
@madredalchemist Great to see this result in a video! It sounds like this is all one take. I would suggest doing say three takes, picking the best one and cutting from the other two any parts that sound better.
On the Perrone paper, the connection to ground rent is interesting. "Negative sum game" is similar to what I've written on rogue production for the benefit of the commune. This makes me wonder if this kind of leverage can amplify such production.
I suspect this line of thinking is useful for Meidner-like proposals. Rather than striking, what happens if workers outright buy these central workplaces? It then becomes possible to extract rent that can be used to further the process. On the other hand this could create tensions between workers that the bourgeoisie can exploit. If for example energy workers increase the price of electricity then this ultimately affects other workers and not the bourgeoisie since the latter will just add those costs to the prices of their products.
@thardin Yeah it was one take I just wanted to get the video out as quick as possible, future video'll have better production quality I promise haha
As for buying the central workplaces I've been trying to figure out a way to expropriate means of production on a local level since the government at the federal level in the states is the only authority will enough budget to do imminent domain.
My best idea so far is kind of a 'negative' version of the Meinder plan were you basically just level an unpayable fine against some business, and settle out with a transferring it to workers.
level an unpayable fine
That's a clever idea, but I suspect it wouldn't work for many reasons. For any scheme like this you first have to criminalize capital flight.
@thardin I'm sure we could find plenty of things to keep the bosses in place; "al-capone on tax evasion" and all
I wanted to ask what should be my next steps? Clearly I need a bigger and more contemporary I/O table (maybe related to semiconductor supply chains specifically). I want to bring this to my union's top leadership, what else do I need to incorporate to show this is a serious project with tactical relevance?
Or, I had another idea where I just do this for entire economies and run a kind of 'anti-stock exchange' where workers can see their leverage in real time.
@madredalchemist Supply/use tables are likely your best bet. Your country's national accounts should have them. For example Dave and Loke's Receding Horizon Planning project uses Swedish data from 2016.