在R

时间:2019-02-18 21:48:05

标签: r solver differential-equations

我正在使分布适合数据集。我需要根据给定的函数/公式调整分布的参数。我不知道该如何解决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)

因此,如果可能的话,我想获得有关如何解决该问题以及如何设置方程式求解代码的建议。

1 个答案:

答案 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) }