Estoy intentando trazar la función de probabilidad logarítmica de la distribución de Cauchy para valores variables de theta (parámetro de ubicación). Estas son mis observaciones:
obs<-c(1.77,-0.23,2.76,3.80,3.47,56.75,-1.34,4.24,3.29,3.71,-2.40,4.53,-0.07,-1.05,-13.87,-2.53,-1.74,0.27,43.21)
Aquí está mi función de probabilidad logarítmica:
ll_c<-function(theta,x_values){
n<-length(x_values)
logl<- -n*log(pi)-sum(log(1+(x_values-theta)^2))
return(logl)
}
y he intentado hacer una trama usando este código:
x<-seq(from=-10,to=10,by=0.1);length(x)
theta_null<-NULL
for (i in x){
theta_log<-ll_c(i,counts)
theta_null<-c(theta_null,theta_log)
}
plot(theta_null)
El gráfico no se ve bien y, por alguna razón, la longitud de x y theta_null difiere.
------------------------------------
Supongo que theta es su parámetro de ubicación (la escala está establecida en 1 en mi ejemplo). Debería obtener el mismo resultado utilizando una distribución t con 1 gl y desplazando las observaciones en theta. Dejé algunos comentariosn el código como guía.
obs = c(1.77,-0.23,2.76,3.80,3.47,56.75,-1.34,4.24,3.29,3.71,-2.40,4.53,-0.07,-1.05,-13.87,-2.53,-1.74,0.27,43.21)
ll_c=function(theta, obs)
{
# Compute log-lik for obs and a value of thet (location)
logl= sum(dcauchy(obs, location = theta, scale = 1, log = T))
return(logl)
}
# Loop for possible values of theta(obs given)
x = seq(from=-10,to=10,by=0.1)
ll = NULL
for (i in x)
{
ll = c(ll, ll_c(i, obs))
}
# Plot log-lik vs possible value of theta
plot(x, ll)
2
¡Gracias! ¿Podría explicar cómo el bucle for busca posibles valores theta dadas las observaciones?
- nombre de usuario97
27/03/2021 a las 13:42
Los posibles valores de theta están en el vector x. El bucle pasa por los valores del vector x.y calcula la probabilidad para los i-ésimos valores posibles (este es el significado del bucle para i en x). Las observaciones están en el vector obs (como en su código). Tenga en cuenta también que la forma en que escribió el bucle en la pregunta (lo seguí en la respuesta) no es la más eficiente; considere la asignación previa.
- Gi_F.
27/03/2021 a las 13:52
------------------------------------
Es difícil decir exactamente lo que estás experimentando sin más información. Pero haré una suposición fundamentada.
En primer lugar, podemos simplificar esto mucho usando la familia *tde funciones para la distribución t, ya que la distribución de Cauchy es solo la distribución t con df = 1. Entonces, tus cálculos podrían haberse realizado usando
for(i in ncp)
theta_null <- c(theta_null, sum(dt(values, 1, i, log = TRUE)))
Tenga en cuenta que multiplicar por n en realidad no importa a efectos prácticos. Generalmente estamos interesados en minimizar/maximizar la probabilidad, en cuyo caso todas las constantes son irrelevantes.
Ahora, si utilizamos este enfoque, podemos notar algo rápidamente imprimiendo los valores:
print(head(theta_null))
[1] -Inf -Inf -Inf -Inf -Inf -Inf
Así que supongo que lo que estás experimentando es que muchos de tus valores son "casi" infinito negativo, y tal vez estos no estén almacenados correctamente en su vector de resultados. No veo que este deba ser el caso según tu código, pero esta sería mi suposición inicial.