1

向量a中的值被视为真实值,我想使用 mle 估计它们。我通过添加噪声 N(0,sigma^2)从a中生成100 个“扰动”向量。对于每个受干扰的向量,我按降序对它们进行排序。假设观察到的顺序是:x_1>x_4>x_5>x_3>x_2 我们想计算观察到这个顺序的概率,我们这样做:P(X_1-X_4>0|a)*P(X_4-X_5>0 |a)*P(X_5-X_3>0|a)*P(X_3-X_2>0|a) (我们忽略依赖关系),其中 X_1-X_4 ~ N(a[1]-a[4],2 *std^2) 等等。

通常在使用 mle 时使用密度函数,但这里我们使用 pnorm。运行下面的代码后我遇到的问题是,对于估计,标准误差都是相同的(而且太大了)。我做错了什么?

R代码:

#library(stats4)
n <- 100
x <- mat.or.vec(n,5)
y <- mat.or.vec(n,5)
a <- c(100,100.5,100.75,100.7,100.25)                       
std <- sd(a)
Var <- std^2
for(i in 1:n){
    y[i,] <- a+rnorm(5,mean=0,sd=std)                       
    x[i,] <- sort(y[i,],decreasing = TRUE,index.return=TRUE)$ix
}                           

matris <- mat.or.vec(n,4)
sigma <- sqrt(2*Var)
fit <- function(f1,f2,f3,f4,f5){
    for(i in 1:n){
        for(j in 1:4){
            P <- if(x[i,j] == 1) {f1} else if(x[i,j] == 2) {f2} else if(x[i,j] == 3) {f3} else if(x[i,j] == 4) {f4} else   {f5}
            Q <- if(x[i,j+1] == 1) {f1} else if(x[i,(j+1)] == 2) {f2} else if(x[i,(j+1)] == 3) {f3} else if(x[i,(j+1)] == 4) {f4} else {f5}
            mu <- P-Q
            matris[i,j] <- pnorm(0,mean=mu,sd=sigma,lower.tail=FALSE,log.p=TRUE)     
        }
    }
    -sum(matris)
}
mle.results <- mle(fit,start=list(f1=a[1],f2=a[2],f3=a[3],f4=a[4],f5=a[5]))
summary(mle.results)
4

0 回答 0