Intentando trazar la probabilidad logarítmica de la distribución de Cauchy para diferentes valores de theta en R

CorePress2024-01-24  10

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.

randomThread
asp.net core - Organización de consultas con HotChocolateprueba: cómo lidiar con la proposición "falso = verdadero" al demostrar teoremas en coqandroid - Obteniendo referencia de actividad en AndroidViewModeljavascript: no se puede asignar a través de una matriz creada dinámicamente a través de reduxPython - ¿Cómo puedo escribir mi tabla de datos fila tras fila en Excel con xlsxwriter?oop: inicializa una matriz aleatoria con un número fijo de variables en Javamacos: ¿Cómo determinar cuándo se ejecutan los contenedores Docker (en una MacBook M1) a través de qemu?html: uso de consulta de medios para ejecutar