Tôi đang nghiên cứu một vấn đề trong đó tôi có nhiều cặp con đực hiện đang sống i
mà mỗi ni
thế hệ có tổ tiên được cho là thế hệ trước (dựa trên bằng chứng phả hệ) và nơi tôi có thông tin về việc có sự không phù hợp trong kiểu gen nhiễm sắc thể Y của chúng hay không thừa hưởng,xi
= 1 cho không khớp, 0 nếu có khớp). Nếu không có sự không phù hợp, họ thực sự có một tổ tiên chung, nhưng nếu có một kink trong chuỗi là kết quả của một hoặc nhiều vấn đề ngoài hôn nhân (tôi chỉ có thể phát hiện ra dù có hoặc không ít nhất một sự kiện quan hệ cha con thêm như vậy đã xảy ra, tức là biến phụ thuộc được kiểm duyệt). Điều tôi quan tâm là đạt được ước tính khả năng tối đa (cộng với giới hạn tin cậy 95%) không chỉ ở tỷ lệ quan hệ cha con ngoài cặp (EPP) trung bình (xác suất mỗi thế hệ một đứa trẻ sẽ được sinh ra từ giao hợp cặp đôi), nhưng cũng để cố gắng suy luận làm thế nào tỷ lệ quan hệ cha con thêm có thể thay đổi theo chức năng của thời gian (vì nr của các thế hệ tách biệt tổ tiên chung nên có một số thông tin về điều này - khi có sự không phù hợp tôi không ' Mặc dù không biết khi nào các EPP sẽ xảy ra, vì nó có thể là bất cứ nơi nào giữa thế hệ của tổ tiên được cho là và hiện tại, nhưng khi có một trận đấu, chúng tôi chắc chắn không có EPP nào trong các thế hệ trước). Do đó, cả biến nhị thức phụ thuộc và thế hệ / thời gian đồng biến độc lập của tôi đều bị kiểm duyệt. Dựa trên một vấn đề tương tự được đăngỞ đây tôi đã tìm ra làm thế nào tôi có thể ước tính khả năng tối đa của dân số và tỷ lệ sinh con ngoài cặp trung bình phat
cộng với thời gian cộng với 95% khoảng tin cậy trong hồ sơ như sau:
# Function to make overall ML estimate of EPP rate p plus 95% profile likelihood confidence intervals,
# taking into account that for pairs with mismatches multiple EPP events could have occured
#
# input is
# x=vector of booleans or 0 and 1s specifying if there was a mismatch or not (1 or TRUE = mismatch)
# n=vector with nr of generations that separate common ancestor
# output is mle2 maximum likelihood fit with best-fit param EPP rate p
estimateP = function(x, n) {
if (!is.logical(x[[1]])) x = (x==1)
neglogL = function(p, x, n) -sum((log(1 - (1-p)^n))[x]) -sum((n*log(1-p))[!x]) # negative log likelihood, see see /stats/152111/censored-binomial-model-log-likelihood
require(bbmle)
fit = mle2(neglogL, start=list(p=0.01), data=list(x=x, n=n))
return(fit)
}
Ví dụ với một số dữ liệu thí điểm (từ Larmuseau et al. ProcB 2010 ):
n = c(7, 7, 7, 7, 7, 8, 9, 9, 9, 10, 10, 10, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 13, 13, 13, 13, 15, 15, 16, 16, 16, 16, 17, 17, 17, 17, 17, 17, 18, 18, 19, 20, 20, 20, 20, 21, 21, 21, 21, 22, 22, 22, 23, 23, 24, 24, 25, 27, 31) # number of generations/meioses that separate presumed common paternal ancestor
x = c(rep(0,6), 1, rep(0,7), 1, 1, 1, 0, 1, rep(0,20), 1, rep(0,13), 1, 1, rep(0,5)) # whether pair of individuals had non-matching Y chromosomal genotypes
Ước tính khả năng tối đa của dân số và tỷ lệ sinh con thêm cặp trung bình theo thời gian cộng với giới hạn tin cậy 95%:
fit = estimateP(x,n)
c(coef(fit),confint(fit))*100 # estimated p and profile likelihood confidence intervals
# p 2.5 % 97.5 %
# 0.9415172 0.4306652 1.7458847
tức là 0,9% [0,43-1,75% 95% CL] của tất cả trẻ em có nguồn gốc từ một người cha khác với người được cho là.
Sau đó, tôi muốn tiến thêm một bước, và cũng cố gắng ước tính xu hướng thời gian có thể có trong tỷ lệ làm cha thêm cặp p
như là một chức năng của thế hệ ni
(để đơn giản giả sử mối quan hệ tuyến tính giữa tỷ lệ đăng nhập quan sát sự kiện quan hệ cha con thêm và thế hệ), có tính đến việc nếu xảy ra sự không phù hợp thì các sự kiện EPP có thể xảy ra ở bất cứ đâu giữa thế hệ của tổ tiên chung ni
và hiện tại (thế hệ 0), và nếu không có sự không phù hợp nào thì không có sự kiện EPP nào có thể xảy ra bất kỳ thế hệ trước nào cho cặp cá nhân cụ thể đó.
Nếu trước đó, chúng tôi giả sử xác suất một đứa trẻ có nguồn gốc từ một cặp giao hợp là không đổi và nếu là biến ngẫu nhiên bằng khi quan sát thấy sự không khớp của nhiễm sắc thể Y (tương ứng với 1 hoặc nhiều sự kiện EPP) và mặt khác, xác suất quan sát không có sự không phù hợp (nghĩa là ) khi tổ tiên của người cha sống cách đây thế hệ ( ) là , trong khi cơ hội của quan sát một sự kiện EPP là
Trong một tập dữ liệu về các quan sát độc lập của với tổ tiên sống của họ thế hệ trước
dẫn đến khả năng đăng nhập
Có tính đến việc trong mô hình phức tạp hơn của tôi kết hợp động lực học thời gian, tôi muốn là hàm của bây giờ, với , tức là
Sau đó tôi đã thay đổi định nghĩa của hàm khả năng ở trên cho phù hợp và tối đa hóa nó bằng cách sử dụng hàm mle2
từ gói bbmle
:
# ML estimation, assuming that EPP rate p shows a temporal trend
# where log(p/(1-p))=a+b*n
# input is
# x=vector of booleans or 0 and 1s specifying if there was a mismatch or not (1 or TRUE = mismatch)
# n=vector with nr of generations that separate common ancestor
# output is mle2 maximum likelihood fit with best-fit params a and b
estimatePtemp = function(x, n) {
if (!is.logical(x[[1]])) x = (x==1)
pfun = function(a, b, n) exp(a+b*n)/(1+exp(a+b*n)) # we now write p as a function of a, b and n
logL = function(a, b, x, n) sum((log(1 - (1-pfun(a, b, n))^n))[x]) +
sum((n*log(1-pfun(a, b, n)))[!x]) # a and b are params to be estimated, modified from /stats/152111/censored-binomial-model-log-likelihood
neglogL = function(a, b, x, n) -logL(a, b, x, n) # negative log-likelihood
require(bbmle)
fit = mle2(neglogL, start=list(a=-3, b=-0.1), data=list(x=x, n=n))
return(fit)
}
# fitted coefficients
estfit = estimatePtemp(x, n)
cbind(coef(estfit),confint(estfit)) # parameter estimates and profile likelihood confidence intervals
# 2.5 % 97.5 %
# a -3.09054167 -5.3191406 -1.12078519
# b -0.09870851 -0.2396262 0.02848305
summary(estfit)
# Coefficients:
# Estimate Std. Error z value Pr(z)
# a -3.090542 1.057382 -2.9228 0.003469 **
# b -0.098709 0.067361 -1.4654 0.142819
Điều này mang lại cho tôi một ước tính lịch sử tìm kiếm hợp lý về sự phát triển của tỷ lệ EPP theo thời gian:
pfun = function(a, b, n) exp(a+b*n)/(1+exp(a+b*n))
xvals=1:max(n)
par(mfrow=c(1,1))
plot(xvals,sapply(xvals,function (n) pfun(coef(estfit)[1], coef(estfit)[2], n)),
type="l", xlab="Generations ago (n)", ylab="EPP rate (p)")
Tuy nhiên, tôi vẫn còn một chút bế tắc về cách tính khoảng tin cậy 95% trên dự đoán chung của mô hình này. Có ai biết làm thế nào để làm điều đó bằng cơ hội? Có thể sử dụng các khoảng dự đoán dân số (bằng cách lấy lại các tham số theo mức độ phù hợp theo phân phối chuẩn nhiều biến số) (hoặc phương thức delta cũng sẽ hoạt động?)? Và ai đó có thể nhận xét về việc logic của tôi ở trên là chính xác? Tôi cũng tự hỏi liệu loại mô hình nhị thức bị kiểm duyệt này có được biết đến dưới một tên tiêu chuẩn nào đó trong tài liệu không, và liệu có ai biết bất kỳ công trình nào được công bố để thực hiện các loại tính toán ML này theo loại mô hình này không? (Tôi có cảm giác rằng vấn đề phải khá chuẩn và tương ứng với điều gì đó đã được thực hiện, nhưng dường như không thể tìm thấy bất cứ điều gì ...)
[Giấy tờ PS có thêm nền tảng về chủ đề / vấn đề này có sẵn ở đây và đây]