熵权法原理及操作方法

熵权法

数据波动越大,信息量就越大。
举例:语文成绩与数学成绩,通过不同努力程度,语文成绩提升变化不大,但是数学努力前后会有较大的变化。

熵权法赋权步骤

  1. 数据标准化
    目的:让不同类型的数据可以进行比较
    举例:第一组数 1001、1200、1300…
    第二组数 0.0001、0.0002、0.0003…
    熵权法原理及操作方法_第1张图片
    2.求各个指标的信息熵

熵权法原理及操作方法_第2张图片
3.确定各指标权重
熵权法原理及操作方法_第3张图片

excel操作

初始数据,波动分别为小、大、中
熵权法原理及操作方法_第4张图片
进行标准化
对所有的数据除以100
熵权法原理及操作方法_第5张图片
求p,用每一个标准化的数值除以总计数值
熵权法原理及操作方法_第6张图片
把0改为0.000001,避免之后取对数出错,误差很小可以忽略不记。
熵权法原理及操作方法_第7张图片
求plnp,直接计算
熵权法原理及操作方法_第8张图片
如果不改0的花可以在计算结果出来后,手动将计算结果改成0
熵权法原理及操作方法_第9张图片
求e值,将所有plnp加起来乘 -k 即e = -SUM(plnp)/LN(6)
求d值,d = 1-e
计算权重w,w = di / SUM(di)
熵权法原理及操作方法_第10张图片

stata操作

模板代码如下

//cd "C:\Users\Administrator\Desktop"
//import excel using experiencedata.xlsx,first clear x16 x17 x18 x19 x23 x24
///标准差标准化
global positive_var x1 x4 x6 x7 x8 x10 x12 x14 x15 
global negative_var x2 x3 x5 x9 x11 x13

//下面的不变,包括正负项指标
global all_var $positive_var $negative_var
	foreach i in $positive_var {
		qui sum `i'
		gen x_`i'=(`i'-r(min))/(r(max)-r(min))
	}
	foreach i in $negative_var {
		qui sum `i'
		gen x_`i'=(r(max)-`i')/(r(max)-r(min))
	}
	//计算各指标的比重
	foreach i in $all_var {
		egen `i'_sum=sum(x_`i')
		gen y_`i'=x_`i'/`i'_sum
	}
	
	//根据比重计算各分量的信息熵
	gen n=_N

	foreach i in $all_var {
		gen y_lny_`i'=y_`i'*ln(y_`i')
		replace y_lny_`i'=0 if x_`i'==0
	}
	//求和
	foreach i in $all_var {
		egen y_lny_`i'_sum=sum(y_lny_`i')
	}
	//计算各指标的贡献总量。熵值ej
	foreach i in $all_var {
		gen E_`i'= -1/ln(n)*y_lny_`i'_sum
	}
	//计算各指标的权重,差异系数d
	foreach i in $all_var {
		gen d_`i'= 1-E_`i'
	}
	
	egen d_sum = rowtotal(d_*)
	foreach i in $all_var {
		gen W_`i'= d_`i'/d_sum
		
	}
	egen W=rowtotal(W_*)
	//计算综合得分
	foreach i in $all_var {
		gen Score_`i'= x_`i'*W_`i'
	}
	egen Score=rowtotal(Score_*)

在上述语数英成绩的代码使用如下:

global positive_var C M E
global all_var $positive_var
	foreach i in $positive_var {
		qui sum `i'
		gen x_`i'=(`i'-r(min))/(r(max)-r(min))
	}
	foreach i in $all_var {
		egen `i'_sum=sum(x_`i')
		gen y_`i'=x_`i'/`i'_sum
	}
	gen n=_N

	foreach i in $all_var {
		gen y_lny_`i'=y_`i'*ln(y_`i')
		replace y_lny_`i'=0 if x_`i'==0
	}
	foreach i in $all_var {
		egen y_lny_`i'_sum=sum(y_lny_`i')
	}
	foreach i in $all_var {
		gen E_`i'= -1/ln(n)*y_lny_`i'_sum
	}
	//计算各指标的权重,差异系数d
	foreach i in $all_var {
		gen d_`i'= 1-E_`i'
	}
	
	egen d_sum = rowtotal(d_*)
	foreach i in $all_var {
		gen W_`i'= d_`i'/d_sum
		
	}
	egen W=rowtotal(W_*)
	//计算综合得分
	foreach i in $all_var {
		gen Score_`i'= x_`i'*W_`i'
	}
	egen Score=rowtotal(Score_*)
	

你可能感兴趣的:(spss,学习,经验分享)