楼主: mym莫莫
27241 4

[有偿编程] R软件中 'ylim'值不能是无限的怎么处理 [推广有奖]

  • 0关注
  • 0粉丝

等待验证会员

小学生

85%

还不是VIP/贵宾

-

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

楼主
mym莫莫 发表于 2018-9-22 14:46:10 |AI写论文
5论坛币
已经换了好多次最大最小阈值,可是还是出现这样的问题,有没有大神解决下
有问题程序

关键词:怎么处理 r软件 Lim 有没有

沙发
cheetahfly 在职认证  发表于 2018-9-22 23:17:23
原因可能在内不在外:loss中有可能有Inf值

藤椅
mym莫莫 发表于 2018-9-23 16:38:10
但是我的数据是自己输入的我觉得不可能存在缺失值,而且现在又出现了Error in if (min(y) <= 0) l <- 10^6 else { :
  需要TRUE/FALSE值的地方不可以用缺少值。能帮我看下这是什么原因,万分感谢!

板凳
杀不死 发表于 2020-9-29 20:30:47
最后那个是因为你的取值中出现了负值,我之前也是,因为取了对数,所以在0-1直接的数就变成了负数,跟你的错误一样,所以要剔除掉负数就可以了


报纸
zhou1_20 发表于 2020-9-30 11:52:34
可以把用到的两个函数拿出来简单改写, 请参考
#问题一,mrl.plot, 这个函数写的比较稳健,直接把源代码拿出来绘图

  1. #读取数据
  2. loss = readxl::read_xlsx('C:/Users/zsr/Downloads/loss.xlsx', col_names =T)

  3. #标准化数据
  4. data = loss/max(loss)

  5. #参数设置
  6. umin = min(data);umax = max(data) - 0.1
  7. conf = 0.95;nint = 100

  8. x <- xu <- xl <- numeric(nint)
  9. u <- seq(umin, umax, length = nint)
  10. for (i in 1:nint) {
  11.   data <- data[data > u[i]]
  12.   x[i] <- mean(data - u[i])
  13.   sdev <- sqrt(var(data))
  14.   n <- length(data)
  15.   xu[i] <- x[i] + (qnorm((1 + conf)/2) * sdev)/sqrt(n)
  16.   xl[i] <- x[i] - (qnorm((1 + conf)/2) * sdev)/sqrt(n)
  17. }
  18. plot(u, x, type = "l", xlab = "u", ylab = "Mean Excess",
  19.      ylim = c(min(xl[!is.na(xl)]), max(xu[!is.na(xu)])))
  20. lines(u[!is.na(xl)], xl[!is.na(xl)], lty = 2)
  21. lines(u[!is.na(xu)], xu[!is.na(xu)], lty = 2)
复制代码
Rplot01.png
## 问题二:在gdp.fit中调用了optim,在某些情况下无最优质,思路屏蔽掉无最优值的项,代码如下

  1. # un.TryCatch 异常处理函数, 捕获所有error和warnings信息,包含一个参数
  2. # expr 为待执行函数
  3. un.TryCatch <- function(expr) {
  4.   #设置初始warn和err都为NULL
  5.   warn <- err <- NULL
  6.   #withCallingHandlers 捕获函数或表达式(expr)的error和warn
  7.   value <- withCallingHandlers(
  8.     #tryCatch捕捉warn和error
  9.     tryCatch(expr, error=function(e) {
  10.       err <<- e
  11.       NULL
  12.     }), warning=function(w) {
  13.       warn <<- w
  14.       invokeRestart("muffleWarning")
  15.     })
  16.   #返回表达式运行value, warn, err
  17.   list(value=value, warning=warn, error=err)
  18. }

  19. #数据参数设置
  20. data = loss/max(loss)
  21. umin = min(data);umax = max(data) - 0.1
  22. nint = 10;show = FALSE

  23. m <- s <- up <- ul <- matrix(NA, nrow = nint, ncol = 2)
  24. u <- seq(umin, umax, length = nint)

  25. for (i in 1:nint) {
  26.   z.tem <- un.TryCatch(gpd.fit(data$loss, u[i], show = show))
  27.   if(!is.null(z.tem$value)){
  28.     z = z.tem$value
  29.     m[i, ] <- z$mle
  30.     m[i, 1] <- m[i, 1] - m[i, 2] * u[i]
  31.     d <- matrix(c(1, -u[i]), ncol = 1)
  32.     v <- t(d) %*% z$cov %*% d
  33.     s[i, ] <- z$se
  34.     s[i, 1] <- sqrt(v)
  35.     up[i, ] <- m[i, ] + 1.96 * s[i, ]
  36.     ul[i, ] <- m[i, ] - 1.96 * s[i, ]
  37.   }else{
  38.     m[i, ] <- NA
  39.     s[i, ] <- NA
  40.     up[i, ] <-NA
  41.     ul[i, ] <- NA
  42.   }
  43. }

  44. names <- c("Modified Scale", "Shape")
  45. oldpar <- par(mfrow = c(2, 1))
  46. for (i in 1:2) {
  47.   um <- max(up[, i], na.rm = T)
  48.   ud <- min(ul[, i], na.rm = T)
  49.   plot(u, m[, i], ylim = c(ud, um), xlab = "Threshold",
  50.        ylab = names[i], type = "b")
  51.   for (j in 1:nint) lines(c(u[j], u[j]), c(ul[j, i], up[j, i]))
  52. }
  53. par(oldpar)
复制代码
Rplot02.png

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-31 19:44