全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 R语言论坛
3000 6
2022-05-05
我的模型方程为Pr=(((0.5-beta*(A/2))*(V^(alpha)))^(mu))/((((0.5-beta*(A/2))*V^(alpha))^(mu))+(30)*(alpha/mu)),Pr、A和V已知,目标是用极大似然估计参数alpha、beta和mu三个parameter,初学r语言,程序如下:
for(i in 1:1080) {
  #设定随机数生成种子
  set.seed(10086)
  #生成一批实验数据
  # <- 60 # 设定样本容量
  #x <- rnorm(sample_num) # 生成解释变量
  #epsilon <- rnorm(sample_num, sd=2) # 生成模型的扰动项
  Pr <- (((0.5-beta*(A/2))*V^(alpha))^(1/mu))/((((0.5-beta*(A/2))*V^(alpha))^(1/mu))+(30)*(alpha/mu)) # 生成被解释变量
  ## 显然,我们的总体参数是alpha、beta和mu
  # 设定对数似然函数
  Pr <- para0[i,5]
  A <- para0[i,3]
  V <- para0[i,4]
  logf <- function(para) {
    # 定义参数
    alpha <- para[1]
    beta <- para[2]
    mu <- para[3]
    # 计算并返回相应的对数似然函数
    sum(dnorm(Pr-(((0.5-beta*(A/2))*V^(alpha))^(1/mu))/((((0.5-beta*(A/2))*V^(alpha))^(1/mu))+(30)*(alpha/mu)), log = TRUE))
  }
  # 设定初始值
  # 参数位置需与对数似然函数中的参数向量一一对应
  start_para <- c(1, 1, 1)

  # 求解极大似然估计值
  result <- maxLik(logLik = logf, method='NM',start = start_para)

  # 打印估计值
  summary(result)
}


但是输出不了估计值,报错:
>   summary(result)
Error in eigen(hess, symmetric = TRUE, only.values = TRUE) :
  'x'里有无穷值或遗漏值
二维码

扫码加我 拉你入群

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

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

全部回复
2022-5-5 10:41:53
您提供的代码,删了什么东西吗,代码不通啊
二维码

扫码加我 拉你入群

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

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

2022-5-5 13:49:26
感谢您的回复,我后面修改了一下代码,但还是跑不通,我把注释都删了,您能看一下哪有问题吗
for(i in 1:1080) {
  set.seed(10086)
  Pr <- para0[i,5]
  A <- para0[i,3]
  V <- para0[i,4]
  if (A <- 0){
    logf <- function(para) {
      alpha <- para[1]
      mu <- para[2]
      sum(dnorm(Pr-((((0.5)*V^(alpha))^(1/mu))/((((0.5)*V^(alpha))^(1/mu))+(30)*(alpha/mu))), log = TRUE))
    }
    start_para <- c(1, 1)
    result <- maxLik(logLik = logf, method='NM',start = start_para)
    summary(result)
  }else{
    logf <- function(para) {
      alpha <- para[1]
      beta <- para[2]
      mu <- para[3]
      sum(dnorm(Pr-(((0.5-beta*(A/2))*V^(alpha))^(1/mu))/((((0.5-beta*(A/2))*V^(alpha))^(1/mu))+(30)*(alpha/mu)), log = TRUE))
    }
    start_para <- c(1, 1, 1)
    result <- maxLik(logLik = logf, method='NM',start = start_para)
    summary(result)  
  }
}
二维码

扫码加我 拉你入群

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

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

2022-5-5 13:54:33
llb_321 发表于 2022-5-5 10:41
您提供的代码,删了什么东西吗,代码不通啊
感谢您的回复,我后面修改了一下代码,但还是跑不通,我把注释都删了,您能看一下哪有问题吗
for(i in 1:1080) {
  set.seed(10086)
  Pr <- para0[i,5]
  A <- para0[i,3]
  V <- para0[i,4]
  if (A <- 0){
    logf <- function(para) {
      alpha <- para[1]
      mu <- para[2]
      sum(dnorm(Pr-((((0.5)*V^(alpha))^(1/mu))/((((0.5)*V^(alpha))^(1/mu))+(30)*(alpha/mu))), log = TRUE))
    }
    start_para <- c(1, 1)
    result <- maxLik(logLik = logf, method='NM',start = start_para)
    summary(result)
  }else{
    logf <- function(para) {
      alpha <- para[1]
      beta <- para[2]
      mu <- para[3]
      sum(dnorm(Pr-(((0.5-beta*(A/2))*V^(alpha))^(1/mu))/((((0.5-beta*(A/2))*V^(alpha))^(1/mu))+(30)*(alpha/mu)), log = TRUE))
    }
    start_para <- c(1, 1, 1)
    result <- maxLik(logLik = logf, method='NM',start = start_para)
    summary(result)  
  }
}
二维码

扫码加我 拉你入群

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

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

2022-5-6 16:19:28
我用你的代码,把 if (A <- 0)改成 if (A < 0)后,用猜测的para0数据,试了一下:
1、if (A <- 0)这种写法,以前没遇到过,我不确定是否正确,查了帮助文档,觉得您可能是笔误。
2、当测试数据的3、4、5列均为正值时,无报错,有结果。当测试数据改为正负值时,出现你遇到的报错。
3、您代码中,method="NM",按照文档说明,用于constrained MLE,但仅是实验性,并明确提示限制性参数空间的方差-协方差矩阵是错的。
4、改用method="BFGS",虽然有报错,但有结果,summary(result)提示收敛。
数据、似然函数、代码的参数,可以从这三个方面找找原因吧。
二维码

扫码加我 拉你入群

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

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

2023-2-26 19:45:39
你好,我是R小白,请问para0是如何来的?
二维码

扫码加我 拉你入群

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

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

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群