Matlab实现LMDI分解方法(含零值处理)

本文介绍了如何使用Matlab进行LMDI影响因素分解分析,该方法常用于环境影响评估。通过提供的Matlab代码示例,展示了如何处理数据并计算各因素对总变化的贡献率,包括对0值的特殊处理。数据实例为2000年至2014年间15年的因变量Y和7个自变量X的变化情况。
摘要由CSDN通过智能技术生成

影响因素分解分析常使用对数平均迪氏指数法 (Logarithmic Mean Index Method, LMDI),其理论基础和Python实现请参考 LMDI 理论推导详解【从理论到Python-MATLAB实现(理论)】LMDI 理论推导详解【从理论到Python-MATLAB实现(编程实现)】 ,0值部分的处理参考 LMDI 理论推导详解【从理论到Python-MATLAB实现(理论)】,本文仅讨论LMDI的Matlab实现。

Matlab参考代码如下:

% X 为多列(含1列)的自变量数据,按照时间升序排列,第一行数据为第一年,第二行数据为第二年,...
X = xlsread(Xfilepath);
% Y 为因变量数据,按照时间升序排列,第一行数据为第一年,第二行数据为第二年,...
Y = xlsread(Yfilepath);

dertX = [];
for i = 2 : length(Y)
    curdertX = [];
    for j = 1 : size(X, 2)
        curdert = (Y(i) - Y(1)) / (log(Y(i) / Y(1))) * log(X(i, j) / X(1, j));
        
        % 0 value
        if Y(i) * Y(1) * X(i, j) * X(1, j) == 0
            curdert = 0;
        end
        if Y(i) > 0 && Y(1) == 0 && X(i, j) > 0 && X(1, j) == 0
            curdert = Y(i);
        end
        if Y(i) == 0 && Y(1) > 0 && X(i, j) == 0 && X(1, j) > 0
            curdert = -Y(1);
        end
        
        curdertX = [curdertX, curdert];
    end
    dertX = [dertX; curdertX];
end

结合实例说明,选取2000~2014年间15年的数据,因变量是Y,自变量为X(共7个因素),年份为Years,参考代码如下:

%%
Y = [
    45.095; 49.556; 55.905; 64.706; 65.834; 74.213; 82.912; 90.793; ...
    98.330; 108.624; 130.310; 210.232; 212.156; 245.704; 256.856
    ];

X = [
    2.375 	0.551 	0.301 	0.522 	0.302 	0.096 	0.027
    2.259 	0.576 	0.308 	0.496 	0.311 	0.109 	0.028
    2.146 	0.553 	0.313 	0.513 	0.322 	0.122 	0.029
    2.054 	0.640 	0.310 	0.437 	0.332 	0.135 	0.031
    1.990 	0.682 	0.327 	0.388 	0.343 	0.148 	0.033
    1.944 	0.557 	0.399 	0.443 	0.354 	0.161 	0.034
    1.898 	0.516 	0.399 	0.480 	0.364 	0.174 	0.038
    1.848 	0.457 	0.408 	0.525 	0.382 	0.186 	0.040
    1.809 	0.432 	0.426 	0.533 	0.402 	0.187 	0.044
    1.781 	0.421 	0.436 	0.534 	0.424 	0.197 	0.050
    1.760 	0.407 	0.441 	0.544 	0.444 	0.214 	0.054
    1.745 	0.415 	0.413 	0.558 	0.462 	0.198 	0.058
    1.726 	0.401 	0.434 	0.554 	0.477 	0.181 	0.061
    1.697 	0.373 	0.483 	0.542 	0.492 	0.181 	0.069
    1.652 	0.370 	0.470 	0.554 	0.509 	0.160 	0.074
    ];

Years = (2000 : 2014)';

dertX = [];
for i = 2 : length(Y)
    curdertX = [];
    for j = 1 : size(X, 2)
        curdert = (Y(i) - Y(1)) / (log(Y(i) / Y(1))) * log(X(i, j) / X(1, j));
        
        % 0 value
        if Y(i) * Y(1) * X(i, j) * X(1, j) == 0
            curdert = 0;
        end
        if Y(i) > 0 && Y(1) == 0 && X(i, j) > 0 && X(1, j) == 0
            curdert = Y(i);
        end
        if Y(i) == 0 && Y(1) > 0 && X(i, j) == 0 && X(1, j) > 0
            curdert = -Y(1);
        end
        
        curdertX = [curdertX, curdert];
    end
    dertX = [dertX; curdertX];
end

outresult = [Years(2 : length(Years)), dertX];

输出结果为:

>> outresult

outresult =
  
    2001	-2.368      2.098       1.087 	-2.416 	1.389 	6.006 	1.720 
    2002	-5.101      0.182       1.967 	-0.875 	3.226 	12.057 	3.595 
    2003	-7.887      8.132       1.600 	-9.653 	5.144 	18.516 	7.503 
    2004	-9.694      11.691      4.541 	-16.261 6.978 	23.726 	10.999 
    2005	-11.705 	0.633       16.474 	-9.592 	9.286 	30.222 	13.474 
    2006	-13.922 	-4.075      17.502 	-5.209 	11.595 	36.929 	21.221 
    2007	-16.383 	-12.215 	19.862 	0.374 	15.345 	43.190 	25.666 
    2008	-18.590 	-16.615 	23.719 	1.424 	19.532 	45.532 	33.349 
    2009	-20.799 	-19.446 	26.776 	1.642 	24.520 	51.948 	44.528 
    2010	-24.066 	-24.326 	30.671 	3.315 	30.949 	64.375 	55.663 
    2011	-33.065 	-30.407 	33.934 	7.154 	45.605 	77.655 	82.020 
    2012	-34.435 	-34.282 	39.478 	6.419 	49.312 	68.413 	87.928 
    2013	-39.774 	-46.167 	55.958 	4.449 	57.750 	75.038 	111.024 
    2014	-44.186 	-48.473 	54.241 	7.242 	63.540 	62.177 	122.721 

对于部分人说结果不一样:

在这里插入图片描述

拜托看看前面乘以了一个系数。

LMDI(Logarithmic Mean Divisia Index)分解方法是一种用于分解碳排放因素的一种方法。它可以将碳排放因素分解为不同的影响因素,从而更好地理解和解析碳排放的变化。 LMDI分解方法基于以下假设:碳排放总量是由五个主要因素决定的,包括产出效率、能源强度、结构效应、就业效应和人口因素。 首先,产出效率是指每单位 GDP 所需要的能源消耗量。产出效率的提高意味着单位 GDP 的能源消耗减少。通过比较不同时间点的产出效率,可以计算产出效率因素对碳排放的贡献。 其次,能源强度是指单位能源消耗量所产生的碳排放量。能源强度的减少意味着单位能源所产生的碳排放减少。通过比较不同时间点的能源强度,可以计算能源强度因素对碳排放的贡献。 结构效应是指不同行业或部门之间碳排放变化的结果。由于不同行业或部门的碳排放水平不同,随着产业结构的调整,结构效应对碳排放的影响也会发生变化。 就业效应是指劳动力数量的变化对碳排放的影响。如果就业人数增加,相应的碳排放也会增加。通过比较不同时间点的就业人数变化,可以计算就业效应对碳排放的贡献。 最后,人口因素是指总人口数量的变化对碳排放的影响。人口增长意味着碳排放的增加。通过比较不同时间点的人口数量变化,可以计算人口因素对碳排放的贡献。 通过LMDI分解方法,可以将这些因素分解出来,以更好地理解碳排放的变化。这有助于制定和实施针对不同因素的碳排放减排措施,为碳减排工作提供科学依据。
评论 27
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

A-Chin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值