Pendekatan umum untuk masalah seperti ini adalah untuk memaksimalkan kemungkinan (diatur) dari data Anda.
Dalam kasus Anda, log-kemungkinan akan terlihat seperti
mana
ϕ ( x ,
LL(y0,a,b,σ0,c,d)=∑i=1nlogϕ(yi,y0+axi+bti,σ0+cxi+dti)
ϕ(x,μ,σ)=12π−−√σe−(x−μ)22σ2
Anda dapat mengkode ekspresi ini menjadi fungsi dalam paket statistik favorit Anda (saya lebih suka Python, R atau Stata, karena saya tidak pernah melakukan pemrograman dalam SPSS). Kemudian Anda dapat memberi makan ke sebuah optimizer numerik, yang akan memperkirakan nilai optimal θ parameter Anda θ = ( y 0 , a , b , σ 0 , c , d ) .θ^θ=(y0,a,b,σ0,c,d)
Jika Anda memerlukan interval kepercayaan, pengoptimal ini juga dapat memperkirakan matriks Hessian dari θ (turunan kedua) di sekitar yang optimal. Teori estimasi kemungkinan maksimum mengatakan bahwa untuk besar n matriks kovarians dari θ dapat diperkirakan sebagai H - 1 .Hθnθ^H−1
Berikut ini contoh kode dengan Python:
import scipy
import numpy as np
# generate toy data for the problem
np.random.seed(1) # fix random seed
n = 1000 # fix problem size
x = np.random.normal(size=n)
t = np.random.normal(size=n)
mean = 1 + x * 2 + t * 3
std = 4 + x * 0.5 + t * 0.6
y = np.random.normal(size=n, loc=mean, scale=std)
# create negative log likelihood
def neg_log_lik(theta):
est_mean = theta[0] + x * theta[1] + t * theta[2]
est_std = np.maximum(theta[3] + x * theta[4] + t * theta[5], 1e-10)
return -sum(scipy.stats.norm.logpdf(y, loc=est_mean, scale=est_std))
# maximize
initial = np.array([0,0,0,1,0,0])
result = scipy.optimize.minimize(neg_log_lik, initial)
# extract point estimation
param = result.x
print(param)
# extract standard error for confidence intervals
std_error = np.sqrt(np.diag(result.hess_inv))
print(std_error)
Perhatikan bahwa rumusan masalah Anda dapat menghasilkan negatif , dan saya harus mempertahankan diri dari itu dengan penggantian brute force terlalu kecil σ dengan 10 - 10 .σσ10−10
Hasil (estimasi parameter dan kesalahan standarnya) yang dihasilkan oleh kode adalah:
[ 0.8724218 1.75510897 2.87661843 3.88917283 0.63696726 0.5788625 ]
[ 0.15073344 0.07351353 0.09515104 0.08086239 0.08422978 0.0853192 ]
You can see that estimates are close to their true values, which confirms correctness of this simulation.