Không có vấn đề nhận dạng, ngoại trừ trong ý nghĩa tầm thường rằng bất kỳ một mô hình cụ thể nào cũng có thể có hai mô tả. Vấn đề thực sự có vẻ là khó khăn trong việc lắp mô hình - nhưng đó là do cách các mô hình được tham số hóa thay vì thiếu nhận dạng.
Vấn đề này có một giải pháp tầm thường không kém: tuyên bố, mà không mất bất kỳ tính tổng quát nào, rằng β≥δ. Nếu bạn muốn thực sự cầu kỳ, cũng nhấn mạnh rằng nếuβ=δ, sau đó α≥γ.
Thật không may, điều đó đòi hỏi bất kỳ thủ tục nào để phù hợp với mô hình để tôn trọng các ràng buộc này. Giới thiệu một ràng buộc ở đây không phải là quá tệ, bởi vì ứng dụng này rõ ràng là tất cả các tham số đều không âm: dù sao không gian tham số đã có ranh giới rõ ràng. Bao gồm một ràng buộc nữa sẽ không buộc bất kỳ thay đổi nào trong cách chúng ta tiến hành lắp mô hình.
Một phương pháp nổi tiếng để chuyển đổi tối ưu hóa bị ràng buộc thành một phương pháp không bị ràng buộc là xác định lại vấn đề để trong không gian tham số mới, các ranh giới được đẩy ra vô cùng. Có nhiều cách để thực hiện điều đó ở đây. Việc xem xét ý nghĩa của các tham số sẽ hướng dẫn chúng ta. Đặc biệt,ν=α+γ là mức tối đa đạt được của hàm
t → g( T ; α , β, γ, δ) = α ( 1 -e- βt) +Γ( 1 -e- δt)
cho
t ≥ 0. Được
ν, sau đó nhất thiết phải
0 ≤ alpha ≤ v và
γ= ν- α. Khi các giá trị không âm tổng hợp thành một tổng thể cố định, nó thường hoạt động để tham số hóa tỷ lệ của chúng theo tổng số theo các góc: đặt một tỷ lệ là cosin bình phương và một tỷ lệ khác là sin bình phương. Hơn nữa, một cách đơn giản để đảm bảo
ν,
βvà
δtích cực là làm cho chúng theo cấp số nhân - nghĩa là sử dụng logarit của chúng làm tham số. Cuối cùng, để thực thi
δ≤ β, bộ
δ là cosin bình phương của một số lần góc
β. Do đó, chúng tôi có thể xác định lại vấn đề bằng cách khớp chức năng
t → f( t ; n , a , b , d) = =en( 1 - cos( một)2điểm kinh nghiệm( -ebt ) - tội lỗi( một)2điểm kinh nghiệm( -eb cos( d)2t ) ) .
Từ ước tính của các tham số này (nhân tiện, không thể "nhận dạng" do sự mơ hồ trong các góc một và d) bạn có thể khôi phục những cái ban đầu như
αβγδ= =encos( một)2= =eb= =entội( một)2= =ebcos( d)2.
Các thuộc tính của hàm số mũ và hàm số đảm bảo tất cả các ràng buộc giữ: α > 0, β≥ δ> 0và γ> 0. (Vì phao chính xác kép có thể trở nên nhỏ trong thiên văn, không có sự phân biệt thực tế giữa> và ≥ trong những ràng buộc này.)
Theo nghĩa được xác định rõ này, mô hình có thể được xác định mặc dù các tham số được sử dụng để phù hợp với nó không thể nhận dạng được.
Mặc dù người ta có thể sử dụng MCMC, nhưng nếu mục đích chỉ là phù hợp với đường cong thì việc sử dụng một bộ giải số như Newton-Raphson sẽ đơn giản hơn. Bí quyết là tìm một giá trị khởi đầu tốt . Tối đa củayTôi sẽ được đánh giá quá cao en; bắt đầu, có lẽ vớin = nhật ký( tối đa (yTôi) / 2 ). Bạn có thể bắt đầu bằng , giả sử mỗi thành phần đóng góp đáng kể cho toàn bộ. Đưa ra một số dự đoán hợp lý về và dựa trên tốc độ phân rã dự kiến. Chẳng hạn, nếu phạm vi của là hợp lý, thì lấy là một phần nhỏ nhất của lớn nhất và có thể tùy ý chọn ; có thể sử dụng một giá trị bắt đầu nhỏ hơn. (Bạn sẽ thường nhận được khác nhau giá trị cho các ước lượng tham số tùy thuộc vào những lựa chọn này, nhưng thông thường họ sẽ không đáng kể ảnh hưởng đến chức năng bản thân .)a = π/ 4ebedtbtd= π/ 4f
Trong nhiều trường hợp, phương pháp này hoạt động rất tốt. Ngoại trừ khi phương sai của các lỗi có cùng kích thước với hoặc lớn hơn (trong đó sẽ khó có thể nhận ra bất kỳ tín hiệu nào nếu không có một lượng lớn dữ liệu), sự phù hợp hoạt động ngay cả với lượng dữ liệu nhỏ: tất cả nó cần là bốn.tối đayTôi
Lưu ý rằng bất kể mô hình phù hợp như thế nào, thông thường sẽ có sự không chắc chắn lớn trong các tham số: họ đường cong này về cơ bản là một nhiễu loạn nhỏ của họ hàm mũ hai tham số . Trong nhiều trường hợp, sau đó, hai trong số các tham số (tương ứng với biên độ và tốc độ phân rã dài nhất ) có thể được xác định với độ chính xác hợp lý, nhưng hai tham số khác, phản ánh các biến đổi nhỏ từ hình dạng hàm mũ này, thường sẽ không chắc chắn.t → Ae- B tMộtB
Hình vẽ cho thấy một ví dụ về sự phù hợp đầy thách thức. Các đường cong cơ bản được hiển thị bằng màu đen. Cuối cùng, nó đạt tối đa , rất chậm. Chỉ có điểm dữ liệu có sẵn, được vẽ dưới dạng các chấm màu xám. Độ lệch chuẩn của các lỗi ngẫu nhiên là , một tỷ lệ khá lớn của mức tối đa đó. Nhiều lỗi là dương tính, khiến đường cong được trang bị màu đỏ cao hơn một chút. Hai thành phần hàm mũ của đường cong được trang bị được hiển thị dưới dạng các đường màu xám đứt nét và chấm. Người ta cho thấy sự gia tăng nhanh chóng đến ngưỡng vào thời điểm ; cái kia phản ánh số mũ khác tăng lên ngưỡng4 / 3241 / 21 / 3t = 11. (Bạn sẽ có ít hy vọng tái tạo "vai" sắc nét đó gần cho đến khi bạn có điểm dữ liệu trở lên: hãy thử bằng cách thay đổi mã bên dưới.)t = 11000n
Thành công của bạn trong bất kỳ vấn đề cụ thể nào sẽ phụ thuộc vào mức độ của các lỗi; phạm vi giá trị của được lấy mẫu; làm thế nào những giá trị đó được đặt cách nhau; có bao nhiêu giá trị có sẵn; và lựa chọn các giá trị bắt đầu. Tuy nhiên, điều này dường như là một vấn đề có thể nói chung, với các giải pháp có thể thu được nhanh chóng. Hơn nữa, bất kỳ fitter khả năng tối đa nào cũng sẽ tiến hành tương tự để giảm thiểu tổng bình phương của phần dư - và, ngoài ra, sẽ cung cấp các vùng tin cậy cho các tham số.t
Đây là R
mã tôi đã sử dụng để kiểm tra đề xuất này. Nó sẽ tái tạo hình và dễ dàng sửa đổi - thay đổi giá trị của các biến lúc đầu - để nghiên cứu dữ liệu trông giống như bất kỳ thứ gì bạn có thể có.
#
# Describe the underlying model
#
set.seed(17)
alpha <- 1
beta <- 2
gamma <- 1/3
delta <- 1/10
sigma <- 1/2 # Error SD.
n <- 24
x.max <- 20 # Largest value of t.
#
# The original parameterization.
#
g <- function(x, alpha, beta, gamma, delta) {
alpha * (1 - exp(-beta * x)) + gamma * (1 - exp(-delta * x))
}
#
# The re-parameterization. `f.1` and `f.2` are the two exponential components.
#
f <- function(x, nu, t.a, log.b, t.d) {
n <- exp(nu)
a <- cos(t.a)^2
alpha <- n*a
gamma <- n*(1-a)
beta <- exp(log.b)
delta <- cos(t.d)^2 * beta
n - alpha * exp(-beta * x) - gamma * exp(-delta * x)
}
f.1 <- function(x, nu, t.a, log.b, t.d) {
n <- exp(nu)
a <- cos(t.a)^2
alpha <- n*a
beta <- exp(log.b)
alpha * (1 - exp(-beta * x))
}
f.2 <- function(x, nu, t.a, log.b, t.d) {
n <- exp(nu)
a <- cos(t.a)^2
gamma <- n*(1-a)
beta <- exp(log.b)
delta <- cos(t.d)^2 * beta
gamma * (1 - exp(-delta * x))
}
#
# The objective to minimize is the mean squared residual.
# This is equivalent to finding the MLE for Gaussian errors.
#
obj <- function(theta, x, y) {
crossprod(y - f(x, theta[1], theta[2], theta[3], theta[4])) / length(x)
}
#
# Create data and plot them.
#
x <- seq(0, x.max, length.out=n)
y <- g(x, alpha, beta, gamma, delta) + rnorm(length(x), 0, sigma)
plot(x,y, pch=16, col="#00000040", xlab="t")
#
# Fit the curve.
#
theta <- c(nu=log(max(y)/2), t.a=pi/4, log.b=log(max(x)/10), t.d=pi/4)
fit <- nlm(obj, theta, x=x, y=y, gradtol=1e-14)
theta.hat <- fit$estimate
#
# Plot relevant curves.
#
curve(g(x, alpha, beta, gamma, delta), add=TRUE, lwd=2)
curve(f(x, theta.hat[1], theta.hat[2], theta.hat[3], theta.hat[4]),
add=TRUE, col="Red", lwd=2)
curve(f.1(x, theta.hat[1], theta.hat[2], theta.hat[3], theta.hat[4]),
add=TRUE, col="Gray", lty=2, lwd=2)
curve(f.2(x, theta.hat[1], theta.hat[2], theta.hat[3], theta.hat[4]),
add=TRUE, col="Gray", lty=3, lwd=2)