m_qtlmap_analyse_multitrait_DA

[ Top ] [ ANALYSE ] [ Modules ]

NAME

    m_qtlmap_analyse_multitrait_DA

DESCRIPTION

    Module analyse multicaractere DA
    init_analyse_DA_1QTL,perform_DA_1QTL, opti_DA_0qtl, opti_DA_1qtl, end_analyse_DA_1QTL

NOTES

SEE ALSO


am

[ Top ] [ m_qtlmap_analyse_multitrait_DA ] [ Variables ]

NAME

   am

DESCRIPTION

   The qtl dam effect found der H1

DIMENSIONS

   nm

ap

[ Top ] [ m_qtlmap_analyse_multitrait_DA ] [ Variables ]

NAME

   ap

DESCRIPTION

   The qtl sire effect found der H1

DIMENSIONS

   np

carpm

[ Top ] [ m_qtlmap_analyse_multitrait_DA ] [ Variables ]

NAME

   carpm

DESCRIPTION

   Sum of square of probabilities to receive the qtl dam (for dam with enough dndmin)
   initialization : loop before the minimization of the likelihood : opti_DA_1qtl

DIMENSIONS

   maxval(ngenom)

carpp

[ Top ] [ m_qtlmap_analyse_multitrait_DA ] [ Variables ]

NAME

   carpp

DESCRIPTION

   Sum of square of probabilities to receive the qtl dam (for dam with enough dndmin)
   initialization : loop before the minimization of the likelihood : opti_DA_1qtl

DIMENSIONS

   maxval(ngenom)

carppdf

[ Top ] [ m_qtlmap_analyse_multitrait_DA ] [ Variables ]

NAME

   carppdf

DESCRIPTION

   Sum of square of probabilities to receive the qtl sire
   initialization : loop before the minimization of the likelihood : opti_DA_1qtl

DIMENSIONS

  np

current_chr

[ Top ] [ m_qtlmap_analyse_multitrait_DA ] [ Variables ]

NAME

   current_chr

DESCRIPTION

   The current chromosome while the likelihood calculs

f0

[ Top ] [ m_qtlmap_analyse_multitrait_DA ] [ Variables ]

NAME

   f0

DESCRIPTION

   The maximum likelihood found under H0

f_1

[ Top ] [ m_qtlmap_analyse_multitrait_DA ] [ Variables ]

NAME

   f_1

DESCRIPTION

   The maximum likelihood under H1

fm0

[ Top ] [ m_qtlmap_analyse_multitrait_DA ] [ Variables ]

NAME

   fm0

DESCRIPTION

   The likelihood by full sib family under H0

DIMENSIONS

   nm

fm1

[ Top ] [ m_qtlmap_analyse_multitrait_DA ] [ Variables ]

NAME

   fm1

DESCRIPTION

   The likelihood by full sib family under H1

DIMENSIONS

   nm

fm_1

[ Top ] [ m_qtlmap_analyse_multitrait_DA ] [ Variables ]

NAME

   fm_1

DESCRIPTION

   The maximum likelihood by full sib family

DIMENSIONS

   nm

fp0

[ Top ] [ m_qtlmap_analyse_multitrait_DA ] [ Variables ]

NAME

   fp0

DESCRIPTION

   The likelihood by half sib family under H0

DIMENSIONS

   np

fp1

[ Top ] [ m_qtlmap_analyse_multitrait_DA ] [ Variables ]

NAME

   fp1

DESCRIPTION

   The likelihood by half sib family under H1

DIMENSIONS

   np

fp_1

[ Top ] [ m_qtlmap_analyse_multitrait_DA ] [ Variables ]

NAME

   fp_1

DESCRIPTION

   The maximum likelihood by half sib family

DIMENSIONS

   np

sig1

[ Top ] [ m_qtlmap_analyse_multitrait_DA ] [ Variables ]

NAME

   sig1

DESCRIPTION

   the standart deviation (residual) found under H0

DIMENSIONS

   np

sompm

[ Top ] [ m_qtlmap_analyse_multitrait_DA ] [ Variables ]

NAME

   sompm

DESCRIPTION

   initialization : loop before the minimization of the likelihood : opti_DA_1qtl

DIMENSIONS

   maxval(ngenom)

sompmy

[ Top ] [ m_qtlmap_analyse_multitrait_DA ] [ Variables ]

NAME

   sompmy

DESCRIPTION

   initialization : loop before the minimization of the likelihood : opti_DA_1qtl

DIMENSIONS

   maxval(ngenom)

sompp

[ Top ] [ m_qtlmap_analyse_multitrait_DA ] [ Variables ]

NAME

   sompp

DESCRIPTION

   initialization : loop before the minimization of the likelihood : opti_DA_1qtl

DIMENSIONS

   maxval(ngenom)

somppdf

[ Top ] [ m_qtlmap_analyse_multitrait_DA ] [ Variables ]

NAME

   somppdf

DESCRIPTION

   Sum of probabilities to receive the qtl sire
   initialization : loop before the minimization of the likelihood : opti_DA_1qtl

DIMENSIONS


somppm

[ Top ] [ m_qtlmap_analyse_multitrait_DA ] [ Variables ]

NAME

   somppm

DESCRIPTION

    Sum of probabilities to receive the qtl dam
    initialization : loop before the minimization of the likelihood : opti_DA_1qtl

DIMENSIONS

    maxval(ngenom)

somppy

[ Top ] [ m_qtlmap_analyse_multitrait_DA ] [ Variables ]

NAME

   somppy

DESCRIPTION

   Sum of probabilities to receive the qtl dam mult with a trait
   initialization : loop before the minimization of the likelihood : opti_DA_1qtl

DIMENSIONS

   maxval(ngenom)

somppydf

[ Top ] [ m_qtlmap_analyse_multitrait_DA ] [ Variables ]

NAME

   somppydf

DESCRIPTION

   Sum of probabilities to receive the qtl sire mult with a trait
   initialization : loop before the minimization of the likelihood : opti_DA_1qtl

DIMENSIONS

  np

std

[ Top ] [ m_qtlmap_analyse_multitrait_DA ] [ Variables ]

NAME

   std

DESCRIPTION

   the standart deviation (residual) found under H1

DIMENSIONS

   np

xmoym

[ Top ] [ m_qtlmap_analyse_multitrait_DA ] [ Variables ]

NAME

   xmoym

DESCRIPTION

   The polygenic dam effect found under H1

DIMENSIONS

   nm

xmoyp

[ Top ] [ m_qtlmap_analyse_multitrait_DA ] [ Variables ]

NAME

   xmoyp

DESCRIPTION

   The polygenic sire effect found under H1

DIMENSIONS

   np

xmu1m

[ Top ] [ m_qtlmap_analyse_multitrait_DA ] [ Variables ]

NAME

   xmu1m

DESCRIPTION

   The polygenic dam effect found under H0

DIMENSIONS

   nm

xmu1p

[ Top ] [ m_qtlmap_analyse_multitrait_DA ] [ Variables ]

NAME

   xmu1p

DESCRIPTION

   The polygenic sire effect found under H0

DIMENSIONS

   np

end_analyse_DA_1QTL

[ Top ] [ m_qtlmap_analyse_multitrait_DA ] [ Subroutines ]

NAME

    end_analyse_DA_1QTL

DESCRIPTION

    deallocation of buffer/solution arrays

SOURCE

394   subroutine end_analyse_DA_1QTL
395     deallocate (sig1)
396     deallocate (xmu1p)
397     deallocate (xmu1m)
398     deallocate (fp0)
399     deallocate (fp1)
400     deallocate (fm0)
401     deallocate (fm1)
402     deallocate (sompp)
403     deallocate (sompm)
404     deallocate (sompmy)
405     deallocate (carpp)
406     deallocate (carpm)
407     deallocate (somppy)
408     deallocate (somppm)
409     deallocate (somppdf)
410     deallocate (carppdf)
411     deallocate (somppydf)
412     deallocate (ap)
413     deallocate (xmoyp)
414     deallocate (std)
415     deallocate (xmoym)
416     deallocate (am)
417     deallocate (fp_1)
418     deallocate (fm_1)
419   end subroutine end_analyse_DA_1QTL

funct_0qtl

[ Top ] [ m_qtlmap_analyse_multitrait_DA ] [ Subroutines ]

NAME

    funct_0qtl

DESCRIPTION

    Calcul de la vraisemblance et de ses derivees partielles sous H0

SOURCE

696   subroutine funct_0qtl(n,x,f,iuser,user)
697     use m_qtlmap_analyse_gen, only : somy,eff,cary,estime,effdf,somydf,carydf,estmum
698 
699     implicit none
700     integer         , intent(in)                  :: n
701     !
702     ! Tableaux dimensionnes selon n, le nombre de parametres a estimer
703     !
704     real (kind=dp)      ,dimension(n), intent(in) :: x
705     real (kind=dp)  , intent(inout)               :: f
706     integer ,       dimension(1), intent(in)      :: iuser
707     real (kind=dp)      ,dimension(1), intent(in) :: user
708 
709     integer :: ip,nm1,nm2,jm
710     integer :: nestim,nest
711 
712     real (kind=dp) :: sig,var,vpf,xmup,xmup2
713     real (kind=dp) :: vdf,somxmu,xmum,xmum2,xmupm
714 
715     !******************************************************************************
716     f=0.d0
717     nestim=0
718     do ip=1,np
719        sig=x(ip)
720        var=sig*sig
721        xmup=x(ip+np)
722        xmup2=xmup*xmup
723        vdf=carydf(ip)+dble(effdf(ip))*xmup2-2.d0*xmup*somydf(ip)
724        vdf=0.5d0*vdf/var
725        fp0(ip)=vdf+(dble(effdf(ip))*dlog(sig))
726        f=f+fp0(ip)
727 
728        nm1=nmp(ip)+1
729        nm2=nmp(ip+1)
730        somxmu=0.d0
731        nest=0
732        do jm=nm1,nm2
733           !AJOUT OFI. le tableau 'estime' depend d un caractere
734           ! on ne peut donc pas faire de if estime(ic,jm)
735           ! A VALIDEr PAR HELENE : si un caractere est non estimable alors tous les caracteres ne le sont pas...
736 
737           if( count(estime(:,jm))==size(carac) )  then
738              nest=nest+1
739              if(nest.le.estmum(ip)) then
740                 nestim=nestim+1
741                 xmum=x(2*np+nestim)
742                 somxmu=somxmu+xmum
743              else
744                 xmum=-somxmu
745              end if
746              xmum2=xmum*xmum
747              xmupm=2.d0*(xmup+xmum)
748              vpf=cary(jm)+dble(eff(jm))*(xmup2+xmum2+2.d0*xmup*xmum)-xmupm*somy(jm)
749              vpf=0.5d0*vpf/var
750              fm0(jm)=vpf+(dble(eff(jm))*dlog(sig))
751              f=f+fm0(jm)
752              fp0(ip)=fp0(ip)+fm0(jm)
753           else
754              fm0(jm)=0.d0
755           end if
756        end do
757     end do
758     return
759   end subroutine funct_0qtl

funct_1qtl

[ Top ] [ m_qtlmap_analyse_multitrait_DA ] [ Subroutines ]

NAME

    funct_1qtl

DESCRIPTION

    Calcul de la vraisemblance et de ses derivees partielles sous Hypothese 1QTL 1carac

SOURCE

 965   subroutine funct_1qtl(n,x,f,iuser,user)
 966 
 967     integer       , intent(in)          :: n    ! number of variables
 968     double precision, intent(in)        :: x(n) ! Position
 969     double precision, intent(out)       :: f    ! Result value at the position
 970     double precision      user(1)
 971     integer   iuser(1)
 972 
 973 
 974     !
 975     ! Divers
 976     integer :: ip,nestim,nm1,nm2,nest,jm,ifem,indam,i
 977     integer :: ngeno1,ngeno2,ig
 978     real (kind=dp)  :: sig,var,xmup,xmup2,vdf,somxmu,xmum,xmum2
 979     real (kind=dp)  :: xmupm,vmere,z,vpf,x_ap,x_ap2,x_am,x_am2
 980 
 981 
 982     !******************************************************************************
 983     f=0.d0
 984     nestim=0
 985 
 986     do ip=1,np
 987        sig=x(ip)
 988        var=sig*sig
 989        xmup=x(ip+np)
 990        xmup2=xmup*xmup
 991        x_ap=x(2*np+ip)
 992        x_ap2=x_ap*x_ap
 993        vdf=carydf(ip)+dble(effdf(ip))*xmup2-2.d0*xmup*somydf(ip)
 994        vdf=vdf+x_ap2*carppdf(ip)+2.d0*xmup*x_ap*somppdf(ip)-2.d0*x_ap*somppydf(ip)
 995        vdf=0.5d0*vdf/var
 996        fp1(ip)=vdf+dble(effdf(ip))*dlog(sig)
 997        f=f+fp1(ip)
 998        nm1=nmp(ip)+1
 999        nm2=nmp(ip+1)
1000        somxmu=0.d0
1001        nest=0
1002        do jm=nm1,nm2
1003         !AJOUT OFI. le tableau 'estime' depend d un caractere
1004         ! on ne peut donc pas faire de if estime(ic,jm)
1005         !
1006         ! A VALIDEr PAR HELENE : si un caractere est non estimable alors tous les caracteres ne le sont pas...
1007           if( count(estime(:,jm))== size(carac) )  then
1008              nest=nest+1
1009              if(nest.le.estmum(ip)) then
1010                 nestim=nestim+1
1011                 xmum=x(3*np+nestim)
1012                 somxmu=somxmu+xmum
1013              else
1014                 xmum=-somxmu
1015              end if
1016              xmum2=xmum*xmum
1017              xmupm=2.d0*(xmup+xmum)
1018              ifem=repfem(jm)
1019              indam=iam(1,ifem)
1020              x_am=x(3*np+nmumest(1)+indam)
1021              x_am2=x_am*x_am
1022              z=cary(jm)+dble(eff(jm))*(xmup2+xmum2+2.d0*xmup*xmum)-xmupm*somy(jm)
1023              vmere=0.d0
1024              ngeno1=ngenom(current_ch,jm)+1
1025              ngeno2=ngenom(current_ch,jm+1)
1026              do ig=ngeno1,ngeno2
1027                 vpf=z+x_ap2*carpp(ig)+x_am2*carpm(ig)            &
1028                      +2.d0*x_ap*x_am*somppm(ig)                   &
1029                      +xmupm*(x_ap*sompp(ig)+x_am*sompm(ig))       &
1030                      -2.d0*x_ap*somppy(ig)-2.d0*x_am*sompmy(ig)
1031                 vpf=-0.5d0*vpf/var
1032                 vmere=vmere+probg(current_ch,ig)*dexp(vpf)
1033              end do
1034              !               if (vmere.lt.1.e-8) then
1035              !                 write (nficerr,*) '** WARNING : vmere.eq.0 ',
1036              !   $                 'in funct_1qtl.F **'
1037              !               fm1(jm)=(dble(eff(jm))*dlog(sig))
1038              !         else
1039              fm1(jm)=-dlog(vmere)+(dble(eff(jm))*dlog(sig))
1040              !         end if
1041              f=f+fm1(jm)
1042              fp1(ip)=fp1(ip)+fm1(jm)
1043           else
1044              fm1(jm)=0.d0
1045           end if
1046        end do
1047     end do
1048     return
1049   end subroutine funct_1qtl

init_analyse_DA_1QTL

[ Top ] [ m_qtlmap_analyse_multitrait_DA ] [ Subroutines ]

NAME

    init_analyse_DA_1QTL

DESCRIPTION

    allocation of buffer/solution arrays

SOURCE

311   subroutine init_analyse_DA_1QTL
312     integer           :: ic,jm,stat,ng
313 
314     ! Get Log Debug Information about estim
315 
316     do jm=1,size(estime,2)
317      if( count(estime(:,jm))== size(carac) )  then
318          call log_mess('DAM ['//trim(mere(jm))//"] estime ** OK **",DEBUG_DEF)
319      else
320          call log_mess('DAM ['//trim(mere(jm))//"] estime -- KO --",DEBUG_DEF)
321          do ic=1,size(carac)
322           if ( .not. estime(ic,jm) ) then
323             call log_mess('  --> Trait ['//trim(carac(ic))//'] is not estim ',DEBUG_DEF)
324           end if
325          end do
326      end if
327    end do
328 
329     ng = maxval(ngenom)
330     allocate (sig1(np),STAT=stat)
331     call check_allocate(stat,'sig1 [m_qtlmap_analyse_multitrait_DA]')
332     allocate (xmu1p(np),STAT=stat)
333     call check_allocate(stat,'xmu1p [m_qtlmap_analyse_multitrait_DA]')
334     allocate (xmu1m(nm),STAT=stat)
335     call check_allocate(stat,'xmu1m [m_qtlmap_analyse_multitrait_DA]')
336     allocate (fp0(np),STAT=stat)
337     call check_allocate(stat,'fp0 [m_qtlmap_analyse_multitrait_DA]')
338     allocate (fp1(np),STAT=stat)
339     call check_allocate(stat,'fp1 [m_qtlmap_analyse_multitrait_DA]')
340     allocate (fm0(nm),STAT=stat)
341     call check_allocate(stat,'fm0 [m_qtlmap_analyse_multitrait_DA]')
342     allocate (fm1(nm),STAT=stat)
343     call check_allocate(stat,'fm1 [m_qtlmap_analyse_multitrait_DA]')
344     allocate (sompp(ng),STAT=stat)
345     call check_allocate(stat,'sompp [m_qtlmap_analyse_multitrait_DA]')
346     allocate (sompm(ng),STAT=stat)
347     call check_allocate(stat,'sompm [m_qtlmap_analyse_multitrait_DA]')
348     allocate (sompmy(ng),STAT=stat)
349     call check_allocate(stat,'sompmy [m_qtlmap_analyse_multitrait_DA]')
350     allocate (carpp(ng),STAT=stat)
351     call check_allocate(stat,'carpp [m_qtlmap_analyse_multitrait_DA]')
352     allocate (carpm(ng),STAT=stat)
353     call check_allocate(stat,'carpm [m_qtlmap_analyse_multitrait_DA]')
354     allocate (somppy(ng),STAT=stat)
355     call check_allocate(stat,'somppy [m_qtlmap_analyse_multitrait_DA]')
356     allocate (somppm(ng),STAT=stat)
357     call check_allocate(stat,'somppm [m_qtlmap_analyse_multitrait_DA]')
358     allocate (somppdf(np),STAT=stat)
359     call check_allocate(stat,'somppdf [m_qtlmap_analyse_multitrait_DA]')
360     allocate (carppdf(np),STAT=stat)
361     call check_allocate(stat,'carppdf [m_qtlmap_analyse_multitrait_DA]')
362     allocate (somppydf(np),STAT=stat)
363     call check_allocate(stat,'somppydf [m_qtlmap_analyse_multitrait_DA]')
364     allocate (ap(np),STAT=stat)
365     call check_allocate(stat,'ap [m_qtlmap_analyse_multitrait_DA]')
366     ap=0.d0
367     allocate (xmoyp(np),STAT=stat)
368     call check_allocate(stat,'xmoyp [m_qtlmap_analyse_multitrait_DA]')
369     xmoyp=0.d0
370     allocate (std(np),STAT=stat)
371     call check_allocate(stat,'std [m_qtlmap_analyse_multitrait_DA]')
372     std=0.d0
373     allocate (am(nm),STAT=stat)
374     call check_allocate(stat,'am [m_qtlmap_analyse_multitrait_DA]')
375     am=0.d0
376     allocate (xmoym(nm),STAT=stat)
377     call check_allocate(stat,'xmoym [m_qtlmap_analyse_multitrait_DA]')
378     xmoym=0.d0
379     allocate (fp_1(np),STAT=stat)
380     call check_allocate(stat,'fp_1 [m_qtlmap_analyse_multitrait_DA]')
381     allocate (fm_1(nm),STAT=stat)
382     call check_allocate(stat,'fm_1 [m_qtlmap_analyse_multitrait_DA]')
383 
384   end subroutine init_analyse_DA_1QTL

opti_DA_0qtl

[ Top ] [ m_qtlmap_analyse_multitrait_DA ] [ Subroutines ]

NAME

    opti_DA_0qtl

DESCRIPTION

    Calcul de la vraisemblance 0 QTL, 1 caractere

SOURCE

627   subroutine opti_DA_0qtl
628     use m_qtlmap_analyse_gen, only : sig0,xmu0p,xmu0m
629 
630     implicit none
631     !
632     ! Divers
633 
634     integer iuser(1)
635     double precision  ,dimension(:),allocatable :: borni,borns,par
636     real (kind=dp) :: user(1)
637     integer :: npar,ibound,ip,jm,ifail
638 
639     !******************************************************************************
640     ! Parametres de maximisation
641     npar=(2*np)+nmumest(1)
642 
643     allocate (borni(npar))
644     allocate (borns(npar))
645     allocate (par(npar))
646 
647     ibound=0
648     do ip=1,np
649        borni(ip)=1.do-6
650        borns(ip)=1.d6
651        borni(ip+np)=-1d6
652        borns(ip+np)=1.d6
653     end do
654     do jm=1,nmumest(1)
655        borni(2*np+jm)=-1.d6
656        borns(2*np+jm)=1.d6
657     end do
658     !
659     ! Point de depart
660     do ip=1,np
661        par(ip)=sig0(ip)
662        par(ip+np)=xmu0p(ip)
663     end do
664     do jm=1,nmumest(1)
665        par(2*np+jm)=xmu0m(jm)
666     end do
667     !
668     ! Optimisation de la vraisemblance
669     ifail=0
670 
671     call minimizing_funct(npar,ibound,funct_0qtl,borni,borns,par,f0,iuser,user,ifail)
672 
673     do ip = 1,np
674        sig1(ip)=par(ip)
675        xmu1p(ip)=par(ip+np)
676     end do
677     do jm=1,nmumest(1)
678        xmu1m(jm)=par(2*np+jm)
679     end do
680     !
681     deallocate (borni)
682     deallocate (borns)
683     deallocate (par)
684 
685     return
686   end subroutine opti_DA_0qtl

opti_DA_1qtl

[ Top ] [ m_qtlmap_analyse_multitrait_DA ] [ Subroutines ]

NAME

    opti_DA_1qtl

DESCRIPTION

    Computing statistical test across the chromosome

SOURCE

772   subroutine opti_DA_1qtl(ch,ix,n,yda,lrtsol)
773 
774     integer , intent(in)                                :: ch,n,ix
775     type(TYPE_LRT_SOLUTION)  , intent(inout)              :: lrtsol
776     real (kind=dp)  ,intent(in) ,dimension(nd)          :: yda
777     !
778     ! Divers
779     integer :: iuser(1)
780     double precision  ,dimension(:),allocatable :: borni,borns,par
781     double precision    :: user(1)
782 
783     integer :: ibound,ip,jm,ngeno1,ngeno2,ilong,nm1,nm2,ig
784     integer :: npar,nd1,nd2,kd,kkd,ifail,ii
785     integer :: nestim,nest,ifem,indam
786     real (kind=dp) :: pp, pm, somxmu,xlrt_t,f1
787 
788 
789     !******************************************************************************
790     ! Calcul de la vraisemblance sous H1
791     ! Parametres de maximisation
792     ibound=0
793     npar=(3*np)+nmumest(1)+namest(1)
794 
795     call log_mess("**** OPTI_DA_1QTL *****",DEBUG_DEF)
796     call log_mess("NP:"//str(np),DEBUG_DEF)
797     call log_mess("NPAR:"//str(npar),DEBUG_DEF)
798 
799     allocate (borni(npar))
800     allocate (borns(npar))
801     allocate (par(npar))
802 
803     current_ch = ch
804 
805     do ip=1,np
806        borni(ip)=1.do-6
807        borns(ip)=1.d6
808        borni(ip+np)=-1.d6
809        borns(ip+np)=1.d6
810        borni(2*np+ip)=-1.d6
811        borns(2*np+ip)=1.d6
812     end do
813     do jm=1,nmumest(1)
814        borni(3*np+jm)=-1.d6
815        borns(3*np+jm)=1.d6
816     end do
817     do jm=1,namest(1)
818        borni(3*np+nmumest(1)+jm)=-1.d6
819        borns(3*np+nmumest(1)+jm)=1.d6
820     end do
821     par=0.d0
822     !
823     ! Point de depart
824     do ip=1,np
825        par(ip)=sig1(ip)
826        par(ip+np)=xmu1p(ip)
827        par(2*np+ip)=0.d0
828     end do
829 
830 
831     do jm=1,nmumest(1)
832        par(3*np+jm)=xmu1m(jm)
833     end do
834     do jm=1,namest(1)
835        par(3*np+nmumest(1)+jm)=0.d0
836     end do
837     !
838     !A la position en cours
839     do ip=1,np
840       nm1=nmp(ip)+1
841       nm2=nmp(ip+1)
842       somppdf(ip)=0.d0
843       carppdf(ip)=0.d0
844       somppydf(ip)=0.d0
845       do jm=nm1,nm2
846          ngeno1=ngenom(ch,jm)+1
847          ngeno2=ngenom(ch,jm+1)
848          do ig=ngeno1,ngeno2
849             sompp(ig)=0.d0
850             carpp(ig)=0.d0
851             somppy(ig)=0.d0
852             sompm(ig)=0.d0
853             carpm(ig)=0.d0
854             sompmy(ig)=0.d0
855             somppm(ig)=0.d0
856             nd1=ngend(ch,ig)+1
857             nd2=ngend(ch,ig+1)
858             do kd=nd1,nd2
859                kkd=ndesc(ch,kd)
860                if(presentc(1,kkd)) then
861                   pp=-pdd(ch,kd,1,n)-pdd(ch,kd,2,n)+pdd(ch,kd,3,n)+pdd(ch,kd,4,n)
862                   pm=-pdd(ch,kd,1,n)+pdd(ch,kd,2,n)-pdd(ch,kd,3,n)+pdd(ch,kd,4,n)
863                   !AJOUT OFI. le tableau 'estime' depend d un caractere
864                   ! on ne peut donc pas faire de if estime(ic,jm)
865                   !
866                   ! A VALIDEr PAR HELENE : si un caractere est non estimable alors tous les caracteres ne le sont pas...
867 
868                    if( count(estime(:,jm))== size(carac) )  then
869                      sompp(ig)=sompp(ig)+pp
870                      carpp(ig)=carpp(ig)+pp*pp
871                      somppy(ig)=somppy(ig)+pp*yda(kkd)
872                      sompm(ig)=sompm(ig)+pm
873                      carpm(ig)=carpm(ig)+pm*pm
874                      sompmy(ig)=sompmy(ig)+pm*yda(kkd)
875                      somppm(ig)=somppm(ig)+pp*pm
876                    else
877                      somppdf(ip)=somppdf(ip)+pp
878                      carppdf(ip)=carppdf(ip)+pp*pp
879                      somppydf(ip)=somppydf(ip)+pp*yda(kkd)
880                    end if
881                  end if
882               end do
883            end do
884         end do
885      end do
886      !
887      ! Optimisation de la vraisemblance a la position en cours
888      ifail=0
889 
890      call minimizing_funct(npar,ibound,funct_1qtl,borni,borns,par,f1,iuser,user,ifail)
891 
892      xlrt_t=-2.d0*(f1-f0)
893      call log_mess('N:'//str(n)//" LRT:"//str(xlrt_t)//" F0:"//str(f0)//" F1:"//str(f1),DEBUG_DEF)
894      do ii=1,np
895         lrtsol%xlrp(ch,ii,n)=-2.d0*(fp1(ii)-fp0(ii))
896         lrtsol%pater_eff(ch,ii,n)=par(2*np+ii)
897      end do
898 
899      do ii=1,nm
900         lrtsol%xlrm(ch,ii,n)=-2.d0*(fm1(ii)-fm0(ii))
901      end do
902 
903      do ii=1,namest(1)
904         lrtsol%mater_eff(ch,ii,n)=par(3*np+nmumest(1)+ii)
905      end do
906 
907      if(lrtsol%lrtmax(0).le.xlrt_t) then
908           lrtsol%lrtmax(0)= xlrt_t
909           lrtsol%nxmax(0)= n
910           lrtsol%chrmax(0)= ch
911           f_1=f1       ! ic
912           nestim=0
913           do ip=1,np
914              ap(ip)=par(2*np+ip)
915              xmoyp(ip)=par(np+ip)
916              std(ip)=par(ip)
917              fp_1(ip)=fp1(ip)
918              nm1=nmp(ip)+1
919              nm2=nmp(ip+1)
920              nest=0
921              somxmu=0.d0
922              do jm=nm1,nm2
923                 fm_1(jm)=fm1(jm)
924                 !AJOUT OFI. le tableau 'estime' depend d un caractere
925                   ! on ne peut donc pas faire de if estime(ic,jm)
926                   !
927                   ! A VALIDEr PAR HELENE : si un caractere est non estimable alors tous les caracteres ne le sont pas...
928                   if( count(estime(:,jm))== size(carac) )  then
929                 !if (estime(ic,jm)) then
930                    nest=nest+1
931                    ifem=repfem(jm)
932                    indam=iam(1,ifem)
933                    am(jm)=par(3*np+nmumest(1)+indam)
934                    if (nest.le.estmum(ip)) then
935                       nestim=nestim+1
936                       xmoym(jm)=par(3*np+nestim)
937                       somxmu=somxmu+xmoym(jm)
938                    else
939                       xmoym(jm)=-somxmu
940                    end if
941                 else
942                    am(jm)=0.d0
943                    xmoym(jm)=0.d0
944                 end if
945              end do
946           end do
947        end if
948        lrtsol%lrt1(ch,n)=xlrt_t
949 !
950     deallocate (borni)
951     deallocate (borns)
952     deallocate (par)
953 
954     return
955   end subroutine opti_DA_1qtl

perform_DA_1qtl

[ Top ] [ m_qtlmap_analyse_multitrait_DA ] [ Subroutines ]

NAME

    perform_DA_1qtl

DESCRIPTION

    Calcul des combinaisons lineaires des performances pour la position testee

INPUTS

    ch : index of the chromosome tested
    n  : the position tested
  npo  : number of position tested among the chromosome

OUTPUTS

   yda  :
  coeff :

SOURCE

439   subroutine perform_DA_1qtl(ch,n,yda,coeff,npo)
440 !
441     integer         ,intent(in)                          :: ch ! chromosome
442     real (kind=dp)  ,intent(out) ,dimension(nd)          :: yda
443     integer         ,intent(in)                          :: n,npo
444     real (kind=dp)  ,intent(inout),dimension(size(carac),npo)   :: coeff
445 
446     integer                                              :: ic,k,kkd,nm1,nm2,jm,ip,ngeno1,ngeno2,nd1,nd2,kd,ig
447     integer                                              :: nit,ind,ifail,it,NCV,IRANKX,LDX1,NI,IWKI
448     real(kind=dp)  , dimension(:,:),allocatable          :: Xy,pb
449     real(kind=dp)  , dimension(:),allocatable            :: WT, WK
450     integer        , dimension(:),allocatable            :: NIG, ING, ISX
451     integer        , dimension(:,:),allocatable          :: NIGP
452     integer                                              :: NGP,LDX,M,NBX,LDCVM,LDE,LDCVX,IWK
453 
454     real (kind=dp) , parameter                          :: TOL=0.01d0
455     real(kind=dp)  , dimension(:,:) ,allocatable        :: CVM, E, CVX
456 
457     character (len=1)                                   :: WEIGHT='W'
458     real (kind=dp)                                        ::s1,s2
459 
460 ! Initialisation des parametres
461     NGP=2
462 
463 ! Allocation  tableau des poids (4*nd est mal ajust�)
464     allocate(pb(maxval(ndesc),NGP)) !
465 
466   do ic=1,ncar
467 ! Initialisation des poids des perf dans chaque groupe genotypique
468     nit=0
469     do ip=1,np
470       nm1=nmp(ip)+1
471       nm2=nmp(ip+1)
472       do jm=nm1,nm2
473          ngeno1=ngenom(ch,jm)+1
474          ngeno2=ngenom(ch,jm+1)
475          do ig=ngeno1,ngeno2
476             nd1=ngend(ch,ig)+1
477             nd2=ngend(ch,ig+1)
478             do kd=nd1,nd2
479                kkd=ndesc(ch,kd)
480                if(count(presentc(:,kkd))==size(carac)) then
481                    if (NGP.eq.2) then
482                     pb(kd,1)=pdd(ch,kd,1,n)+pdd(ch,kd,2,n)
483                     pb(kd,2)=pdd(ch,kd,3,n)+pdd(ch,kd,4,n)
484                    else
485                      if (NGP.eq.4) then
486                        pb(kd,1)=pdd(ch,kd,1,n)
487                        pb(kd,2)=pdd(ch,kd,2,n)
488                        pb(kd,3)=pdd(ch,kd,3,n)
489                        pb(kd,4)=pdd(ch,kd,4,n)
490                      else
491                       if (NGP.Eq.3) then
492                         pb(kd,1)=pdd(ch,kd,1,n)
493                         pb(kd,2)=pdd(ch,kd,2,n)+pdd(ch,kd,3,n)
494                         pb(kd,3)=pdd(ch,kd,4,n)
495                       end if ! NGP 3
496                     end if ! NGP 4
497                    end if ! NGP 2
498                    nit=nit+1
499                  end if ! PRESENTC
500               end do
501            end do
502         end do
503      end do
504    end do ! ic
505 ! Initialisation des dimensions du probleme
506     NI=nit*NGP
507 
508 ! Initialisation des parametres
509     LDX=NI
510     M=size(carac)
511     NBX=size(carac)
512     LDCVM=NGP
513     if(size(carac)> NGP) then
514       LDE=size(carac)
515     else
516       LDE=NGP
517     end if
518     LDCVX=size(carac)
519     if(NI> NGP-1) then
520       IWKi=NI
521     else
522       IWKi=NGP-1
523     end if
524     IWK=NI*NBX+5*(NBX-1)+(IWKi+1)*NBX+2
525     IFAIL=0
526 
527 ! Allocation des vecteurs et tables
528     allocate(Xy(LDX,size(carac)))
529     allocate(WT(LDX))
530     allocate(WK(IWK))
531     allocate(NIG(NGP))
532     allocate(ING(NI))
533     allocate(ISX(M))
534     allocate(CVM(LDCVM,NBX))
535     allocate(E(LDE,6))
536     allocate(CVX(LDCVX,NGP-1))
537 
538 ! Initialisation des vecteurs et tables
539     Xy=0.d0
540     WT=0.d0
541     WK=0.d0
542     NIG=nit
543     ING=0
544     ISX=1
545     CVM=0.d0
546     E=0.d0
547     CVX=0.d0
548 ! determination de la VC � la position
549     ind=0
550     LDX1=0
551     ISX(:)=1 ! all trait are included in the analysis
552     do while (ind < NGP)
553          do ip=1,np
554           nm1=nmp(ip)+1
555           nm2=nmp(ip+1)
556           do jm=nm1,nm2
557             nd1=ndm(jm)+1
558             nd2=ndm(jm+1)
559             ngeno1=ngenom(ch,jm)+1
560             ngeno2=ngenom(ch,jm+1)
561             do ig=ngeno1,ngeno2
562           nd1=ngend(ch,ig)+1
563               nd2=ngend(ch,ig+1)
564               do kd=nd1,nd2
565                 kkd=ndesc(ch,kd)
566                 if(count(presentc(:,kkd))==size(carac)) then
567                   LDX1=LDX1+1
568                   ING(LDX1)=1+ind
569                   Xy(LDX1,:)=y(:,kkd)
570                   WT(LDX1)=pb(kd,1+ind)
571                 end if
572               end do
573             end do
574          end do
575        end do
576       ind=ind+1
577     end do
578 
579     s1=0.d0
580     s2=s1
581     do kd=1,nit
582        s1=s1+WT(kd)
583    end do
584     do kd=1+nit,nit*2
585       s2=s2+WT(kd)
586     end do
587 !    print*,'sum', s1,s2
588     call MATH_QTLMAP_G03ACF(WEIGHT,NI,M,Xy,LDX,ISX,NBX,ING,NGP,WT,NIG,CVM,LDCVM,E &
589                           ,LDE,NCV,CVX,LDCVX,TOL,IRANKX,IFAIL)
590     if (ifail.ne.0) then
591          do it=1,LDX1
592 !           call log_mess('LDX1 '//trim(str(LDX1))//trim(str(WT(LDX1),DEBUG_DEF)))
593          end do
594          call stop_application('Analyse discriminante sous H1; ifail='//trim(str(ifail)))
595     end if
596 
597     do kd=1,nd
598          yda(kd)=0.d0
599          do ic=1,size(carac)
600           yda(kd)=CVX(ic,1)*y(ic,kd)+yda(kd)
601          end do
602     end do
603     do ic=1,size(carac)
604       coeff(ic,n)=CVX(ic,1)
605     end do
606 
607     deallocate(pb)
608     deallocate(Xy)
609     deallocate(WT)
610     deallocate(WK)
611     deallocate(NIG)
612     deallocate(ING)
613     deallocate(ISX)
614     deallocate(CVM)
615     deallocate(E)
616     deallocate(CVX)
617   end subroutine perform_DA_1qtl

set_solution_hypothesis1

[ Top ] [ m_qtlmap_analyse_multitrait_DA ] [ Subroutines ]

NAME

    set_solution_hypothesis1

DESCRIPTION

SOURCE

1058  subroutine set_solution_hypothesis1(incsol)
1059        type(TYPE_INCIDENCE_SOLUTION)      ,intent(inout)    :: incsol
1060 
1061        integer :: nteff,maxNbPar,jm,ifem,ip,ieff
1062 
1063        allocate (incsol%sig(1,np))
1064 
1065        incsol%hypothesis=1
1066        !  Mean family , Qtl effect
1067        nteff = 2
1068        if ( count(estime(1,:))  > 0 ) nteff = 4
1069 
1070        maxNbPar = max(np,count(estime(1,:)))
1071        allocate (incsol%groupeName(nteff))
1072        allocate (incsol%nbParameterGroup(nteff))
1073        allocate (incsol%parameterName(nteff,maxNbPar))
1074        allocate (incsol%paramaterValue(nteff,maxNbPar))
1075        allocate (incsol%parameterVecsol(nteff,maxNbPar))
1076        allocate (incsol%parameterPrecis(nteff,maxNbPar))
1077        allocate (incsol%qtl_groupeName(1,1))
1078 
1079        incsol%parameterPrecis=0.d0
1080        incsol%parameterVecsol=.true.
1081 
1082        do ip=1,np
1083             incsol%sig(1,ip) = std(ip)*sigt(1)
1084        end do
1085 
1086        ieff=1
1087          incsol%qtl_groupeName(1,1)=ieff
1088          incsol%groupeName(ieff) = 'Sire Qtl effect'
1089          incsol%nbParameterGroup(ieff)=np
1090 
1091          do ip=1,np
1092            incsol%parameterName(ieff,ip)='Sire '//trim(pere(ip))
1093            incsol%paramaterValue(ieff,ip) = ap(ip)*sigt(1)! en DA quel sigt prendre ? *sigt(ic)
1094          end do
1095 
1096          if ( count(estime(1,:)) > 0 ) then
1097            ieff = ieff +1
1098            incsol%groupeName(ieff) = 'Dam Qtl effect'
1099            incsol%nbParameterGroup(ieff)=namest(1)
1100            ifem=0
1101            do jm=1,nm
1102              if ( estime(1,jm)) then
1103               ifem=ifem+1
1104               incsol%parameterName(ieff,ifem)='Dam '//trim(mere(jm))
1105               incsol%paramaterValue(ieff,ifem) = am(jm)*sigt(1)
1106               incsol%parameterVecsol(ieff,ifem) = .true.
1107              end if
1108            end do
1109          end if
1110 
1111 
1112        ieff = ieff +1
1113        incsol%groupeName(ieff) = 'Mean Sire'
1114        incsol%nbParameterGroup(ieff)=np
1115 
1116        do ip=1,np
1117            incsol%parameterName(ieff,ip)='Sire '//trim(pere(ip))
1118            incsol%paramaterValue(ieff,ip) = xmoyp(ip)*sigt(1) + xmut(1)
1119            incsol%parameterVecsol(ieff,ip) = .true.
1120        end do
1121 
1122        if ( count(estime(1,:)) > 0 ) then
1123            ieff = ieff +1
1124            incsol%groupeName(ieff) = 'Mean dam'
1125            incsol%nbParameterGroup(ieff)=count(estime(1,:))
1126            ifem=0
1127          do ip=1,np
1128            do jm=nmp(ip)+1,nmp(ip+1)
1129              if ( estime(1,jm)) then
1130               ifem=ifem+1
1131               incsol%parameterName(ieff,ifem)='Dam '//trim(mere(jm))//" [Sire "//trim(pere(ip))//"]"
1132               incsol%paramaterValue(ieff,ifem) = xmoym(jm)*sigt(1)
1133               incsol%parameterVecsol(ieff,ifem) = .true.
1134              end if
1135            end do
1136          end do
1137          end if
1138 
1139        end subroutine set_solution_hypothesis1