1 Animal Model – viz přednáška č. 10  Odhad PH pomocí animal modelu pro mléčnou užitkovost dojnic a jejich otců.  Modelová rovnice nabývá konkrétní podoby podle toho, jaké efekty při odhadu PH  zohledníme – výpočet BLUP se liší v každé zemi, podle živočišného druhu, plemene, kontroly  užitkovosti, apod.  Př.: Předpokládáme, že naměřená užitkovost krávy je ovlivněna jen stádem, ve kterém je  chována, věkem (tj. pořadím laktace) a genotypem (tj. jedincem se svou jedinečnou  genetickou výbavou).  Data:  jedince  stádo  laktace užitkovost 1  1  1  4500  2*  1  1  5000  3  1  2  6500  4  2  2  8000  5*  2  1  7000  V 1. stádě jsou tři dojnice, z toho dvě jsou na první laktaci a jedna na druhé laktaci. Ve 2.  stádě jsou dvě krávy, jedna na první a dvě na druhé laktaci. Podle původu víme, že dojnice č.  2 a 5 mají společného otce* – jsou tedy polosestry. Jiné příbuzenské vztahy nejsou známy.  V populaci byl odhadnuta hodnota koeficientu heritability h2  = 0,25.  a) modelová rovnice:  yijkl =  Si + Lj + uk + eijkl   y – naměřená užitkovost dojnice  S – pevný efekt stáda (1. a 2. stádo)  L – pevný efekt pořadí laktace (1. a 2. laktace)  u – náhodný efekt jedince  e – náhodné vlivy dalších nekontrolovatelných faktorů  b) maticový zápis:    y = Xb  +Zu + e  y – vektor s hodnotami užitkovostí dojnic  X – designován matice pro pevné efekty (S a L)  b – vektor řešení odhadu středních hodnot pevných efektů  Z ‐ designová matice pro náhodné efekty (jedinec)  u – vektor řešení odhadu náhodných efektů (~ plemenná hodnota)  e – vektor náhodných vlivů  c) Odvozená soustava normálních rovnic smíšeného modelu:          K-1 AZZXZ ZXXX .       u b =         yZ yX   Odhadněte střední hodnoty pevných efektů stáda a pořadí laktace a plemennou hodnotu  pro všechny dojnice a otce.  A – aditivně genetická matice příbuznosti 2 2 1 h h K   Doc. Ing. Tomáš Urban, Ph.D. UMFGZ MENDELU v Brně urban@mendelu.cz 2 Řešení: > X1 <- matrix(c(1,1,1,0,0,0,0,0,1,1),5) > X1 [,1] [,2] [1,] 1 0 [2,] 1 0 [3,] 1 0 [4,] 0 1 [5,] 0 1 > X2 <- matrix(c(1,1,0,0,1,0,0,1,1,0),5) > X2 [,1] [,2] [1,] 1 0 [2,] 1 0 [3,] 0 1 [4,] 0 1 [5,] 1 0 > X <- cbind(X1,X2) > X [,1] [,2] [,3] [,4] [1,] 1 0 1 0 [2,] 1 0 1 0 [3,] 1 0 0 1 [4,] 0 1 0 1 [5,] 0 1 1 0 > A <- matrix(c(1,0,0,0,0,0,0,1,0,0,0.25,0.5,0,0,1,0,0,0,0,0,0,1,0,0,0,0.25,0,0,1,0.5,0,0. 5,0,0,0.5,1),6) > A [,1] [,2] [,3] [,4] [,5] [,6] [1,] 1 0.00 0 0 0.00 0.0 [2,] 0 1.00 0 0 0.25 0.5 [3,] 0 0.00 1 0 0.00 0.0 [4,] 0 0.00 0 1 0.00 0.0 [5,] 0 0.25 0 0 1.00 0.5 [6,] 0 0.50 0 0 0.50 1.0 > y <- matrix(c(4500,5000,6500,8000,7000),5,1) > y [,1] [1,] 4500 [2,] 5000 [3,] 6500 [4,] 8000 [5,] 7000 > h2 <- 0.25 > K <- (1-h2)/h2 > K [1] 3 > Z <- diag(1,5) > Z [,1] [,2] [,3] [,4] [,5] [1,] 1 0 0 0 0 [2,] 0 1 0 0 0 [3,] 0 0 1 0 0 [4,] 0 0 0 1 0 [5,] 0 0 0 0 1 > XX <- t(X)%*%X > XX [,1] [,2] [,3] [,4] [1,] 3 0 2 1 [2,] 0 2 1 1 [3,] 2 1 3 0 [4,] 1 1 0 2 3 > XZ <- t(X)%*%Z > XZ [,1] [,2] [,3] [,4] [,5] [1,] 1 1 1 0 0 [2,] 0 0 0 1 1 [3,] 1 1 0 0 1 [4,] 0 0 1 1 0 > ZX <- t(Z)%*%X > ZX [,1] [,2] [,3] [,4] [1,] 1 0 1 0 [2,] 1 0 1 0 [3,] 1 0 0 1 [4,] 0 1 0 1 [5,] 0 1 1 0 > ZZ <- t(Z)%*%Z > ZZ [,1] [,2] [,3] [,4] [,5] [1,] 1 0 0 0 0 [2,] 0 1 0 0 0 [3,] 0 0 1 0 0 [4,] 0 0 0 1 0 [5,] 0 0 0 0 1 > AK <- K*solve(A) > AK [,1] [,2] [,3] [,4] [,5] [,6] [1,] 3 0.000000e+00 0 0 0.000000e+00 0 [2,] 0 4.000000e+00 0 0 1.665335e-16 -2 [3,] 0 0.000000e+00 3 0 0.000000e+00 0 [4,] 0 0.000000e+00 0 3 0.000000e+00 0 [5,] 0 8.881784e-17 0 0 4.000000e+00 -2 [6,] 0 -2.000000e+00 0 0 -2.000000e+00 5 > AK <- round(AK) > AK [,1] [,2] [,3] [,4] [,5] [,6] [1,] 3 0 0 0 0 0 [2,] 0 4 0 0 0 -2 [3,] 0 0 3 0 0 0 [4,] 0 0 0 3 0 0 [5,] 0 0 0 0 4 -2 [6,] 0 -2 0 0 -2 5 /* Abychom mohli spojit matice ZZ(5x5) a AK (6x6) musíme přidat řádek a sloupec nul do matice ZZ, aby vznikla matice o rozměrech 6x6 Stejně musíme upravit i matice XZ (+ 1 sloupec nul) a ZX (+ 1 řádek nul) Přidáním nul se nic nemění – jen je pak možné spojit tyto submatice do matice levé strany LS */ > ZO <- matrix(c(0,0,0,0,0)) > ZO [,1] [1,] 0 [2,] 0 [3,] 0 [4,] 0 [5,] 0 > ZZ1 <- cbind(ZZ,ZO) > ZZ1 [,1] [,2] [,3] [,4] [,5] [,6] [1,] 1 0 0 0 0 0 [2,] 0 1 0 0 0 0 [3,] 0 0 1 0 0 0 [4,] 0 0 0 1 0 0 [5,] 0 0 0 0 1 0 4 > ZO1 <- matrix(c(0,0,0,0,0,0),1,6) > ZO1 [,1] [,2] [,3] [,4] [,5] [,6] [1,] 0 0 0 0 0 0 > ZZ2 <- rbind(ZZ1,ZO1) > ZZ2 [,1] [,2] [,3] [,4] [,5] [,6] [1,] 1 0 0 0 0 0 [2,] 0 1 0 0 0 0 [3,] 0 0 1 0 0 0 [4,] 0 0 0 1 0 0 [5,] 0 0 0 0 1 0 [6,] 0 0 0 0 0 0 > XZ0 <- cbind(XZ,matrix(c(0,0,0,0))) > XZ0 [,1] [,2] [,3] [,4] [,5] [,6] [1,] 1 1 1 0 0 0 [2,] 0 0 0 1 1 0 [3,] 1 1 0 0 1 0 [4,] 0 0 1 1 0 0 > ZX0 <- rbind(ZX,matrix(c(0,0,0,0),1,4)) > ZX0 [,1] [,2] [,3] [,4] [1,] 1 0 1 0 [2,] 1 0 1 0 [3,] 1 0 0 1 [4,] 0 1 0 1 [5,] 0 1 1 0 [6,] 0 0 0 0 > ZZAK <- ZZ2+AK > ZZAK [,1] [,2] [,3] [,4] [,5] [,6] [1,] 4 0 0 0 0 0 [2,] 0 5 0 0 0 -2 [3,] 0 0 4 0 0 0 [4,] 0 0 0 4 0 0 [5,] 0 0 0 0 5 -2 [6,] 0 -2 0 0 -2 5 > LS1 <- cbind(XX,XZ0) > LS1 [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [1,] 3 0 2 1 1 1 1 0 0 0 [2,] 0 2 1 1 0 0 0 1 1 0 [3,] 2 1 3 0 1 1 0 0 1 0 [4,] 1 1 0 2 0 0 1 1 0 0 > LS2 <- cbind(ZX0,ZZAK) > LS2 [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [1,] 1 0 1 0 4 0 0 0 0 0 [2,] 1 0 1 0 0 5 0 0 0 -2 [3,] 1 0 0 1 0 0 4 0 0 0 [4,] 0 1 0 1 0 0 0 4 0 0 [5,] 0 1 1 0 0 0 0 0 5 -2 [6,] 0 0 0 0 0 -2 0 0 -2 5 > LS <- rbind(LS1,LS2) > LS [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [1,] 3 0 2 1 1 1 1 0 0 0 [2,] 0 2 1 1 0 0 0 1 1 0 [3,] 2 1 3 0 1 1 0 0 1 0 [4,] 1 1 0 2 0 0 1 1 0 0 [5,] 1 0 1 0 4 0 0 0 0 0 [6,] 1 0 1 0 0 5 0 0 0 -2 5 [7,] 1 0 0 1 0 0 4 0 0 0 [8,] 0 1 0 1 0 0 0 4 0 0 [9,] 0 1 1 0 0 0 0 0 5 -2 [10,] 0 0 0 0 0 -2 0 0 -2 5 > Xy <- t(X)%*%y > Xy [,1] [1,] 16000 [2,] 15000 [3,] 16500 [4,] 14500 > Zy <- t(Z)%*%y > Zy [,1] [1,] 4500 [2,] 5000 [3,] 6500 [4,] 8000 [5,] 7000 > PS <- rbind(Xy,Zy,matrix(c(0))) /* rovněž u matice pravé strany musíme > PS přidat nulu, aby vznikl vektor [,1] o 10 řádcích */ [1,] 16000 [2,] 15000 [3,] 16500 [4,] 14500 [5,] 4500 [6,] 5000 [7,] 6500 [8,] 8000 [9,] 7000 [10,] 0 > det <- round(det(LS)) > det [1] 0 > bu <- solve(LS)%*%PS Error in solve.default(LS) : system is computationally singular: reciprocal condition number = 1.33628e-17 /* Protože determinant matice LS je roven nule, je tato matice singulární a nelze ji invertovat -> jedním z řešení je použít zobecněnou inverzi… Je nutné si nahrát balíček MASS z nabídky: Packages -> Load Packages */ > bu <- ginv(LS)%*%PS > bu [,1] [1,] 2302.23138 ~ odhadnutá odchylka stáda 1 [2,] 4229.74702 ~ odhadnutá odchylka stáda 2 (odchylka 1927) [3,] 2547.96760 ~ odhadnutá odchylka 1. laktace [4,] 3984.01080 ~ odhadnutá odchylka 2. laktace (odchylka 1436) [5,] -87.54974 ~ OPH krávy č. 1 [6,] 47.47015 ~ OPH krávy č. 2 [7,] 53.43945 ~ OPH krávy č. 3 [8,] -53.43945 ~ OPH krávy č. 4 [9,] 61.96703 ~ OPH krávy č. 5 [10,] 43.77487 ~ OPH otce krav č. 2 a 5 6 /* Nebo dodám podmínky řešitelnosti: 1. sloupec matice LS zaměním za sloupec nul s jedničkou na prvním řádku a 2. sloupec budu porovnávat k prvnímu sloupci. */ /* smažu 1. sloupec a vložím místo něj vektor (1,0,0,0,0,0,0,0,0,0), ke kterému budu porovnávat sloupec 2. */ > LS = LS[,-1] > LS [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [1,] 0 2 1 1 1 1 0 0 0 [2,] 2 1 1 0 0 0 1 1 0 [3,] 1 3 0 1 1 0 0 1 0 [4,] 1 0 2 0 0 1 1 0 0 [5,] 0 1 0 4 0 0 0 0 0 [6,] 0 1 0 0 5 0 0 0 -2 [7,] 0 0 1 0 0 4 0 0 0 [8,] 1 0 1 0 0 0 4 0 0 [9,] 1 1 0 0 0 0 0 5 -2 [10,] 0 0 0 0 -2 0 0 -2 5 > LSS <- cbind(matrix(c(1,0,0,0,0,0,0,0,0,0)),LS) > LSS [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [1,] 1 0 2 1 1 1 1 0 0 0 [2,] 0 2 1 1 0 0 0 1 1 0 [3,] 0 1 3 0 1 1 0 0 1 0 [4,] 0 1 0 2 0 0 1 1 0 0 [5,] 0 0 1 0 4 0 0 0 0 0 [6,] 0 0 1 0 0 5 0 0 0 -2 [7,] 0 0 0 1 0 0 4 0 0 0 [8,] 0 1 0 1 0 0 0 4 0 0 [9,] 0 1 1 0 0 0 0 0 5 -2 [10,] 0 0 0 0 0 -2 0 0 -2 5 > bu <- solve(LSS)%*%PS > bu <- round(bu) > bu [,1] [1,] 0 [2,] 1928 [3,] 4850 [4,] 6286 [5,] -88 [6,] 47 [7,] 53 [8,] -53 [9,] 62 [10,] 44 > bu <- round(bu,2) /* zaokrouhlení na 2 desetinná místa */ > bu [,1] [1,] 0.00 [2,] 1927.52 [3,] 4850.20 [4,] 6286.24 [5,] -87.55 [6,] 47.47 [7,] 53.44 [8,] -53.44 [9,] 61.97 [10,] 43.77 7 Závěry:  Stáda se liší v chovatelské péči o 1972 kg mléka, druhá laktace převyšuje první o 1436 kg mléka. Nejlepší kráva je č. 5 (OPH = +62 kg) a nejhorší je kráva č. 1 (OPH = -88 kg). Genetický rozdíl mezi nimi je 150kg mléka.  Kráva č. 4 je druhá nejhorší s plemennou hodnotou -53 kg mléka, přestože v rámci ledovaného souboru dosahuje nejvyšší užitkovost (8000 kg mléka). Při pozornějším ledování však zjistíme, že je na druhé laktaci, tzn., že její vysoká užitkovost je dána vyšším stupněm tělesné dospělosti (+ 1436 kg mléka) a je ve stádě s lepší chovatelskou péčí (+ 1927 kg mléka). Jestliže o tyto položky, které jsou dány technikou chovu, se praví její užitkovost, dostane se na podprůměrnou úroveň.  Naopak její vrstevnice – kráva č. 5 – je na první laktaci a na druhé laktaci lze tedy u ní očekávat užitkovost 7000 + 1436 = 8436 kg mléka. Kráva č. 5 je proto po korekci +436 kg mléka lepší než kráva č. 4, což činí v plemenné hodnotě rozdíl (v odhadu rozdílu genetického založení) 115 kg mléka (62 + 53).  U krav č. 2 a č. 5 jsou při odhadu plemenné hodnoty využity vlastní užitkovosti zároveň vzájemný příbuzenský vztah zásluhou společného otce. Jejich plemenné hodnoty jsou proto stanoveny přesněji než u ostatních krav. Plemenná hodnota otce e stanovena na základě užitkovosti těchto dcer a činí +44 kg mléka.  Jak ukazuje příklad, nelze se při výběru do plemenitby řídit naměřenou užitkovostí, neboť ta je ovlivněna několika činiteli.  Na základě odhadu plemenných hodnot dáme přednost zařazení do plemenitby krávám podle tohoto pořadí: pořadí kráva OPH užitkovost 1 5 +62 7000 2 3 +53 6500 3 2 +47 5000 4 4 -53 8000 5 1 -88 4500 Rozdíly v užitkovostech působené chovatelským prostředím jsou mnohem větší, než genetické rozdíly mezi zvířaty. Naměřená užitkovost je ovlivněna větším počtem významných faktorů, a proto jsou soustavy rovnic složitější a zahrnují více efektů.