Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 建模参数偏差的优化_R_Optimization_Modeling - Fatal编程技术网

R 建模参数偏差的优化

R 建模参数偏差的优化,r,optimization,modeling,R,Optimization,Modeling,在寻找优化程序的过程中,我会寻求一些帮助来解决我的问题。我必须解释我工作的某些步骤,我希望我能清楚地解释我的问题。。。目前,我正在用模拟数据和真实数据对R中的缺失数据进行研究。在模拟数据中,我通过一些学习技术解释了与真实数据相似的缺失数据模式。我现在想做的是从模拟到真实数据的学习 在模拟中,我得到了一个真实的参数向量,其中回归模型的参数是根据完整数据估计的,没有遗漏。让我们称之为向量参考。通过人工生成缺失和缺失值的多重插补(例如,使用老鼠),我最终收到基于缺失数据的回归模型参数。让我们称这些回归

在寻找优化程序的过程中,我会寻求一些帮助来解决我的问题。我必须解释我工作的某些步骤,我希望我能清楚地解释我的问题。。。目前,我正在用模拟数据和真实数据对R中的缺失数据进行研究。在模拟数据中,我通过一些学习技术解释了与真实数据相似的缺失数据模式。我现在想做的是从模拟到真实数据的学习

在模拟中,我得到了一个真实的参数向量,其中回归模型的参数是根据完整数据估计的,没有遗漏。让我们称之为向量参考。通过人工生成缺失和缺失值的多重插补(例如,使用老鼠),我最终收到基于缺失数据的回归模型参数。让我们称这些回归参数为老鼠。现在我想模拟REF和老鼠的区别,让我们称它们为PA-REF,并将这些学习应用到实际数据中。PA-REF的一个相当好的建模是可能的,具有极值分布。这意味着,一般来说,小鼠大多接近REF,但在某些情况下并非如此。因此,为了在++++真实数据(!)中通过Mice++++分析估计回归模型参数的分布和插入插补,我得到了回归参数周围极值的非常广泛的分布。对于这些情况,如果回归参数是或不是离群值,我估计带有一些协变量的logit获得概率(根据模拟中的差异REF和MICE)。我尝试使用approxfun以这些概率管理EVD参数

在下面的代码中,您可以找到这个想法的实现

一开始,evd参数依赖于离群概率的一个非常基本的函数发生了:简单地说是一个具有起始值和结束值的线性函数。我的出发点是区分PA.Ref的低值和高值。对于这两组,我都插入了一个异常值。对于低值,为异常值的截止值(10),对于高值,为低值组的最低值。我这样做是为了包含关于估计概率反映基于MICE的回归参数估计是否为异常值的不确定性的可能性的不安全性。在模拟中,将参数预测为异常值(高PA Ref)的模型工作得很好,但存在一些缺点,此处不需要解释

在下一步中,我使用该函数从由此控制的EVD中提取值,即PA-REF的125个值,EVD参数的简单线性函数作为离群概率的函数。绘制必须满足PA-REF最大值大于0且不大于1.5的要求。受管理的evd绘制为每个回归参数生成一个分布。在这里,我获得了矩阵格式125x44,由于PA-REF的方向未知,这些行可能会加倍。我再次接近此evd分布,因此可以计算模拟中观察到的PA-REF(差异REF和鼠标)的pdf值,请参阅下一步

第三步基本上是对y.pa.ref的每个元素执行此操作:近似evd绘图的密度,并将此近似函数集成到观测的y.pa.ref中,同时满足一些要求(start.val、end.val、max.val)用于获得观察到的PA-REF覆盖的概率质量。最后,平均值是evd覆盖PA-REF值的平均值。这里它是0.33,这意味着通过这种方法,它是平均概率,即y.pa.ref包含在extr中。为回归模型的每个参数指定的值分布。(如果你考虑方向,这个值可以加倍。)< /P> 我想要优化的是:我现在想要最大化观测到的PA-REF向量中所有元素的pdf值的平均值。所以我的问题是:是否可以通过为EVD的参数指定一个优化函数来优化这些值?
我自己尝试了几个想法。例如,我使用最高prob.outl和y.pa.ref对,从多元正态分布中提取值,并使用这些值对evd参数进行更高的估计。然后我构建一个函数,将outl.prob中的evd参数线性增加到0.5,并将基于MVN的较高evd参数的evd参数保持在0.5到1以上。不幸的是,这根本不能提高pdf质量的平均值。基本上我相信通过优化可以解决这个星座。但也许我错了…?:-)

谢谢你的支持。如果你愿意,我会在我的出版物中引用你的帮助,至少我必须匿名

PA.REF <- c(0.43997, 1.99193, 2.36845, 1.37931, 24.32432, 0.42373, 2.77907, 
2.49998, 18.18181, 0.52219, 0.37312, 5.24694, 4.21052, 0.59523, 
5.02122, 4.78839, 3.11992, 4.42476, 16.09194, 3.48839, 3.24674, 
0.39386, 3.74449, 6.20155, 2.02429, 2.02953, 2.77776, 2.22222, 
7.34693, 5.15163, 1.57566, 0.16821, 3.20001, 1.17646, 0.83331, 
0.55556, 1.88996, 0.38461, 4.76189, 0.91186, 1.0118, 0.29985, 
1.34529, 13.58024)

Outl.prob <- c(0.15371, 0.02757, 0.01265, 0.05866, 0.89814, 0.01828, 0.00442, 
0.03018, 0.63696, 0.00845, 0.01356, 0.00507, 0.07715, 0.07176, 
0.02763, 0.00671, 0.00998, 0.03585, 0.01629, 0.16794, 0.09089, 
0.00406, 0.01003, 0.03254, 0.01134, 0.00711, 0.00424, 0.00589, 
0.09664, 0.01311, 0.00851, 0.01428, 0.01049, 0.25723, 0.0257, 
0.06623, 0.00728, 0.00789, 1, 0.00587, 0.01292, 0.00889, 0.0179, 
1)

my.data <- data.frame(Outl.prob, PA.REF)




y.pa.ref <- my.data[,c("PA.REF")]    
outl.prob <- my.data[,c("Outl.prob")]    
cut.outl <- 10   

require(extRemes)   
    ###########################
    #### Step 1
fit.evd.min <- fevd( c(  sort(y.pa.ref)[1:(length(y.pa.ref)/2)],
                             cut.outl))   
loc.evd.fit.min   = fit.evd.min$results$par[c("location")]   
scale.evd.fit.min = fit.evd.min$results$par[c("scale")]   
shape.evd.fit.min = fit.evd.min$results$par[c("shape")]   


fit.evd.max <- fevd( c(  sort(y.pa.ref)[(length(y.pa.ref)/2): length(y.pa.ref)],
                             min(y.pa.ref)))   

loc.evd.fit.max   = fit.evd.max$results$par[c("location")]    
scale.evd.fit.max = fit.evd.max$results$par[c("scale")]    
shape.evd.fit.max = fit.evd.max$results$par[c("shape")]    

basic.loc.evd.fun <- approxfun(approx(x= c(0,1),
                                          y= c(loc.evd.fit.min, loc.evd.fit.max), n=1e4))    
basic.scale.evd.fun <- approxfun(approx(x= c(0,1),
                                            y=c(scale.evd.fit.min, scale.evd.fit.max), n=1e4))    
basic.shape.evd.fun <- approxfun(approx(x= c(0,1),
                                            y=c(shape.evd.fit.min, shape.evd.fit.max), n=1e4))    


    ###########################


    ###########################
    #### Step 2


number125 <- 1:125    
evd.val.max <- max(y.pa.ref)*1.5    
count.draw.simu <- 0    
evd.var.vert.simu <- NULL   
matrix.evd.v4 <- matrix(nrow=length(number125),
                            ncol=length(y.pa.ref))    
set.seed(71108)    


for (i in c(1:length(y.pa.ref))){    

  while (count.draw.simu < max(number125)){    
    evd.simu.draw <- rgev(1, loc=basic.loc.evd.fun(outl.prob[i]),     
                              scale= basic.scale.evd.fun(outl.prob[i]),     
                              shape=basic.shape.evd.fun(outl.prob[i]))         
    evd.simu.draw <- ifelse(evd.simu.draw<evd.val.max    
                                & evd.simu.draw >0, evd.simu.draw, NA)    
    evd.var.vert.simu <- c(evd.var.vert.simu, evd.simu.draw)    
    evd.var.vert.simu <- evd.var.vert.simu[!is.na(evd.var.vert.simu)]    
    count.draw.simu  <- length(evd.var.vert.simu)    
  }    


  matrix.evd.v4[,i] <- evd.var.vert.simu     
  evd.var.vert.simu <- NULL    
  count.draw.simu<- 0    
}    

EVD2 <- rbind(matrix.evd.v4, - matrix.evd.v4)    

    ###########################


    ###########################
    #### Step 3

fun.list.EVD2 <- list()    
est.val.fun.EVD2 <- list()    
est.prob.fun.EVD2 <- NULL    


for (i in 1:length(y.pa.ref)){    

EVD2.val <-   EVD2[,i]    
assign(paste0(i, ".fun.EVD2" ),  approxfun( density(EVD2.val) ))     
fun.list.EVD2[[i]] <- get(paste0(i,".fun.EVD2" ))     
start.val <- min( density(EVD2.val)$x)     
end.val   <- y.pa.ref[i]    
max.val   <- max( density(EVD2.val)$x)     
ind.fun.ex <- c("Yes")     

ifelse( start.val < end.val & max.val > end.val,     

        ifelse(start.val > 0,     
               prob.EVD2fun <- integrate( get(paste0(i,".fun.EVD2" )),     
                                          start.val,
                                          end.val) ,     
               prob.EVD2fun <- integrate( get(paste0(i,".fun.EVD2" )),     
                                          0,
                                          end.val) ),    
        ind.fun.ex <- c("NO") )        


if(ind.fun.ex ==  c("NO")){    
  est.val.fun.EVD2[[i]] <- NULL    
  est.prob.fun.EVD2 <- c(est.prob.fun.EVD2, 0)    
} else {    
  assign(paste0("value.EVD2.fun", i), prob.EVD2fun)    
  est.val.fun.EVD2[[i]] <- get(paste0("value.EVD2.fun", i))    
  est.prob.fun.EVD2 <- c(est.prob.fun.EVD2, prob.EVD2fun$value)    
}    

}    

    ###########################

optim.val.prob.EVD2 <- mean(est.prob.fun.EVD2)  


PA.REF请简化为最小的可复制示例…您好。我当然知道,那里写了很多东西。我真的尽力把它写得尽可能短。步骤1显示了如何将概率映射到evd参数,步骤2从中提取,步骤3评估每个分布中的观察数。优化应使optim.val.prob最小化,这意味着evd参数就是设定的参数,其中包括观察值的evd最大密度。。。