DNA序列分类

目录

计算频率

欧氏距离判断法

Fisher判别函数

Bayes判别函数


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


计算频率


 %计算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判别函数


 确定函数

%贝叶斯判别法
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分类较好。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值