old_par <- par(mfrow = c(2,2))
psi <- 5.0
plot(
function(m) dmideal(m, psi, log = FALSE),
-5, 10,
main = paste0('Density of the Ideal Meteor Magnitude\nDistribution (psi = ', psi, ')'),
col = "blue",
xlab = 'm',
ylab = 'dp/dm'
)
abline(v=psi, col="red")
plot(
function(m) dmideal(m, psi, log = TRUE),
-5, 10,
main = paste0('Density of the Ideal Meteor Magnitude\nDistribution (psi = ', psi, ')'),
col = "blue",
xlab = 'm',
ylab = 'log( dp/dm )'
)
abline(v=psi, col="red")
plot(
function(m) pmideal(m, psi),
-5, 10,
main = paste0('Probability of the Ideal Meteor Magnitude\nDistribution (psi = ', psi, ')'),
col = "blue",
xlab = 'm',
ylab = 'p'
)
abline(v=psi, col="red")
plot(
function(p) qmideal(p, psi),
0.01, 0.99,
main = paste('Quantile of the Ideal Meteor Magnitude\nDistribution (psi = ', psi, ')'),
col = "blue",
xlab = 'p',
ylab = 'm'
)
abline(h=psi, col="red")
# generate random meteor magnitudes
m <- rmideal(1000, psi)
# log likelihood function
llr <- function(psi) {
-sum(dmideal(m, psi, log=TRUE))
}
# maximum likelihood estimation (MLE) of psi
est <- optim(2, llr, method='Brent', lower=0, upper=8, hessian=TRUE)
# estimations
est$par # mean of psi
sqrt(1/est$hessian[1][1]) # standard deviation of psi
par(old_par)
Run the code above in your browser using DataLab