%==========================================================================
%
% 文件名称:Relief.m
% 摘要:求出基因的分类权重。选出权重较大的一组基因作为特征基因。
% 作者:李晓明
% 完成日期:2007年4月25日
%
% 第一次修改
% 修改内容:改善文件的结构、完善注释增加文件的可读性。
% 修改日期:2007年5月15日。
%
% 第二次修改
% 修改内容:修改了choose函数。输出的是分类权重较大基因的原始表达量,而不再是归一化表达量。
% 修改了redundance函数。输出的是特征基因的原始表达量,而不再是归一化表达量。
% 修改目的是使程序更加规范。便于其他程序调用本程序的输出数据。
% 修改时间:2007年6月1日。
%==========================================================================
%
% 主函数介绍:函数名:Relief
% 函数实现了lelief算法。(计算样本的每一个特征的分类权重,选出具有最大权重的一组特征。样本的特征就是基因)。
% 对权重较大的一组基因进行两两冗余分析。将相关性弱的和强相关中权重大的基因保留,即为特征基因。
% 已知基因表达谱数据、不同类样本的个数,自行设定分类特征的权重阈值。
% 对原始数据标准化的方法:(x-基因均值)/基因方差。
% 样本的类内类间距离采用欧氏距离。
% 输入参数:data是基因表达谱数据,行是基因。列是样本。
% data的第一行是样本的类型标志。0表示正常样本;1表示肿瘤样本。
%===============================================================
% 07年的胃癌数据。
%data = importdata('gastric_cancer1519.xls');%1519*(20+20)
%===============================================================
% 输入参数格式要求:行是基因。列是样本。特别注意:数据的第一行是样本类别标记。0表示正常样本;1表示肿瘤样本。
%
% 输出参数:
% important_data是按照设定阈值选出的具有最大分类权重的一组基因的原始表达量。
% important_order是分类权重大于阈值的基因的顺序号。
% feature_gene是特征基因的原始表达量。
% feature_order是特征基因的顺序号。
% 函数中的阈值:共涉及两个阈值。都由用户自行输入。
% gastric_cancer1519.xls的权重阈值 2500;
% 进行两两冗余分析需要设定相关性阈值。gastric_cancer1519.xls的相关性阈值=0.9
%==========================================================================
%主函数:
function [important_data, important_order, feature_gene, feature_order] = Relief ( data )
%==========================================================================
% 第一步:对原始基因表达谱数据归一化。方法:(样本-样本均值)/样本方差。同时计算每类样本的个数。
[stand_data, sort_1, sort_2 ] = standardization( data );
%==========================================================================
% 第二步:求基因的权重向量。
[weight, g_numbertotal] = weighted( sort_1, sort_2, stand_data );
%==========================================================================
% 第三步:画基因分类权重散点图。
subplot(2, 1, 1);
[ max_weight ] = dot_weight ( weight, g_numbertotal);
%==========================================================================
% 第四步:画出基因分类权重的柱图。找到柱图的突跳点。
subplot(2, 1, 2);
[ threshold , gene_distributing] = pillar ( weight, sort_1, sort_2 );
%==========================================================================
% 第五步:根据设定的权重阈值,选出的具有最大分类权重的一组特征。
[ important_data, important_order, important_w, stand_important ] = choose ( weight, g_numbertotal, data, stand_data );
%==========================================================================
% 第六步:对选出的权重较大基因进行两两冗余分析,目的是去掉冗余基因。
[ feature_gene, feature_order ] = redundance ( data, important_order, important_w, stand_important, g_numbertotal );
%==========================================================================
% end