资源描述
非正态数据的正态变换处理
—改进的幂变换方法
1.改进的幂变换方法
将偏态分布的数据向量变换为近似正态分布的数据向量y。
(1)经典的幂变换
(2)改进的幂变换
其中幂指数按下列方法估计:求使
最大化,其中
2. 数据处理的MATLAB函数
(1)幂变换函数
function y=powerTrans(x,lambda)
%powerTrans函数功能是对偏态数数据的幂变换,使其变化成为正态数据
%然后通过Q-Q图判断变换变换后数据的正态性
%其中x--变量x1,x2,x3,...,xn的容量为n的非正态偏态数据矩阵
%y--x进行幂变换后的y1,y2,...,yn容量为n的正态数据矩阵
%lambda为幂指数,可以根据数据的具体分布形态通过试验确定,lamnda<1可使大值缩小,lambda>1,可使大致增大
%辛妍编写于2012年11月28号
[m,n]=size(x);
for i=1:m
if lambda~=0
y(i,:)=(x(i,:).^(lambda)-ones(1,n))./lambda;
else
y(i,:)=log(x(i,:));
end
end
qqplot(y);
(2)幂指数估计函数
lamda1.m文件(程序如下)
function [lamda,y]=lamda(x)
%LAMDA函数是改进的幂变换函数,功能是找到使得经验函数
% L(s)=-0.5*n*log(var((x.^s-1)/s))+(s-1)*n*mean(log(x))达到最大化的解,然后对正值偏态数据进行幂变换
% y=(x.^lamda-1)./lamda;(将lamda带入式中)使这些数据变化成为正态据
%通过Q-Q图判断变换变换后数据的正态性
%其中x--变量x1,x2,x3,......xn的容量为n的正值偏态数据矩阵
%y--x进行幂变换后的y1,y2,....yn容量为n的正态数据矩阵
%lamda是使的经验函数最大化时的解
[m,n]=size(x)
if m~=1&&n~=1
error('m or n must be 1 !');
return ;
end
if n==1
n=m;
end
f=@(s)(-(-0.5*n*log(var((x.^s-1)/s))+(s-1)*n*mean(log(x))));%f表示经验函数的相反数
ezplot(f);
s0=input('请输入极值所在区间的左端点:');
s1=input('请输入极值所在区间的右断点:');
lamda=fminbnd(f, s0, s1);%利用该函数找到固定区间内单变量函数最小值
y=(x.^lamda-1)./lamda;
figure(2);
qqplot(y);
title('yQ-Q图');
3.函数测试
(1)生成一组正偏态数据,并画数据QQ图
① 生成正态数据
for i=1:100
x=randn(1,100)+5;
end
② 偏态化处理
a=(0.5*x+1).^2;
hist(a)
③ 偏态数据的直方图的图像
(2)调用lamda1.m函数进行数据处理
①数据处理
lamda1(a)
②参数lamda的估计函数的图像
-6
-4
-2
0
2
4
6
150
200
250
300
350
400
s
(-(-
0
.
5
n
log
(
var
((
x
.
s
-
1
)/
s
))+(
s
-
1
)
n
mean
(
log
(
x
))))
③绘制正态化处理后数据的QQ图
4.实验心得(小结)
在处理数据时,当样本数据来自正态总体的先验假设是错的,即总体不是正态的情况下,通常通过适当的可逆数据变换,使非正态数据变为“像正态数据”。对于计数数据、比例数数据、相关系数矩阵、偏态数据分别采用平方根变换、logit变换z变换、幂变换相应的可逆数据变换。这里,主要针对正偏态数据,首先生成一组正偏态数据,调用lamda1函数,找到使得经验函数L(s)=-0.5*n*log(var((x.^s-1)/s))+(s-1)*n*mean(log(x))达到最大化的解lamda,带入改进的幂变换公式y=(x.^lamda-1)./lamda;求出y的值,然后通过QQ图判断y的正态性,从而找出不足再进行改进。
展开阅读全文