我正在使分布适合数据集。我需要根据给定的函数/公式调整分布的参数。我不知道该如何解决R
中的问题数据集是来自14个不同降雨持续时间(5分钟,10分钟,15分钟等)的降水数据集。对于每个数据集,我都适合一个分布。然后,我需要对分布参数拟合函数,以获得降雨持续时间与分布参数之间的关系。
给出了每个分布参数的功能。 例如,location参数的功能是: u(d)= a / d ^ b
其中u(d)是所有14个拟合分布的位置参数(对于每个持续时间d),d是持续时间5,10,15,30,45,60,90,120,180,240,300,360,720和1440分钟。我现在需要找到参数a和b
我的问题在于,由于缺乏数学知识和对英语术语的了解,因此不了解如何用R解决问题。我已经开始阅读一些有关deSolve的文章,但是我很快就感到困惑,甚至不确定自己是否走对了轨道。
一个例子
u <- seq(0,60, length.out = 14) # these are the resulting location parameters
d <- c(5,10,15,30,45,60,90,120,180,240,300,360,720,1440)
因此,如果可能的话,我想获得有关如何解决该问题以及如何设置方程式求解代码的建议。
答案 0 :(得分:0)
我想我自己找到了解决方案 使用nls(来自“ stats”软件包)
go func() {
errsOpen := true
succsOpen := true
for errsOpen && succsOpen {
select {
case err,errsOpen := <- producer.Errors()
batchID := err.Msg.Metadata.(ackMeta).batchID # notice the struct here
statusChan := err.Msg.Metadata.(ackMeta).statusChan
statusChan <- false
close(statusChan)
logs.Debug(appName, "Signalled failure on statusChan for batch ", batchID)
logs.Error(appName, "Failed to publish data to analyzer for batchID: ", batchID, err)
case succ,succsOpen := <- producer.Successes()
batchID := succ.Metadata.(ackMeta).batchID # notice the struct here
statusChan := succ.Metadata.(ackMeta).statusChan
statusChan <- true
close(statusChan)
logs.Debug(appName, "Signalled success on statusChan for batch ", batchID)
logs.Debug(appName, "Successfully published data to analyzer:", succ.Topic, succ.Key, succ.Partition, succ.Offset, succ.Metadata)
}
}
}()
给出了a和b的阈值:
a必须大于0,b必须大于-1
d <- c(5,10,15,30,45,60,90,120,180,240,300,360,720,1440)
mu <- seq(5, 30, length.out = 14)
然后我可以设置功能
start_a <- 0.1 # start-value higher than 0
start_b <- -0.9 # start-value higher than -1
最后使用函数和给定的起始估算值运行nls
mu_fun <- function(a,d,b) {
a/(d^b) }