微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我应使用哪种ML算法确定鱼的成熟年龄?

如何解决我应使用哪种ML算法确定鱼的成熟年龄?

鱼的成熟年龄是增长率的斜率发生变化的地方。 Here is an example of a simulated individual fish and its two growth rates.

我想创建一种算法,该算法将根据与我附带的图片类似的年龄和长度数据确定成熟年龄。对于哪种算法有用以及如何将其应用于样本数据集,我几乎一无所知:

> head(data)
  age     length
1   0 0.01479779
2   1 0.05439856
3   2 0.18308919
4   3 0.24380771
5   4 0.37759992
6   5 0.44871502

有人建议我尝试使用Cox比例危害模型。为此,我将成熟期视为事件发生的时间(成熟度是事件,年龄是达到成熟度的时间)。我尝试拟合该模型,但出现此错误

> cox.model <- coxph(Surv(age ~ length),data = data)
Error in Surv(age ~ length) : Time variable is not numeric

我尝试使用as. numeric()将两个变量都设为数字,但这没有帮助。

请告诉我我是否错误地使用了该模型,或者是否应该使用其他模型。

解决方法

据我所知,到达事件的时间数据应包含一个事件指示器,即二进制变量。如果成熟度是事件,那么它应该已经作为二进制变量包含在数据集中,您应该运行它 cox.model <- coxph(Surv(age,maturity) ~ length,data = data)

请查看手册以获取更多详细信息

  1. Survival package
  2. Cox model

顺便说一句,这个数字是由分段回归和ggplot之类的东西创建的,我想您可能想使用这样的技术。这是example

,

我同意@ C.C.,1)生存模型不适用于此提供的数据集,2)我认为简单的分段线性回归方法更合适。

请参见下面的建议R代码以及示例输出图:sample output graph

library(segmented)

# create dummy data set,extended from provided one,with noise
df <- data.frame(
  age = seq(from = 0,to = 20,by = 1),length = c(
    seq(from = 0,to = 0.45,length.out = 5) + rnorm(5,mean = 1e-3,sd = 1e-2),seq(from = 0.48,to = 0.6,length.out = 16) + rnorm(16,sd = 1e-2)
    )
)

# fit normal linear regression and segmented regression
lm1 <- lm(length ~ age,data = df)
seg_lm <- segmented(lm1,~ age)

# determine age break point
age_break_point <- seg_lm$psi.history$all.selected.psi[[1]]

# plot raw data points,segmented fit and age break point
plot(seg_lm,res = TRUE,main=paste0('Growth rate change @ ',round(age_break_point,1),' years old'),xlab='Age',ylab='Length')
abline(v = age_break_point,col='red')

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。