<- function(n, mu, sigma, S){
comparare_estimatori # Initializam
<- numeric(S)
mu1 <- numeric(S)
mu2 <- numeric(S)
mu3
# repetam experimentul de S ori
for (i in 1:S){
<- rnorm(n, mean = mu, sd = sigma)
x
# calculam estimatorii
<- mean(x)
mu1[i] <- median(x)
mu2[i] <- (min(x)+max(x))/2
mu3[i]
}
return(list(M = cbind(mu1 = mu1, mu2 = mu2, mu3 = mu3),
vM = cbind(var_mu1 = var(mu1), var_mu2 = var(mu2), var_mu3 = var(mu3))))
}
Proprietăți ale estimatorilor
Exemplu de comparare a trei estimatori
Exercițiul 1 Fie \(X_1,X_2,\ldots,X_n\) un eșantion de volum \(n\) dintr-o populație normală de medie \(\mu\) și varianță \(\sigma^2\). Atunci
\[ \hat{\mu}_1 = \frac{1}{n}\sum_{i=1}^{n}X_i, \quad \hat{\mu}_2 = M_n\,(\text{mediana}\,), \quad \hat{\mu}_3 = \frac{X_{(1)} + X_{(n)}}{2} \]
sunt trei estimatori punctuali pentru \(\mu\). Creați o funcție care să ilustreze cum sunt repartizați cei trei estimatori. Începeți cu \(n = 10\), \(\mu = 0\) și \(\sigma^2 = 1\) și trasați histogramele pentru a-i compara. Ce se întâmplă dacă schimbați \(n\), \(\mu\) sau \(\sigma^2\) ?
Soluție. Vom crea o funcție numită comparare_estimatori
care va construi repartițiile celor trei estimatori:
Ca exemplu să considerăm \(\mu = 3\) și \(\sigma^2 = 2\):
# Exemplu
<- 3
mu <- 2
sigma
<- 1000
n <- 10000
N
<- comparare_estimatori(n, mu, sigma, N)
mu_hat
# variantele celor trei estimatori
$vM mu_hat
var_mu1 var_mu2 var_mu3
[1,] 0.00404305 0.00646494 0.2425589
# varianta teoretica a lui \bar{X}_n
^2/n sigma
[1] 0.004
Pentru a ilustra grafic histogramele celor trei estimatori, considerăm \(\mu = 0\) și \(\sigma^2 = 1\) și avem:
<- 0
mu <- 1
sigma
<- 1000
n <- 10000
S
<- comparare_estimatori(n, mu, sigma, S)
a
par(mfrow = c(1,3))
hist(a$M[,1], freq=FALSE, xlab=expression(hat(mu)[1]),
col="gray80", border="white",
main = expression(paste("Histograma lui ", hat(mu)[1])),
ylab = "Densitatea")
abline(v=mu, col = "brown3", lty = 2)
hist(a$M[,2], freq=FALSE, xlab=expression(hat(mu)[2]),
col="gray80", border="white",
main = expression(paste("Histograma lui ", hat(mu)[2])),
ylab = "Densitatea")
abline(v=mu, col = "brown3", lty = 2)
hist(a$M[,3], freq=FALSE, xlab=expression(hat(mu)[3]),
col="gray80", border="white",
main = expression(paste("Histograma lui ", hat(mu)[3])),
ylab = "Densitatea")
abline(v=mu, col = "brown3", lty = 2)
Ilustrarea consistenței unui estimator
Exercițiul 2 Fie \(X_1,X_2,\ldots,X_n\) un eșantion de volum \(n\) dintr-o populație \(Pois(\theta)\). Ilustrați grafic consistența estimatorului \(\hat{\theta}_n = S_n^2\) trasând histograma repartiției lui \(\hat{\theta}_n\) pentru \(n\in\{10,25,50,100\}\). Ce observați?
Soluție. Considerăm funcția pois_est
care pentru \(\theta\) fixat simulează repartiția estimatorului \(\hat{\theta}_n\):
<- function(n, theta, S){
pois_est1 # initializare
<- numeric(S)
sigma1
for (i in 1:S){
<- rpois(n, theta)
x <- var(x)
sigma1[i]
}# afisam varianta estimatorului
print(paste0("Pentru n = ", n," varianta estimatorului este ", var(sigma1)))
return(sigma1)
}
Considerând \(\theta = 3\) și \(n\in\{10,25,50,100\}\) avem:
<- 3
theta
par(mfrow=c(2,2))
<- c(10, 25, 50, 100)
vals
for (i in vals){
<- pois_est1(i, theta, 50000)
a hist(a, freq=FALSE,
xlab=expression(hat(theta)[n]),
col="gray80", border="white",
main = paste0("n = ", i), xlim = c(0,12),
ylab = "Densitatea")
abline(v=theta, col = "brown3", lty = 2)
}
[1] "Pentru n = 10 varianta estimatorului este 2.2957469740778"
[1] "Pentru n = 25 varianta estimatorului este 0.870294631741341"
[1] "Pentru n = 50 varianta estimatorului este 0.420902500419613"
[1] "Pentru n = 100 varianta estimatorului este 0.213758498328129"
Exercițiul 3 Ce se întâmplă dacă în loc de \(\hat{\theta}_n\) considerăm estimatorul \(\tilde{\theta}_n = \bar{X}_n\) sau estimatorul \(\dot{\theta}_n = \sqrt{\bar{X}_n S_n^2}\) ?
Soluție. Considerăm acum funcția est_Poisson
care va simula repartițiile celor trei estimatori și varianțele acestora:
<- function(n = 10, theta = 1, N = 1000){
est_Poisson <- matrix(0, nrow = N, ncol = 3)
e
for (i in 1:N){
<- rpois(n, theta)
x
1] <- mean(x)
e[i, 2] <- var(x)
e[i, 3] <- sqrt(e[i, 1] * e[i, 2])
e[i,
}
return(list(e_Pois = e,
v_Pois = c(var(e[, 1]), var(e[, 2]), var(e[, 3]))))
}
Ilustrăm grafic repartițiile de eșantionare pentru cei trei estimatori considerând \(\theta = 3\) și \(n\in\{10,25,50,100\}\) și observăm cum acestea se concentrează în jurul parametrului \(\theta\) pe care îl estimează:
<- 3
theta <- c(10, 25, 50, 100)
n
<- 10000
N
par(mfrow = c(3, length(n)))
par(mai=c(0.5,0.5,0.5,0.5), bty = "n")
# par(fig = c(0, 1, 0, 0.45))
<- c("hat(theta)[n]",
titles "tilde(theta)[n]",
"dot(theta)[n]")
for (i in 1:3){
for (j in 1:length(n)){
<- est_Poisson(n[j], theta, N)$e_Pois
e_hat
hist(e_hat[, i], probability = TRUE,
main = paste("n =", n[j]),
xlab = str2lang(titles[i]),
ylab = "Densitate",
xlim = c(0, 12))
abline(v = theta,
col = "red",
lwd = 2,
lty = 2)
} }
Observăm în figura de mai jos convergența varianțelor celor trei estimatori către \(0\):
# variantele se duc la 0
<- seq(10, 1000, 10)
n
<- matrix(0, nrow = length(n), ncol = 3)
ve
for(i in 1:length(n)){
<- est_Poisson(n[i], theta, N)$v_Pois
ve[i, ]
}
matplot(ve,
type = "l",
lwd = 2,
col = c(myred, myblue, mygreen),
bty = "n")
legend("topright",
legend = c(expression(hat(theta)[n]), expression(tilde(theta)[n]), expression(dot(theta)[n])),
col = c(myred, myblue, mygreen),
lty = 1,
lwd = 2,
bty = "n",
seg.len = 1.5)
Estimare prin metoda verosimilității maxime
Exemplu: EVM nu este întotdeauna media eșantionului chiar dacă \(\mathbb{E}_{\theta}[\hat{\theta}_n] = \theta\)
Exercițiul 4 Fie \(X_1,X_2,\ldots,X_n\) un eșantion de talie \(n\) dintr-o populație Laplace \(L(\theta, c)\) a cărei densitate este dată de formula
\[ f_{\theta, c}(x) = \frac{1}{2c}e^{-\frac{|x-\theta|}{c}}, \quad -\infty<x<\infty \]
Ilustrați grafic densitatea și funcția de repartiție a repartiției Laplace pentru diferite valori ale parametrilor \(\theta\) (de locație) și \(c\) (de scală), e.g. \(\theta\in\{0, 3\}\) și \(c\in\{1,2,3,4\}\).
Determinați estimatorul de verosimilitate maximă \(\hat{\theta}_n\) pentru \(\theta\).
Soluție. Avem:
- Se poate arăta cu ușurință (am văzut în ?@exr-stat-sim-minv-cont-e7) că funcția de repartiție a repartiției \(\mathrm{Laplace}(\theta, c)\) este
\[ F_{\theta, c}(x) = \frac{1}{2} + \frac{1}{2}\operatorname{sgn}(x-\theta)\left(1-e^{-\frac{|x-\theta|}{c}}\right) = \left\{\begin{array}{ll} \frac{1}{2}e^{-\frac{|x-\theta|}{c}}, & x<\theta\\ 1-\frac{1}{2}e^{-\frac{|x-\theta|}{c}}, & x\geq\theta \end{array}\right. \]
În Figura 5 ilustrăm grafic pentru o serie de parametrii \((\theta,c)\) densitatea și funcția de repartiție pentru repartiția \(\mathrm{Laplace}(\theta, c)\):
- Pentru a determina estimatorul de verosimilitate maximă să observăm că funcția de verosimilitate este
\[ L_n(\theta|\mathbf{X}) = \prod_{i=1}^{n}\left(\frac{1}{2c}e^{-\frac{|X_i-\theta|}{c}}\right) = \frac{1}{(2c)^n}e^{-\sum_{i=1}^{n}\frac{|X_i-\theta|}{c}} \]
și acesta ia valoarea maximă pentru toate valorile lui \(\theta\) care minimizează funcția de la exponent
\[ M(\theta) = \sum_{i=1}^{n}|X_i-\theta| = \sum_{i=1}^{n}|X_{(i)}-\theta|, \]
unde \(x_{(i)}\) este statistica de ordine de rang \(i\). Se poate vedea că funcția \(M(\theta)\) este continuă și afină pe porțiuni din Figura 6 de mai jos (pentru un eșantion de volum \(10\) dintr-o populație \(\mathrm{Laplace}(3,1)\) - creați o funcție care vă permite să generați observații repartizate Laplace).
<- function (n, mu = 0, b = 1)
rLaplace
{<- runif(n) - 0.5
u <- mu - b * sign(u) * log(1 - 2 * abs(u))
x return(x)
}
<- 3
theta0 <- 1
b
set.seed(333)
<- rLaplace(10, mu = theta0, b = b)
x
<- function(x, theta){
M_theta sapply(theta, function(t){sum(abs(x-t))})
}
<- seq(min(x), max(x), length.out = 500)
theta <- M_theta(x, theta)
M
plot(theta, M, type = "l",
xlab = TeX("$\\theta$"),
ylab = TeX("$M(\\theta)$"),
bty = "n", lwd = 2,
col = myblue)
points(x, M_theta(x, x),
pch = 16,
cex = 1.2,
col = myred)
Observăm că dacă \(\theta\) se află între statistica de ordine de rang \(m\) și cea de rang \(m+1\), i.e. \(X_{(m)}\leq \theta\leq X_{(m+1)}\), atunci am avea că \(X_{(i)} \leq X_{(m)} \leq \theta\) dacă \(i\leq m\) și \(\theta\leq X_{(m+1)}\leq X_{(i)}\) dacă \(m+1\leq i\leq n\), prin urmare
\[ M(\theta) = \sum_{i=1}^{n}|X_{(i)}-\theta| = \sum_{i=1}^{m}(\theta - X_{(i)}) + \sum_{i=m+1}^{n}(X_{(i)}-\theta) \]
deci dacă \(X_{(m)}< \theta< X_{(m+1)}\) atunci
\[ \frac{d}{d\theta}M(\theta) = m - (n-m) = 2m-n. \]
Astfel, \(M'(\theta)<0\) (și \(M(\theta)\) este descrescătoare) dacă \(m<\frac{n}{2}\) și \(M'(\theta)>0\) (și \(M(\theta)\) este crescătoare) dacă \(m>\frac{n}{2}\). Dacă \(n = 2k+1\) este impar, atunci \(\frac{n}{2} = k +\frac{1}{2}\) iar \(M(\theta)\) este strict descrescătoare dacă \(\theta<X_{(k+1)}\) și strict crescătoare dacă \(\theta>X_{(k+1)}\) de unde deducem că minimul se atinge pentru \(\theta = X_{(k+1)}\).
Dacă \(n = 2k\) este par atunci, raționând asemănător, deducem că \(M(\theta)\) este minimizată pentru orice punct din intervalul \((X_{(k)}, X_{(k+1)})\), deci orice punct din acest interval va maximiza și funcția de verosimilitate. Prin convenție alegem estimatorul de verosimilitate maximă să fie mijlocul acestui interval, i.e. \(\theta = \frac{X_{(k)} + X_{(k+1)}}{2}\).
Prin urmare am găsit că estimatorul de verosimilitate maximă este mediana eșantionului
\[ \hat{\theta}_n = \left\{\begin{array}{ll} X_{\left(\frac{n+1}{2}\right)}, & \text{$n$ impar}\\ \frac{X_{\left(\frac{n}{2}\right)} + X_{\left(\frac{n}{2}+1\right)}}{2}, & \text{$n$ par}\\ \end{array}\right. \]
În Figura 7 avem ilustrat logaritmul funcției de verosimilitate pentru un eșantion de volum par (stânga) și unul de volum impar (dreapta):
<- 0
theta0 <- 1
b
<- function(x, theta, b){
logLikelihoodLaplace sapply(theta, function(t){
-length(x)*log(2*b)-sum(abs(x-t))})
}
par(mfrow = c(1,2))
# Esantion par
<- 10
n
set.seed(333)
<- rLaplace(n, mu = theta0, b = b)
x
<- seq(-1,1, length.out = 100)
theta
<- logLikelihoodLaplace(x, theta, b)
y
plot(theta, y, type = "l",
bty = "n", lwd = 2,
col = myblue,
xlab = TeX("$\\theta$"),
ylab = TeX("$l(\\theta | x)$"),
main = paste0("Esantion par\n n = ", n),
cex.main = 0.8)
points(x, logLikelihoodLaplace(x, x, b),
pch = 16,
col = myred,
cex = 0.7)
# Esantion impar
<- 13
n
set.seed(1234)
<- rLaplace(n, mu = theta0, b = b)
x
<- seq(-1,1, length.out = 100)
theta
<- logLikelihoodLaplace(x, theta, b)
y
plot(theta, y, type = "l",
bty = "n", lwd = 2,
col = myblue,
xlab = TeX("$\\theta$"),
ylab = TeX("$l(\\theta | x)$"),
main = paste0("Esantion impar\n n = ", n),
cex.main = 0.8)
points(x, logLikelihoodLaplace(x, x, b),
pch = 16,
col = myred,
cex = 0.7)
Exemplu de EVM determinat prin soluții numerice
Exercițiul 5 Fie \(X_1,X_2,\ldots,X_n\) un eșantion de talie \(n\) dintr-o populație logistică a cărei densitate este dată de formula
\[ f_{\theta}(x) = \frac{e^{-(x-\theta)}}{\left(1+e^{-(x-\theta)}\right)^2}, \quad x\in\mathbb{R},\, \theta\in\mathbb{R} \]
Determinați estimatorul de verosimilitate maximă \(\hat{\theta}_n\) pentru \(\theta\).
Soluție. Densitatea de repartiție și funcția de repartiție a repartiției logistice sunt ilustrate mai jos (în R
se folosesc funcțiile: rlogis
, dlogis
, plogis
și respectiv qlogis
):
Observăm că funcția de verosimilitate este dată de
\[ L_n(\theta|\mathbf{x}) = \prod_{i=1}^{n}f_{\theta}(x_i) = \prod_{i=1}^{n}\frac{e^{-(x_i-\theta)}}{\left(1+e^{-(x_i-\theta)}\right)^2} \]
iar logaritmul funcției de verosimilitate este
\[ l_n(\theta|\mathbf{x}) = \sum_{i=1}^{n}\log{f_{\theta}(x_i)} = n\theta - n\bar{x}_n - 2\sum_{i=1}^{n}\log{\left(1+e^{-(x_i-\theta)}\right)}. \]
Pentru a găsi valoarea lui \(\theta\) care maximizează logaritmul funcției de verosimilitate și prin urmare a funcției de verosimilitate trebuie să rezolvăm ecuația \(l'(\theta|\mathbf{x}) = 0\), unde derivata lui \(l(\theta|\mathbf{x})\) este
\[ l_n'(\theta|\mathbf{x}) = n - 2\sum_{i = 1}^{n}\frac{e^{-(x_i-\theta)}}{1+e^{-(x_i-\theta)}} \]
ceea ce conduce la ecuația
\[ \sum_{i = 1}^{n}\frac{e^{-(x_i-\theta)}}{1+e^{-(x_i-\theta)}} = \frac{n}{2} \tag{$\star$} \]
Chiar dacă această ecuație nu se simplifică, se poate arăta că această ecuația admite soluție unică. Observăm că derivata parțiala a membrului drept în (\(\star\)) devine
\[ \frac{\partial }{\partial \theta}\sum_{i = 1}^{n}\frac{e^{-(x_i-\theta)}}{1+e^{-(x_i-\theta)}} = \sum_{i = 1}^{n}\frac{e^{-(x_i-\theta)}}{\left(1+e^{-(x_i-\theta)}\right)^2}>0 \]
ceea ce arată că membrul stâng este o funcție strict crescătoare în \(\theta\). Cum membrul stâng în (\(\star\)) tinde spre \(0\) atunci când \(\theta\to-\infty\) și spre \(n\) pentru \(\theta\to\infty\) deducem că ecuația (\(\star\)) admite soluție unică (vezi graficul de mai jos).
Cum nu putem găsi o soluție a ecuației \(l_n'(\theta|\mathbb{x}) = 0\) sub formă compactă, este necesar să apelăm la metode numerice. O astfel de metodă numerică este binecunoscuta metodă a lui Newton-Raphson. Metoda presupune să începem cu o valoare (soluție) inițială \(\hat{\theta}^{(0)}\) și să alegem, plecând de la aceasta, o nouă valoare \(\hat{\theta}^{(1)}\) definită prin
\[ \hat{\theta}^{(1)} = \hat{\theta}^{(0)} - \frac{l_n'\left(\hat{\theta}^{(0)}\right)}{l_n''\left(\hat{\theta}^{(0)}\right)}, \]
adică \(\hat{\theta}^{(1)}\) este intersecția cu axa absciselor a tangentei în punctul \(\left(\hat{\theta}^{(0)}, l_n'\left(\hat{\theta}^{(0)}\right)\right)\) la graficul funcției \(l_n'(\theta)\). Ideea este de a itera procesul până când soluția converge, cu alte cuvinte pornind de la o valoare rezonabilă de start \(\hat{\theta}^{(0)}\) la pasul \(k+1\) avem
\[ \hat{\theta}^{(k+1)} = \hat{\theta}^{(k)} - \frac{l_n'\left(\hat{\theta}^{(k)}\right)}{l_n''\left(\hat{\theta}^{(k)}\right)} \]
și oprim procesul atunci când \(k\) este suficient de mare și/sau \(\left|\hat{\theta}^{(k+1)} - \hat{\theta}^{(k)}\right|\) este suficient de mic. Următorul grafic ilustrează grafic algoritmul lui Newton:
Obs: Singurul lucru care se schimbă atunci când trecem de la scalar la vector, este funcția \(l_n(\theta)\) care acum este o funcție de \(p>1\) variabile, \(\theta = (\theta_1, \theta_2, \ldots, \theta_p)^{\intercal}\in\mathbb{R}^p\). În acest context \(l'(\theta)\) este un vector de derivate parțiale iar \(l''(\theta)\) este o matrice de derivate parțiale de ordin doi. Prin urmare iterațiile din metoda lui Newton sunt
\[ \hat{\theta}^{(k+1)} = \hat{\theta}^{(k)} - \left[l_n''\left(\hat{\theta}^{(k)}\right)\right]^{-1}l_n'\left(\hat{\theta}^{(k)}\right) \]
unde \([\cdot]^{-1}\) este pseudoinversa unei matrice.
Funcția de mai jos implementează metoda lui Newton pentru cazul multidimensional:
# Metoda lui Newton
<- function(f, df, x0, eps=1e-08, maxiter=1000, ...) {
newton # in caz ca nu e incarcat pachetul sa putem accesa pseudoinversa
if(!exists("ginv")) library(MASS)
<- x0
x <- 0
k
repeat {
<- k + 1
k
<- x - as.numeric(ginv(df(x, ...)) %*% f(x, ...))
x.new
if(mean(abs(x.new - x)) < eps | k >= maxiter) {
if(k >= maxiter) warning("S-a atins numarul maxim de iteratii!")
break
}<- x.new
x
}<- list(solution = x.new, value = f(x.new, ...), iter = k)
out
return(out)
}
Să presupunem că am observat următorul eșantion de volum \(20\) din repartiția logistică:
[1] 6.996304 9.970107 12.304991 11.259549 6.326912 5.378941 4.299639
[8] 8.484635 5.601117 7.094335 6.324731 6.868456 9.753360 8.042095
[15] 8.227830 10.977982 7.743096 7.722159 8.562884 6.968356
set.seed(112)
<- rlogis(20, location = 7.5)
x
<- length(x)
n <- function(theta) n - 2 * sum(exp(theta - x) / (1 + exp(theta - x)))
dl <- function(theta) {-2 * sum(exp(theta - x) / (1 + exp(theta - x))^2)}
ddl
<- newton(dl, ddl, median(x)) logis.newton
și aplicând metoda lui Newton găsim estimatorul de verosimilitate maximă \(\hat{\theta}_n=\) 7.7933 după numai 3 iterații (datele au fost simulate folosind \(\theta = 7.5\)).