#38 ややこしや、マイナス投入方式(ストーン方式)…
#36にて、マイナス投入方式を列方向でみた場合と、行方向でみた場合とで考察を試みました。
まず、産業連関表を列方向でみた場合を考えます。石油化学産業の列に注目した場合、石油化学産業で副産物として生産されたLPGは、石油化学産業での産出として捉える。よって、LPG10単位は、石油化学産業における産出量を計算する式に計上する
LPG産業からの産出を考える(LPG産業を行方向でみた)場合、マイナス表記となっている石油化学産業、つまり、列が石油化学産業、行がLPG産業としてみた場合の交点である-10は、LPG産業へ10単位LPGが投入されたと考える。つまり、LPG10単位は、LPG産業における投入量を計算する式に計上する
コードでは、一つの産業について、その産業への投入とその産業からの産出をfor文で推計するようにしています。
よって、上記の下半分は、コードでは考慮に入れる必要がないことに気づきました。
具体的に、単一産業での、投入量と産出量を推計するコードは、以下のようになります。
# x産業を0111(穀類)に固定
x = 0
# 投入量を計算
input = 0 # 投入分
fuel = 0 # 燃料使用分
output = 0 # 産出分
df_index = df_price_per_ton.index
for i in range(len(df_iotable.index)):
for k in range(len(df_price_per_ton.index)):
Ui = df_price_per_ton.iat[k, 0]
input_amount = df_iotable.iat[i, x] * 10**6
if Ui == 0:
continue
if df_index[k] == df_iotable.index[i]:
if input_amount >= 0:
input += input_amount // Ui
if df_index[k] == '2121': # 石炭製品の燃料使用分
fuel += input_amount // Ui
# 石油化学系基礎製品への石油製品投入ではない場合
if df_index[k] == '2111' and df_iotable.columns[x] != '2031':
fuel += input_amount // Ui # 石油製品の燃料使用分
else:
output += abs(input_amount) // Ui
# 産出量を計算
iyunyu = 0 # 移輸入
iyushutsu = 0 # 移輸出
consume = 0 # 消費
fixed_capital = 0 # 固定資本
stock = 0 # 在庫
Ux = df_price_per_ton.iat[x, 0]
if Ux == 0:
output = 0
consume = 0
fixed_capital = 0
stock = 0
iyushutsu = 0
iyunyu = 0
else:
for i in range(len(df_iotable.index)):
if i == x:
continue
else:
if df_iotable.iat[x, i] >= 0:
output += df_iotable.iat[x, i] * 10**6 // Ux
ctuple = ('7111', '7211','7212', '7311', '7321')
for c in ctuple:
consume += df_iotable.loc['0111', c] * 10**6 // Ux
ftuple = ('7411', '7511')
for f in ftuple:
fixed_capital += df_iotable.loc['0111', f] * 10**6 // Ux
stock = df_iotable.loc['0111', '7611'] * 10**6 // Ux
iyushutsu = df_iotable.loc['0111', '8100'] * 10**6 // Ux
iyunyu = -(df_iotable.loc['0111', '8700']) * 10**6 // Ux
input = input + iyunyu
output = output + iyushutsu + consume + fixed_capital + stock
waste = input - output - fuel
print('投入分:' + str(int(input)) + '[t]')
print('産出分:' + str(int(output)) + '[t]')
print('燃料使用分:' + str(int(fuel)) + '[t]')
print('廃棄物発生量:' + str(int(waste)) + '[t]')
列方向で注目(投入量を推計)する際に、産業連関表の生産額がマイナス表記となっている場合には、その産業から別の産業への産出とみなします。
for i in range(len(df_iotable.index)):
for k in range(len(df_price_per_ton.index)):
Ui = df_price_per_ton.iat[k, 0]
input_amount = df_iotable.iat[i, x] * 10**6
if Ui == 0:
continue
if df_index[k] == df_iotable.index[i]:
if input_amount >= 0:
input += input_amount // Ui
if df_index[k] == '2121': # 石炭製品の燃料使用分
fuel += input_amount // Ui
# 石油化学系基礎製品への石油製品投入ではない場合
if df_index[k] == '2111' and df_iotable.columns[x] != '2031':
fuel += input_amount // Ui # 石油製品の燃料使用分
else:
output += abs(input_amount) // Ui
逆に、行方向で注目(産出量を推計)する場合には、マイナス表記となっている生産額のものは、スルーする形となります。
# 産出量を計算
iyunyu = 0 # 移輸入
iyushutsu = 0 # 移輸出
consume = 0 # 消費
fixed_capital = 0 # 固定資本
stock = 0 # 在庫
Ux = df_price_per_ton.iat[x, 0]
if Ux == 0:
output = 0
consume = 0
fixed_capital = 0
stock = 0
iyushutsu = 0
iyunyu = 0
else:
for i in range(len(df_iotable.index)):
if i == x:
continue
else:
if df_iotable.iat[x, i] >= 0:
output += df_iotable.iat[x, i] * 10**6 // Ux
うーん。
マイナス投入方式(ストーン方式)、ややこしい…
重量単価初期値における推計値と統計値の比較・相関
重量単価初期値における廃棄物発生量の推計値と統計値の比較表は、以下のようになります。
製造業24業種のうち、10業種で推計値が負の値をとっています。そのうち、飲料・飼料、はん用機器、木材、その他製造業で大きくずれています。
次に、推計値と統計値の相関をみてみます。先述の10業種に加えて、統計値が0の業種もグラフから除いています。
相関係数は0.241で、推計値と統計値の間に相関はあまりみられません。
最適化後の重量単価における推計値と統計値の比較・相関
続いて、最適化後の重量単価における推計値と統計値を比較すると、以下のようになります。
また、散布図は、以下のようになります。以下のグラフでは、推計値が負の値である業種と、統計値が0である業種を合わせた6分類を除いています。
先述の6分類を除いたときの相関係数は0.990。
相関の検定を再度行います。
有意水準は、1%とします。自由度が16なので、1%水準(両側検定)のt分布の値kは、2.9208。
検定統計量T = 0.990√(18-2)/√(1-0.990^2) = 27.8713。
T>kより、帰無仮説は棄却され、対立仮説を採用。つまり、有意水準1%で2変量(推計値と統計値)には相関関係があるといえます。