éå£ã®ç¹æ ã«å¿ è¦ãªåã©ãã®æ°ã«ã¤ãã¦èãã
â»ä»åã®å 容ã¯Dr.STONEã¨ããæ¼«ç»ã®ãã¿ãã¬ãå«ã¿ã¾ã
åçªã§ãããDr.STONEã¨ããæ¼«ç»ã好ãã§ãã
ç©çãåå¦ã«è©³ãããªãã®ã§å 容ãçè§£ããªããèªãã¦ããããã§ã¯ãªãã®ã§ãããç³åããä¸çã§å°ããã¤ææã®ã¬ãã«ãä¸ãã£ã¦ããã®ãè¦ã¦ããã¨ãç§å¦ã£ã¦å°éã ãã©é¢ç½ããªã¼ã¨æã£ã¦ãã¾ãã¾ãã
ãããèªãã§ãã¦ä¸ç¹æ°ã«ãªãã¨ãããããã¾ããã ç½å¤ãã¡ãå®å®ããå°çã«å¸°éããå¾ã3çµã®ã«ããã«ããç³ç¥æãèªçãããã¨ã§ãã
ãã¡ããããããã®ã«ããã«ãé常ã«ããããã®åã©ããç£ãã°å¯è½ã§ãããããããç¾ä»£äººã10人ã20人ãåã©ããç£ããã®ãã¨ããã¨å°ãé£ãããããªæ°ããã¾ãã ã¾ãã«ããã«ã3çµããããã¾ããã®ã§ãåã©ããå°ãªããã°ãã£ã¨è¨ãéã«ãå ¨å¡ã親æå士ãã¿ãããªãã¨ã¨ãªããæ°ããªã«ããã«ãä½ããªããªããããªæ°ããã¾ããããèããã¨å®éã«ã©ãã ãå³ããæ¡ä»¶ã ã£ããã ãããã¨æ°ã«ãªã£ã¦ãã¾ãã¾ããã
ã¨ããããã§ä»åã¯ç½å¤ãã¡ãå°æ¥çã«éå£ãç¹æ ãããããã«ãã©ã®ç¨åº¦ã®åã©ããããããå¿ è¦ããã£ãããèãã¦ã¿ããã¨æãã¾ãã
èãæ¹
ä¸è¨ãèããã«ãããã以ä¸ã®ãããªæ¡ä»¶ã§ã·ãã¥ã¬ã¼ã·ã§ã³ã宿½ãã¾ãï¼
- ã¹ã¿ã¼ãã¯ç·æ§3人女æ§3人ã¨ããï¼ç¬¬ä¸ä¸ä»£ï¼
- åä¸ä»£ã«ããã¦ç·å¥³1人ãã¤ã§ã«ããã«ã¨ãªã
- ç·å¥³ã®æ°ãç°ãªãå ´åãä½ã£ã人ã¯åã©ããæ®ããªã
- åã«ããã«ã¯ãããã
np人ã®åã©ããç£ã npã¯ä¸ä»£ãã¾ããå ¨ã¦ã®ã«ããã«ã§å ±éã¨ãã- çã¾ãã¦ããåã©ãã®æ§å¥ã¯ç·å¥³æ¯ 1:1 ã§ã©ã³ãã ã«æ±ºã¾ã
- ã«ããã«ã¯ä¸å¤«ä¸å¦»å¶ãåãããã¼ããã¼ä»¥å¤ã®ç°æ§ã¨ã®åã©ãã¯ç£ã¾ãªã
- ä¸ä»£ãã¾ããã£ã¦ã«ããã«ãå½¢æããªã
ã·ãã¥ã¬ã¼ã·ã§ã³ããããããå³ããã®æ¡ä»¶ã¨ãã¦ãã¾ãããã ããã®ã¾ã¾ã§ã¯è¿ç¸è ã¨ã®ã«ããã«ãåºæ¥ã¦ãã¾ãã¾ãã®ã§ã以ä¸ã®æ¡ä»¶ã追å ãã¾ãï¼
- åã©ãã®è¿äº¤ä¿æ°ãä¸å®ã®å¤ä»¥ä¸ã¨ãªãã«ããã«ã¯å½¢æããªã
ããã§è¿äº¤ä¿æ°ã¨ã¯éå£éºä¼å¦ãªã©ã§ä½¿ãããç¨èªã§ãè¿è¦ªäº¤é ã®ç¨åº¦ã表ãã¾ããæ¥æ¬ã§ã¯ãã¨ãå士ã§ã®çµå©ãæ³å¾ä¸èªãããã¦ãã¾ããããã¨ãå士ã®åã©ãã®è¿äº¤ä¿æ°ã6.25%ã¨ãªãã¾ãã第ä¸ä¸ä»£ã®æ°ãå°ãªãããããããå³ããããã¨ãã£ã¨è¨ãéã«ã«ããã«ãåºæ¥ãªããªããã¨ãäºæ³ããã¾ãã
ä¸è¨ã®ã·ãã¥ã¬ã¼ã·ã§ã³ãå®è¡ããããã®ããã°ã©ã ã¯ä»¥ä¸ã¨ãã¾ããï¼
generate_population <- function(np, # ã«ããã«ãç£ãåã©ãã®æ° n0 = 6, # 第ä¸ä¸ä»£ã®äººæ° num_column = 6, # çµææ ¼ç´ç¨ã®ãã¼ãã«ã®åæ° G = 5, # ã·ãã¥ã¬ã¼ãããä¸ä»£æ° random_seed = 42, # ä¹±æ°åºå®ç¨ rel_lim = 0.90 # è¡ç¸ä¿æ°ï¼è¿äº¤ä¿æ°ã¨ã¯ç°ãªãï¼ ) { set.seed(random_seed) # åã©ãæ§å¥ã決ããã®ã«ä¹±æ°ã使ããã pairs <- c() # ã«ããã«ãè¨é²ããç¨ã®ãã¼ãã« ### å人ãã¨ã®è¨é²ï¼IDãä¸ä»£ãæ§å¥ãè¿äº¤ä¿æ°ãç¶ãæ¯ï¼ãæ ¼ç´ãããã¼ãã« res_mat <- matrix(0, n0, num_column) colnames(res_mat) <- c("ID", "Gen", "Sex", "Inbred", "Father", "Mother") ### 第ä¸ä¸ä»£ã®çæ res_mat[, "ID"] <- 1:n0 res_mat[, "Gen"] <- 1 res_mat[, "Sex"] <- rep(c(1, 0), 3) ### 以ä¸ãå°æ¥ä¸ä»£ãçæ for(g in 1:G) { ### ç¾å¨ä¸ä»£ã®è¡ç¸é¢ä¿ãè©ä¾¡ãã rel_mat <- create_rel_mat(res_mat) ### ã«ããã«ãä½ããã¢ã決ãã tmp_pairs <- make_pairs(g, res_mat, rel_mat, rel_lim) pairs <- rbind(pairs, tmp_pairs) ### np人ã®åã©ããçæãã tmp_res_mat <- generate_progenies(tmp_pairs, res_mat, g, np, num_column) ### ããããã®è¿äº¤ä¿æ°ãè¨ç®ããï¼è¿äº¤ä¿æ°ã¯ä¸¡è¦ªéã®è¡ç¸ä¿æ°*1/2ï¼ tmp_res_mat <- calculate_inbred_coef(tmp_res_mat, rel_mat) res_mat <- rbind(res_mat, tmp_res_mat) # sprintf("The %d generation generated", g+1) print(g) } return(res_mat) }
ã試ã
ãã¦ã颿°ã®è§£èª¬ã¯å¾åãã«ãã¦ã¾ãã¯å®è¡ãã¦ã¿ã¾ãããããã®ããã°ã©ã ãå®è¡ããã¨ä»¥ä¸ã®ãããªçµæãå¾ããã¾ãã
source("/YourDirectory/my_functions.r") # 颿°ãå®ç¾©ãããã¡ã¤ã« res_mat <- generate_population(np = 3, G = 15)
> calc_num_pop(res_mat) Gen Population 1 1 6 2 2 9 3 3 6 4 4 9 5 5 9 6 6 12 7 7 15 8 8 18 9 9 24 10 10 33 11 11 30 12 12 39 13 13 54 14 14 60 15 15 60 16 16 87
plot(calc_num_pop(res_mat), type = "l", xlab = "Generation g", ylab = "Population size")

ãã®è¡¨ã¨ã°ã©ãã¯å ã®æ¡ä»¶ã§ã·ãã¥ã¬ã¼ã·ã§ã³ã宿½ããã¨ãã®ä¸ä»£ãã¨ã®äººæ°ãéè¨ãã¦ãã¾ãã
第äºä¸ä»£ã¾ã§ã¯ãªããªã人æ°ãå¢ãã¦ããã¾ãããã第å ä¸ä»£ããå¾ã ã«äººæ°ãå¢ããã¦ãã¾ãããã«ããã«ãã¨ã®åã©ãã®æ°ã3人ã¨ããã®ã¯å°ãå¤ãããã«ãæãã¾ãããæå24å¹´ããã®ç¬¬ä¸æ¬¡ããã¼ãã¼ã ã®åè¨ç¹æ®åºççã4.32ã¨ãããã¨ãããã®ã§*1ãããå¾ãªãæ°å¤ã§ã¯ãªãã§ãããããããæ»äº¡ãä¸åèæ ®ãã¦ããªãã·ãã¥ã¬ã¼ã·ã§ã³ãªã®ã§ããã£ã¨ç£ãã§ããªãã¨3人ã§ãæªãããªãããã§ããã¨ã¯ããããããªãç³ç¥æãåé¡ãªãèªçããã§ãããããã§ãããã§ããâ¦
â¦ã¨ãè¨ãããã¨ããã§ãããçµè«ã¥ããåã«è¿äº¤ä¿æ°ãè¦ã¦ã¿ã¾ãããã
> summary(res_mat[, "Inbred"]) Min. 1st Qu. Median Mean 3rd Qu. Max. 0.0000 0.2956 0.3209 0.3051 0.3377 0.4053
ãªãã¨è¿äº¤ä¿æ°ãå¹³åã§30%ãæå¤§ã§40%ã«ããªã£ã¦ãã¾ã£ã¦ãã¾ããè¿äº¤ä¿æ°25%ã¯è¦ªåéã§ã®ã«ããã«ã¨ããã¬ãã«ãªã®ã§ãããã¯å°ã£ã¦ãã¾ãã¾ãã
ã·ãã¥ã¬ã¼ã·ã§ã³
ã¨ããããã§ãããããæ¬é¡ã§ããã·ãã¥ã¬ã¼ã·ã§ã³ã§ãã©ã¡ã¼ã¿ã¨ãã¦æ¸¡ãã¦ãã rel_lim ã夿´ãããã¨ã§ãè¿äº¤ãé«ã¾ãã®ãé¿ããªããéå£ãç¹æ ãããç¡äºã«ç³ç¥æãèªçããããã¨ãã§ãããè¦ã¦ã¿ã¾ãããã
ã¾ãã¯æ¥æ¬ã®æ³å¾ã§èªãããã¦ãããã¨ãå士ã¾ã§è¨±å®¹ããï¼è¿äº¤ä¿æ°6.25%ãããªãã¡ä¸¡è¦ªéã®è¡ç¸ä¿æ°12.5%ã®ã«ããã«ã¾ã§èªããï¼ã¨ã©ããªãã§ããããã
> res_mat <- generate_population(np = 3, G = 15, rel_lim = 0.125) [1] 1 [1] 2 [1] 3 make_pairs(g, res_mat, rel_mat, rel_lim) ã§ã¨ã©ã¼: Couldn't make any couple!
ãªãã¨ãéä¸ã§ã«ããã«ãä½ããã¨ãã§ããªããªã£ã¦ãã¾ãã¾ãâ¦ããããã㦠seed ã«ããã®ããããã¾ããã®ã§ãããã¤ã試ãã¦ã¿ã¾ãããã
> generate_population(np = 3, G = 15, rel_lim = 0.125, random_seed = 1) [1] 1 [1] 2 [1] 3 make_pairs(g, res_mat, rel_mat, rel_lim) ã§ã¨ã©ã¼: Couldn't make any couple!
> generate_population(np = 3, G = 15, rel_lim = 0.125, random_seed = 2) [1] 1 [1] 2 [1] 3 make_pairs(g, res_mat, rel_mat, rel_lim) ã§ã¨ã©ã¼: Couldn't make any couple!
> generate_population(np = 3, G = 15, rel_lim = 0.125, random_seed = 3) [1] 1 [1] 2 [1] 3 make_pairs(g, res_mat, rel_mat, rel_lim) ã§ã¨ã©ã¼: Couldn't make any couple!
ãã¡ãªããã§ãâ¦ã
ã¡ãªã¿ã«ã§ãããè¿äº¤ã®å¶éããªããã¦ãï¼åä¸ä»£å
ã®ã©ããªè¿ç¸è
ã¨ã®ã«ããã«ãèªãã¦ãï¼ç·å¥³ã®åãã«ãã£ã¦éå£ãåç¶ããªããã¨ãããã¾ããä¾ãã°ä»¥ä¸ã®ããã«ã rel_lim ã1ã¨ãã¦ã seed ã«ãã£ã¦ã¯éä¸ã§æ¢ã¾ã£ã¦ãã¾ãã¾ãã
> res_mat <- generate_population(np = 3, G = 15, rel_lim = 1.0, random_seed = 5) [1] 1 [1] 2 [1] 3 [1] 4 [1] 5 make_pairs(g, res_mat, rel_mat, rel_lim) ã§ã¨ã©ã¼: Couldn't make any couple!
ç½å¤ãã¡ã¯ãã¨ãã¨å³ããæ¡ä»¶ã«ç½®ããã¦ãããã¨ããããã¾ããã
ããã§ã¯éã«ãè¿äº¤ä¿æ°ã®æ¡ä»¶ãä¿ã£ãå ´åã«å¿
è¦ã¨ãªã np ãèãã¦ã¿ã¾ãããã4人ããé çªã«å¢ããã¦ã¿ã¾ãï¼
> res_mat <- generate_population(np = 4, G =15, rel_lim = 0.125) [1] 1 [1] 2 [1] 3 make_pairs(g, res_mat, rel_mat, rel_lim) ã§ã¨ã©ã¼: Couldn't make any couple!
ãã 以ä¸çç¥ ãã
> res_mat <- generate_population(np = 8, G =15, rel_lim = 0.125) [1] 1 [1] 2 [1] 3 make_pairs(g, res_mat, rel_mat, rel_lim) ã§ã¨ã©ã¼: Couldn't make any couple!
9人ã¾ã§å¢ããã¨è¨ç®ããªããªãçµãããªãã£ãããæã¡åã£ã¦ãã¾ãã¾ãããããã®æ¡ä»¶ï¼æ¥æ¬ã®æ³å¾ã«åãããã«ããã«ï¼ã¯ããªãå³ããããã§ããããããåã©ãã9人ç£ãã¨ããã®ãçµæ§é£ãããã§ãããã
è¿äº¤ä¿æ°ã®æ¡ä»¶ãããå°ãç·©ãã12.5%ã¾ã§èªãããã¨ã«ãã¦ã¿ã¾ããããã¡ãªã¿ã«ãã®12.5%ã¨ããã®ã¯ããã»å§ªããã°ã»ç¥ã§ã®ã«ããã«ã«ç¸å½ãã¾ãã
> res_mat <- generate_population(np = 4, G = 15, rel_lim = 0.250) [1] 1 [1] 2 [1] 3 [1] 4 [1] 5 make_pairs(g, res_mat, rel_mat, rel_lim) ã§ã¨ã©ã¼: Couldn't make any couple!
4人ã§ã¯ãã¡ã5人ã§ã¯ï¼
> res_mat <- generate_population(np = 5, G = 15, rel_lim = 0.25) [1] 1 [1] 2 [1] 3 [1] 4 [1] 5 [1] 6 [1] 7
ä»åº¦ã¯è¨ç®ãçµããã¾ããã§ããâ¦ã䏿©å¾ ã£ãã®ã§ããâ¦ã
ãããç¬¬å «ä¸ä»£ã¾ã§é²ããã¨ã¯ç¢ºèªããã®ã§ããããªãå¯è½æ§ãããããã§ããã¤ã¾ãã
- å ¨ã¦ã®ã«ããã«ã5人ã®åã©ããç£ã¿ç¶ãã
- å¤å°ã®è¿äº¤ã許容ããï¼è¿ç¸ã®äººéã¨ãã«ããã«ãå½¢æããï¼
ãã¨ã§ç³ç¥æãç¡äºã«èªçããããã¨ãã§ãããã§ãããã£ããç½å¤ï¼ *2
ãã®ã¨ãã®è¿äº¤ä¿æ°ãã©ããªã£ã¦ãããã確èªãã¦ããã¾ãããã
### 第ä¸ä¸ä»£ã¾ã§ã§æ¢ãã res_mat <- generate_population(np = 5, G = 7, rel_lim = 0.25)
> calc_inb(res_mat) Gen Inbred_Coef 1 1 0.0000000 2 2 0.0000000 3 3 0.0000000 4 4 0.0625000 5 5 0.0937500 6 6 0.1132812 7 7 0.1250000 8 8 0.1191406
è¿äº¤ä¿æ°ã®å¹³åã¯ç¬¬ä¸ä¸ä»£ã§12.5%ã¨ä¸éã«éãã¦ãã¾ãããç¬¬å «ä¸ä»£ã§ã¯ãããã«æ¸å°ãã¦ãã¾ãã
> calc_num_pop(res_mat) Gen Population 1 1 6 2 2 15 3 3 25 4 4 50 5 5 115 6 6 245 7 7 505 8 8 1195
ã¾ããä¸ä»£ãã¨ã®äººæ°ãè¦ãã¨ç¬¬å «ä¸ä»£ã§å¤§å¹ ã«å¢ãã¦ããã®ã§ããã以éã¯è¿äº¤ãé«ãããã¨ã®ãªãã«ããã«ãå®å®ãã¦ä½ãããã¨ãæå¾ ã§ãã¾ãã
ããå°ãããã°ã©ã ããã¾ããããã°ãã®è¾ºãã追ãããããããªãã®ã§ãããå®è£ åã®ç¡ããæ¨ãããâ¦ã
çµããã«
ã¨ããããã§ãå°çã«éãç«ã£ã6人ãå§ç¥ã¨ãã¦éå£ãç¹æ ããããã¨ãæ¬å½ã«ã§ããã®ããæ¤è¨¼ãã¦ã¿ãããã§ãããçµæã¨ãã¦ã¯ãå³ããæ¡ä»¶ãªãããä¸å¯è½ã§ã¯ãªããããã¨ãããã¨ãè¦ãã¦ãã¾ããã
次åã¯ãã®æ¤è¨¼ã«ç¨ãã颿°ã®å ·ä½çãªè§£èª¬ããããã¨æãã¾ãã
*1:https://www8.cao.go.jp/shoushi/shoushika/meeting/taikou_4th/k_1/pdf/ref1.pdf
*2:漫ç»ã§ã¯ç½å¤ä»¥å¤ã®ã¡ã³ãã¼ãå²ã¨ããã«äº¡ããªã£ã¦ããæ§åãªã®ã§ãå®éã«ã¯5人ã¨ããã®ãé£ããã§ããããã©
