DNA序列分类

目录

计算频率

欧氏距离判断法

Fisher判别函数

Bayes判别函数


        针对序列建立模型,对DNA进行分类。DNA序列中存在着局部的和全局性的结构,充分挖掘序列的结构对理解DNA全序列有着重要的意义。

DNA序列分类_第1张图片


计算频率


 %计算A、C、G、T在序列中出现的频率
clear all
clc
a=[  33    44    19    15
     30    46    18    17
     30    50    24     7
     47    20    12    32
     26    47    26    12
     39    44    14    14
     39    40    11    21
     31    41    18    21
     23    48    23    17
     20    45    30    15];

 b=zeros(10,4);
   for i=1:10
     for j=1:4
         b(i,j)=a(i,j)/(a(i,1)+a(i,2)+a(i,3)+a(i,4));
     end
   end
   b

欧氏距离判断法


Y = inv(X) 计算方阵 X 的 逆矩阵。

  • X^(-1) 等效于 inv(X)

  • x = A\b 的计算方式与 x = inv(A)*b 不同,建议用于求解线性方程组。

%距离判别法中的线性判别函数 
clear all
clc
a= [  0.2973    0.3964    0.1712    0.1351
     0.2703    0.4144    0.1622    0.1532
     0.2703    0.4505    0.2162    0.0631
     0.4234    0.1802    0.1081    0.2883
     0.2342    0.4234    0.2342    0.1081
     0.3514    0.3964    0.1261    0.1261
     0.3514    0.3604    0.0991    0.1892
     0.2793    0.3694    0.1622    0.1892
     0.2072    0.4324    0.2072    0.1532
     0.1818    0.4091    0.2727    0.1364];
 b=[ 0.3545    0.1000    0.0455    0.5000
     0.3273    0.1455    0.0273    0.5000
     0.2545    0.1273    0.1000    0.5182
     0.3000    0.1182    0.0818    0.5000
     0.2909    0.0636         0    0.6455
     0.3636    0.0909    0.0818    0.4636
     0.3545    0.1364    0.2455    0.2636
     0.2909    0.0909    0.1182    0.5000
     0.2182    0.0727    0.1455    0.5636
     0.2000    0.0636    0.1727    0.5636 ];
 x=mean(a)';
 y=mean(b)';
 d=a';
 for i=1:10
     for j=1:4
 d(j,i)=(d(j,i)-d(j,1));
     end
 end
 s1=d*d'
 e=b';
 for i=1:10
     for j=1:4
         e(j,i)=(e(j,i)-e(j,1));
     end
 end
 s2=e*e'
 s=s1+s2;
 f=s/(10+10-2);
 njz=inv(f);
 u=(njz*(x-y))'
v=u*(x+y)/2;
u*v

得出线性判别函数

%判别函数 
function y=fun3(x1,x2,x3,x4)
y=0.0765*x1+7.7047*x2-2.8483*x3-4.4863*x4+0.0204;

使用线性判别函数对DNA序列进行归类,若w(x)>0则为A类,反之为B类。

clear all 
clc
m=[0.2973    0.3964    0.1712    0.1351
    0.2703    0.4144    0.1622    0.1532
    0.2703    0.4505    0.2162    0.0631
    0.4234    0.1802    0.1081    0.2883
    0.2342    0.4234    0.2342    0.1081
    0.3514    0.3964    0.1261    0.1261
    0.3514    0.3604    0.0991    0.1892
    0.2793    0.3694    0.1622    0.1892
    0.2072    0.4324    0.2072    0.1532
    0.1818    0.4091    0.2727    0.1364];
a=[ 0.3545    0.1000    0.0455    0.5000
     0.3273    0.1455    0.0273    0.5000
     0.2545    0.1273    0.1000    0.5182
     0.3000    0.1182    0.0818    0.5000
     0.2909    0.0636         0    0.6455
     0.3636    0.0909    0.0818    0.4636
     0.3545    0.1364    0.2455    0.2636
     0.2909    0.0909    0.1182    0.5000
     0.2182    0.0727    0.1455    0.5636
     0.2000    0.0636    0.1727    0.5636 ];
 for i=1:10
   b(i,1)=fun3(a(i,1),a(i,2),a(i,3),a(i,4));
   c(i,1)=fun3(m(i,1),m(i,2),m(i,3),m(i,4));
 end
c 
b

Fisher判别函数


得到y0便于后续判断

%fisher判别法 
clear all
clc
 x=[0.2973    0.3964    0.1712    0.1351
    0.2703    0.4144    0.1622    0.1532
    0.2703    0.4505    0.2162    0.0631
    0.4234    0.1802    0.1081    0.2883
    0.2342    0.4234    0.2342    0.1081
    0.3514    0.3964    0.1261    0.1261
    0.3514    0.3604    0.0991    0.1892
    0.2793    0.3694    0.1622    0.1892
    0.2072    0.4324    0.2072    0.1532
    0.1818    0.4091    0.2727    0.1364];

x1=[0.3545    0.1000    0.0455    0.5000
    0.3273    0.1455    0.0273    0.5000
    0.2545    0.1273    0.1000    0.5182
    0.3000    0.1182    0.0818    0.5000
    0.2909    0.0636         0    0.6455
    0.3636    0.0909    0.0818    0.4636
    0.3545    0.1364    0.2455    0.2636
    0.2909    0.0909    0.1182    0.5000
    0.2182    0.0727    0.1455    0.5636
    0.2000    0.0636    0.1727    0.5636];
a=mean(x)';
b=mean(x1)';
x=x';
x1=x1';
for i=1:4
    for j=1:10
        x(i,j)=x(i,j)-a(i,1);
        x1(i,j)=x1(i,j)-b(i,1);
    end
end
s=x*x';
s1=x1*x1';
c=1/18*(s+s1)
m=inv(c);
for i=1:4
   n(i,1)=a(i,1)-b(i,1);
end
z=1/18*m*n
y=0;
y1=0;
for i=1:4
    y=a(i,1)*z(i,1)+y;
    y1=b(i,1)*z(i,1)+y1;
end
y0=(10*y+10*y1)/20;
y0

根据z的值得到判别函数

%判别函数 
function y=fun5(x1,x2,x3,x4);
y=-873.0364*x1-869.4539*x2-875.4649*x3-875.5247*x4;

归类:y>y0为A类,反之为B类

%调用函数
clear all 
clc
f=[0.2973    0.3964    0.1712    0.1351
    0.2703    0.4144    0.1622    0.1532
    0.2703    0.4505    0.2162    0.0631
    0.4234    0.1802    0.1081    0.2883
    0.2342    0.4234    0.2342    0.1081
    0.3514    0.3964    0.1261    0.1261
    0.3514    0.3604    0.0991    0.1892
    0.2793    0.3694    0.1622    0.1892
    0.2072    0.4324    0.2072    0.1532
    0.1818    0.4091    0.2727    0.1364];
m=[0.3545    0.1000    0.0455    0.5000
    0.3273    0.1455    0.0273    0.5000
    0.2545    0.1273    0.1000    0.5182
    0.3000    0.1182    0.0818    0.5000
    0.2909    0.0636         0    0.6455
    0.3636    0.0909    0.0818    0.4636
    0.3545    0.1364    0.2455    0.2636
    0.2909    0.0909    0.1182    0.5000
    0.2182    0.0727    0.1455    0.5636
    0.2000    0.0636    0.1727    0.5636];
for i=1:10
    b(i,1)=fun5(f(i,1),f(i,2),f(i,3),f(i,4));
    h(i,1)=fun5(m(i,1),m(i,2),m(i,3),m(i,4));
 end
    b
    h

Bayes判别函数


DNA序列分类_第2张图片

 确定函数

%贝叶斯判别法
clear all 
clc
A=[ 0.2973    0.3964    0.1712    0.1351
    0.2703    0.4144    0.1622    0.1532
    0.2703    0.4505    0.2162    0.0631
    0.4234    0.1802    0.1081    0.2883
    0.2342    0.4234    0.2342    0.1081
    0.3514    0.3964    0.1261    0.1261
    0.3514    0.3604    0.0991    0.1892
    0.2793    0.3694    0.1622    0.1892
    0.2072    0.4324    0.2072    0.1532
    0.1818    0.4091    0.2727    0.1364];
a=(mean(A))';
d=A';
B=[0.3545    0.1000    0.0455    0.5000
    0.3273    0.1455    0.0273    0.5000
    0.2545    0.1273    0.1000    0.5182
    0.3000    0.1182    0.0818    0.5000
    0.2909    0.0636         0    0.6455
    0.3636    0.0909    0.0818    0.4636
    0.3545    0.1364    0.2455    0.2636
    0.2909    0.0909    0.1182    0.5000
    0.2182    0.0727    0.1455    0.5636
    0.2000    0.0636    0.1727    0.5636];
b=(mean(B))';
% c=zeros(3);
for i=1:10
     for j=1:4
    d(j,i)=(d(j,i)-a(j,1));
     end
end
S1=d*d'
e=B';
for x=1:10
     for y=1:4
    e(y,x)=(e(y,x)-b(y,1));
     end
end
S2=e*e';
s=S1+S2;
r=inv(s/18);
log(0.5)-0.5*a'*r*a
r*a
log(0.5)-0.5*b'*r*b
r*b

进行分类

%判别函数
clear all
clc
format long;
a=[0.2973    0.3964    0.1712    0.1351
    0.2703    0.4144    0.1622    0.1532
    0.2703    0.4505    0.2162    0.0631
    0.4234    0.1802    0.1081    0.2883
    0.2342    0.4234    0.2342    0.1081
    0.3514    0.3964    0.1261    0.1261
    0.3514    0.3604    0.0991    0.1892
    0.2793    0.3694    0.1622    0.1892
    0.2072    0.4324    0.2072    0.1532
    0.1818    0.4091    0.2727    0.1364];
b=[0.3545    0.1000    0.0455    0.5000 
    0.3273    0.1455    0.0273    0.5000
    0.2545    0.1273    0.1000    0.5182
    0.3000    0.1182    0.0818    0.5000
    0.2909    0.0636         0    0.6455
    0.3636    0.0909    0.0818    0.4636
    0.3545    0.1364    0.2455    0.2636
    0.2909    0.0909    0.1182    0.5000
    0.2182    0.0727    0.1455    0.5636
    0.2000    0.0636    0.1727    0.5636];
for i=1:10
   
        c(i,1)=fun7_1(a(i,1),a(i,2),a(i,3),a(i,4));
        d(i,1)=fun7_2(a(i,1),a(i,2),a(i,3),a(i,4));
        e(i,1)=fun7_1(b(i,1),b(i,2),b(i,3),b(i,4));
        f(i,1)=fun7_2(b(i,1),b(i,2),b(i,3),b(i,4));
end
c
d
e
f

最终分类结果表明,欧式距离法、Fisher判别法、Bayes判别法这三种方法的判对率分别为90%,95%,80%。故用Fisher判别法判别DNA分类较好。

你可能感兴趣的:(数学建模,matlab)