R语言 如何计算标准差的最大似然[关闭]

kadbb459  于 2023-05-20  发布在  其他
关注(0)|答案(4)|浏览(146)

**关闭。**这个问题是not about programming or software development。目前不接受答复。

这个问题似乎不是关于a specific programming problem, a software algorithm, or software tools primarily used by programmers的。如果你认为这个问题与another Stack Exchange site的主题有关,你可以留下评论,解释在哪里可以回答这个问题。
7天前关闭
Improve this question
什么是标准差的最大似然?一个向量= {1,2,3,4,5,6,7,8,9,10}。我们如何计算最大偏差似然?

qf9go6mv

qf9go6mv1#

在维基百科上,未校正的标准差是正态分布总体的标准差的最大似然估计。因此:

uncorSD <- function(x, na.rm = FALSE) {
    if (na.rm) {
        x <- x[!is.na(x)]
    }
    sqrt(sum((x - mean(x))^2) / length(x))
}
omvjsjqw

omvjsjqw2#

使用optim()对对数似然函数进行优化,得到Hessian矩阵。
objectname$hessian上使用solve()进行反转。
该矩阵的对角元素的平方根是标准误差。

vawmfj5a

vawmfj5a3#

stats4包中使用mle

> mle(function(mu,sigma) -sum(dnorm(1:10,mu, sigma, log = TRUE)), start=list(mu=5, sigma=2)  ) %>% summary
Maximum likelihood estimation

Call:
mle(minuslogl = function(mu, sigma) -sum(dnorm(1:10, mu, sigma, 
    log = TRUE)), start = list(mu = 5, sigma = 2))

Coefficients:
         Estimate   Std. Error
mu    5.500072643 0.9083575442
sigma 2.872478768 0.6423716616

-2 log L: 49.48090277
1l5u6lss

1l5u6lss4#

下面是一个函数,它使用R中的内置标准差函数,并根据样本大小进行校正。

# returns the MLE standard deviation for a vector x
sd_mle <- function(x){
  x <- x[!is.na(x)]
  n <- length(x)
  sd <- sd(x)
  return(sqrt((n-1)/n)*sd)
}

用一个随机向量试试。。

# create a vector of 15 observations from a standard normal distribution
set.seed(1)
x <- rnorm(15)

# bias corrected standard deviation
sd(x) # [1] 1.017695

# MLE (not bias corrected) standard deviation
sd_mle(x) # [1] 0.9831864

正如预期的那样,MLE不是基于该群体样本的群体标准差的保守估计。
下面是示例向量的结果。

x <- seq(from=1, to=10, by=1) #[1]  1  2  3  4  5  6  7  8  9 10
sd(x) #[1] 3.02765
sd_mle(x) #[1] 2.872281

相关问题