楼主: mengqinqing
5108 8

[问答] r画图后如何确定最值点 [推广有奖]

  • 8关注
  • 6粉丝

已卖:1份资源

讲师

94%

还不是VIP/贵宾

-

威望
0
论坛币
64351 个
通用积分
8.0217
学术水平
7 点
热心指数
5 点
信用等级
4 点
经验
21974 点
帖子
468
精华
0
在线时间
650 小时
注册时间
2007-11-24
最后登录
2025-6-4
毕业学校
中山大学

楼主
mengqinqing 发表于 2015-5-4 11:38:59 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
请问各位大牛,当我画了一个图形之后,我想找到这个图形上的极值点或者最值点,请问是否有函数实现?这个图形本身没有函数存在,我想只能通过自己去找,但是有没有简单一点的程序呢?比如这个程序产生的图形,如何确定最低点是哪个呢?
  1. n <- 1000
  2. set.seed(731)
  3. age <- 50 + 12*rnorm(n)
  4. label(age) <- "Age"
  5. sex <- factor(sample(c('Male','Female'), n,
  6.                      rep=TRUE, prob=c(.6, .4)))
  7. cens <- 15*runif(n)
  8. h <- .02*exp(.04*(age-50)+.8*(sex=='Female'))
  9. dt <- -log(runif(n))/h
  10. label(dt) <- 'Follow-up Time'
  11. e <- ifelse(dt <= cens,1,0)
  12. dt <- pmin(dt, cens)
  13. units(dt) <- "Year"
  14. dd <- datadist(age, sex)
  15. options(datadist='dd')
  16. S <- Surv(dt,e)

  17. f <- cph(S ~ rcs(age,4) + sex, x=TRUE, y=TRUE)
  18. cox.zph(f, "rank")             # tests of PH
  19. anova(f)
  20. plot(Predict(f, age, sex)) # plot age effect, 2 curves for 2 sexes
复制代码


谢谢!


二维码

扫码加我 拉你入群

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

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

关键词:有没有 最低点 如何

Rplot01.jpeg (25.21 KB)

Rplot01.jpeg

用自己的力量站在自己的位置

沙发
mengqinqing 发表于 2015-5-4 13:01:55
或者只看这个图:
  1. n <- 1000
  2. set.seed(731)
  3. age <- 50 + 12*rnorm(n)
  4. label(age) <- "Age"
  5. sex <- factor(sample(c('Male','Female'), n,
  6.                      rep=TRUE, prob=c(.6, .4)))
  7. cens <- 15*runif(n)
  8. h <- .02*exp(.04*(age-50)+.8*(sex=='Female'))
  9. dt <- -log(runif(n))/h
  10. label(dt) <- 'Follow-up Time'
  11. e <- ifelse(dt <= cens,1,0)
  12. dt <- pmin(dt, cens)
  13. units(dt) <- "Year"
  14. dd <- datadist(age, sex)
  15. options(datadist='dd')
  16. S <- Surv(dt,e)

  17. f <- cph(S ~ rcs(age,4) , x=TRUE, y=TRUE)
  18. cox.zph(f, "rank")             # tests of PH
  19. anova(f)
  20. plot(Predict(f, age)) # plot age effect, 2 curves for 2 sexes
复制代码

藤椅
mengqinqing 发表于 2015-5-4 13:02:37
> Predict(f, age)
         age         yhat        lower        upper
1   19.71985 -0.580383381 -1.532437029  0.371670268
2   20.00869 -0.582811675 -1.519170266  0.353546915
3   20.29754 -0.585239970 -1.505919870  0.335439930
4   20.58638 -0.587668265 -1.492686694  0.317350164
5   20.87523 -0.590096559 -1.479471646  0.299278527
6   21.16408 -0.592524854 -1.466275702  0.281225993
.....

板凳
hugebear 发表于 2015-5-4 13:21:33
mengqinqing 发表于 2015-5-4 13:02
> Predict(f, age)
         age         yhat        lower        upper
1   19.71985 -0.580383381 -1 ...
因为你图中的曲线本身就是R基于Predict(f, age)这组数据进行某种光滑化得到的,所以并不存在数学意义上的解析最小值点。一种最小值点估计方法就是简单地取对应于yhat值最小的age值(
  1. xmin <- age[which.min(yhat)]
复制代码
)。从你提供的数据来看, age变量中两点的间隔很小(我推测R其实就是根据这组数据绘出的曲线),最后得到的估计应该会不错。可以画出来看看。

报纸
mengqinqing 发表于 2015-5-4 13:37:56
hugebear 发表于 2015-5-4 13:21
因为你图中的曲线本身就是R基于Predict(f, age)这组数据进行某种光滑化得到的,所以并不存在数学意义上的 ...
谢谢!
可以得到想要的age最小值。
我想把这个点加到图里面去,用points加不上去,不知道为什么?
但是如果用plot(x,y)去画图再加points则可以,这是为什么?
  1. n <- 1000
  2. set.seed(731)
  3. age <- 50 + 12*rnorm(n)
  4. label(age) <- "Age"
  5. sex <- factor(sample(c('Male','Female'), n,
  6.                      rep=TRUE, prob=c(.6, .4)))
  7. cens <- 15*runif(n)
  8. h <- .02*exp(.04*(age-50)+.8*(sex=='Female'))
  9. dt <- -log(runif(n))/h
  10. label(dt) <- 'Follow-up Time'
  11. e <- ifelse(dt <= cens,1,0)
  12. dt <- pmin(dt, cens)
  13. units(dt) <- "Year"
  14. dd <- datadist(age, sex)
  15. options(datadist='dd')
  16. S <- Surv(dt,e)

  17. f <- cph(S ~ rcs(age,4) , x=TRUE, y=TRUE)
  18. cox.zph(f, "rank")             # tests of PH
  19. anova(f)
  20. p<- Predict(f, age)

  21. #用plot(p)画图
  22. plot(p)
  23. minpointyhat= min(p$yhat)
  24. minpointage <- p$age[which.min(p$yhat)]#minpointage=p$age[which(p$yhat == min(p$yhat))]
  25. points(x=minpointage,y=minpointyhat,col="red",pc=16)

  26. #用plot自己画图
  27. plot(p$yhat~p$age,type="l",ylim=c(-2,1.5))
  28. lines(p$age,p$lower,lty=2)
  29. lines(p$age,p$upper,lty=2)
  30. points(x=minpointage,y=minpointyhat,col="red",pch=16)
  31. text(x=minpointage,y=-0.8, "age=34.7",cex = .8)
复制代码

地板
hugebear 发表于 2015-5-4 21:43:21
mengqinqing 发表于 2015-5-4 13:37
谢谢!
可以得到想要的age最小值。
我想把这个点加到图里面去,用points加不上去,不知道为什么?
你的原图看起来是用ggplot2画的,points()不是ggplot2里的绘图命令。加点要用符合ggplot2语法的命令才行。

7
mengqinqing 发表于 2015-5-6 10:03:56
hugebear 发表于 2015-5-4 21:43
你的原图看起来是用ggplot2画的,points()不是ggplot2里的绘图命令。加点要用符合ggplot2语法的命令才行。 ...
那我怎么样才能把这个图加上一个点呢?或者怎么样才能把后面那个图的置信区间填充上颜色呢?

8
mengqinqing 发表于 2015-5-6 11:07:38
hugebear 发表于 2015-5-4 21:43
你的原图看起来是用ggplot2画的,points()不是ggplot2里的绘图命令。加点要用符合ggplot2语法的命令才行。 ...
已解决,谢谢!

9
cccccjjjjj123 发表于 2019-1-24 11:40:53
请问函数是什么,怎么解决的呢,拜托&#129402;

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

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