楼主: 张yu
1078 1

[问答] 请教R中非参数模型SIMEX程序中有关最优化的一些问题,谢谢啦 [推广有奖]

  • 1关注
  • 0粉丝

小学生

35%

还不是VIP/贵宾

-

威望
0
论坛币
2 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
66 点
帖子
3
精华
0
在线时间
9 小时
注册时间
2018-10-9
最后登录
2022-7-14

楼主
张yu 发表于 2019-4-19 20:40:53 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
  
   aaa=Sys.time()
   #set.seed(23569)
   n=100
   total=100
   B=50
   h1=0.03
   h2=0.05
   #h1=n^(-1/5)
   #h2=0.5*1.02^40*sqrt(0.2)
   lamda=seq(0,2,0.25)
   N=length(lamda)
   sigmau=0.6
   g1=0
   g2=0
   RASE1=0
   RASE2=0

   for(run in 1:total)
      {
         #x=rnorm(n,0,1)
         x=runif(n,-1,1)
         e=rnorm(n,0,0.4)
         y=x^2+e
         u=rnorm(n,0,sigmau)
         v=matrix(rnorm(n*B,0,sigmau),n,B)
         w=x+u
         #t=sort(x)
         t=seq(-1,1,length=n)

         #SIMEX定义一个lmd的函数arg
         at=array(rep(0,2*n*N*B),dim=c(2,n,N,B))
         gs0=array(rep(0,n*N),dim=c(n,N))
         gs00=array(rep(0,n*N),dim=c(n,N))

            for (j in 1:N)
              {
              for (b in 1:B)
                 {
                 for (i in 1:n)
                   {
                       objfun=function(a)
                           {
                              gs0=a[1]
                              gs00=a[2]
                              #wb[j]=w+sqrt(lamda[j])*v[,b]
                              -sum((1/(n*h))*dnorm((w+sqrt(lamda[j])*v[,b])-t,0,h1)*dnorm(y-gs0-gs00*((w+sqrt(lamda[j])*v[,b])-t),0,h2))
                           
                            }
                       at[,i,j,b]=optim(c(t^2-0.5,2*t),objfun)$par
                       gs0[i,j]=mean(at[1,i,j,])
                       gs00[i,j]=mean(at[2,i,j,])

                   }
                 }
               }



        #外推
        p0=array(rep(0,n),dim=c(n,1))
        p1=array(rep(0,n),dim=c(n,1))
        p2=array(rep(0,n),dim=c(n,1))
        gs0m=array(rep(0,n),dim=c(n,1))
        gs00m=array(rep(0,n),dim=c(n,1))

        for (i in 1:n)
            {   
                 pf=(lamda)^2
                 lm.sol=lm(gs0[i,]~lamda+pf)
                 p0=lm.sol$coefficient[1]
                 p1=lm.sol$coefficient[2]
                 p2=lm.sol$coefficient[3]
                 gs0m=p0-p1+p2
            
                 #pf=(lamda)^2
                 #lm.sol=lm(gs00[i,]~lamda+pf)
                 #p0=lm.sol$coefficient[1]
                 #p1=lm.sol$coefficient[2]
                 #p2=lm.sol$coefficient[3]
                 #gs00m=p0-p1+p2
             }

            

        #naive估计

       bt=array(rep(0,2*n),dim=c(2,n))
       gn=rep(0,n)            
              for (i in 1:n)
                 {
                   nivfun=function(b)
                           {
                              gs1=b[1]
                              gs11=b[2]
                              -sum((1/(n*h))*dnorm(w-t,0,h1)*dnorm(y-gs1-gs11*(w-t),0,h2))
                           
                            }
                       bt[,i]=optim(c(t^2-0.5,2*t),nivfun)$par
                       #gn=matrix(c(1,0),1,2)%*%bt
                       gn=bt[1,i]
                   }
                 
        gt=t^2
        g1=g1+gs0m
        g2=g2+gn
        RASE11=sqrt(sum((gt-gs0m)^2)/n)
        RASE21=sqrt(sum((gt-gn)^2)/n)
        RASE1=RASE1+RASE11
        RASE2=RASE2+RASE21
    }

  gss=g1/total
  gww=g2/total
  RASE=RASE1/total
  RASEn=RASE2/total


  plot(x,y,ylim=c(-0.5,1),xlim=c(-1,1))
  lines(t,gt,col="red")
  lines(t,gss,col="blue")#SIMEX
  lines(t,gww,col="green")#naive

  RASE
  RASEn

  bbb=Sys.time()
  aaa
  bbb

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝


沙发
张yu 发表于 2019-4-19 20:43:50
这个程序也不知道是什么问题,目标函数是没有问题的(我考虑的问题不是一般的非参数模型),不知道是不是对目标函数求极大值时使用的最优化optim函数没有使用对?谢谢啦

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-2-7 15:59