Sorsogon. Step 1.c Micro-level Electricity demand model¶
In [1]:
import datetime; print(datetime.datetime.now())
2018-03-15 13:51:59.686128
Notebook Abstract:
A simple micro-level electricity demand model. Similar to the income demand model, the electricity demand model used available micro level data for the estimation of regression coefficients. This regression coefficients are used to define a table model. The electricity table model is used for the construction of a proxy micro level sample data set.
Prior electricity demand model¶
In [2]:
import statsmodels.api as sm
import pandas as pd
import numpy as np
from smum._scripts.micro import compute_categories, change_index
/usr/lib/python3.6/site-packages/statsmodels-0.8.0-py3.6-linux-x86_64.egg/statsmodels/compat/pandas.py:56: FutureWarning: The pandas.core.datetools module is deprecated and will be removed in a future version. Please use the pandas.tseries module instead.
from pandas.core import datetools
In [3]:
electricity_data = pd.read_csv('data/electricity.csv', index_col=0)
formula = "Electricity ~ C(Lighting) + C(TV) + C(Cooking) + C(Refrigeration) + C(AC) + C(Urban) + Income"
In [4]:
electricity_data.head()
Out[4]:
Lighting | TV | Cooking | Refrigeration | AC | Urban | Income | Electricity | |
---|---|---|---|---|---|---|---|---|
0 | 1 | 1 | 1 | 1 | 0 | 0 | 16000.0 | 110.0 |
1 | 1 | 1 | 0 | 1 | 0 | 0 | 4000.0 | 80.0 |
2 | 1 | 1 | 0 | 1 | 0 | 0 | 6000.0 | 47.0 |
3 | 1 | 1 | 0 | 0 | 0 | 0 | 6300.0 | 17.0 |
4 | 1 | 1 | 0 | 0 | 0 | 0 | 5000.0 | 17.0 |
In [5]:
model_elec = sm.WLS.from_formula(formula, electricity_data)
model_results_elec = model_elec.fit()
In [6]:
model_results_elec.summary()
Out[6]:
Dep. Variable: | Electricity | R-squared: | 0.516 |
---|---|---|---|
Model: | WLS | Adj. R-squared: | 0.516 |
Method: | Least Squares | F-statistic: | 2519. |
Date: | Thu, 15 Mar 2018 | Prob (F-statistic): | 0.00 |
Time: | 13:52:02 | Log-Likelihood: | -96932. |
No. Observations: | 16522 | AIC: | 1.939e+05 |
Df Residuals: | 16514 | BIC: | 1.939e+05 |
Df Model: | 7 | ||
Covariance Type: | nonrobust |
coef | std err | t | P>|t| | [0.025 | 0.975] | |
---|---|---|---|---|---|---|
Intercept | 3.3000 | 18.699 | 0.176 | 0.860 | -33.351 | 39.951 |
C(Lighting)[T.1] | 0.8257 | 18.668 | 0.044 | 0.965 | -35.765 | 37.416 |
C(TV)[T.1] | 18.7899 | 1.760 | 10.678 | 0.000 | 15.341 | 22.239 |
C(Cooking)[T.1] | 28.8862 | 1.969 | 14.671 | 0.000 | 25.027 | 32.746 |
C(Refrigeration)[T.1] | 59.2432 | 1.556 | 38.073 | 0.000 | 56.193 | 62.293 |
C(AC)[T.1] | 203.3226 | 3.130 | 64.956 | 0.000 | 197.187 | 209.458 |
C(Urban)[T.1] | 24.5935 | 1.391 | 17.680 | 0.000 | 21.867 | 27.320 |
Income | 0.0014 | 4.1e-05 | 34.765 | 0.000 | 0.001 | 0.002 |
Omnibus: | 20742.858 | Durbin-Watson: | 1.789 |
---|---|---|---|
Prob(Omnibus): | 0.000 | Jarque-Bera (JB): | 9719176.595 |
Skew: | 6.463 | Prob(JB): | 0.00 |
Kurtosis: | 121.115 | Cond. No. | 8.75e+05 |
In [7]:
params_elec = change_index(model_results_elec.params)
bse_elec = change_index(model_results_elec.bse)
elec = pd.concat([params_elec, bse_elec], axis=1)
elec.columns = ['co_mu', 'co_sd']
In [8]:
elec.loc['Lighting', 'p'] = (electricity_data.Lighting == 1).sum() / electricity_data.shape[0]
elec.loc['TV', 'p'] = (electricity_data.TV == 1).sum() / electricity_data.shape[0]
elec.loc['Cooking', 'p'] = (electricity_data.Cooking == 1).sum() / electricity_data.shape[0]
elec.loc['Refrigeration', 'p'] = (electricity_data.Refrigeration == 1).sum() / electricity_data.shape[0]
elec.loc['AC', 'p'] = (electricity_data.AC == 1).sum() / electricity_data.shape[0]
elec.loc['Urban', 'p'] = (electricity_data.Urban == 1).sum() / electricity_data.shape[0]
In [9]:
elec.loc[:, 'mu'] = np.nan
elec.loc[:, 'sd'] = np.nan
elec.loc['Intercept', 'p'] = elec.loc['Intercept', 'co_mu']
elec.loc['Intercept', ['co_mu', 'co_sd']] = np.nan
In [10]:
elec.loc[:, 'dis'] = 'Bernoulli'
elec.loc['Income', 'dis'] = 'None'
elec.loc['Intercept', 'dis'] = 'Deterministic'
In [11]:
elec.loc[:, 'ub'] = np.nan
elec.loc[:, 'lb'] = np.nan
elec.loc['Income', 'ub'] = np.inf
elec.loc['Income', 'lb'] = 0
In [12]:
elec.index = ['e_'+i for i in elec.index]
In [13]:
elec.to_csv('data/table_elec.csv')
In [14]:
elec
Out[14]:
co_mu | co_sd | p | mu | sd | dis | ub | lb | |
---|---|---|---|---|---|---|---|---|
e_Intercept | NaN | NaN | 3.299984 | NaN | NaN | Deterministic | NaN | NaN |
e_Lighting | 0.825662 | 18.667601 | 0.998729 | NaN | NaN | Bernoulli | NaN | NaN |
e_TV | 18.789909 | 1.759621 | 0.782774 | NaN | NaN | Bernoulli | NaN | NaN |
e_Cooking | 28.886242 | 1.968938 | 0.167474 | NaN | NaN | Bernoulli | NaN | NaN |
e_Refrigeration | 59.243236 | 1.556048 | 0.436812 | NaN | NaN | Bernoulli | NaN | NaN |
e_AC | 203.322615 | 3.130158 | 0.059375 | NaN | NaN | Bernoulli | NaN | NaN |
e_Urban | 24.593500 | 1.391044 | 0.550236 | NaN | NaN | Bernoulli | NaN | NaN |
e_Income | 0.001426 | 0.000041 | NaN | NaN | NaN | None | inf | 0.0 |