Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将nls拟合到分组数据R_R_Nls - Fatal编程技术网

将nls拟合到分组数据R

将nls拟合到分组数据R,r,nls,R,Nls,我试图将一个非线性模型与整个季节在几个地块上收集的一系列测量值相匹配。下面是来自较大数据集的子样本。 数据: dput(nee.示例) 结构(列表)朱利安=c(159L,159L,159L,159L,159L, 159L,159L,159L,159L,159L,159L,159L,159L,169L,169L,169L, 169L,169L,169L,169L,169L,169L,169L,169L,169L,169L,169L, 169L),blk=结构(c(1L,1L,1L,1L,1L,1L

我试图将一个非线性模型与整个季节在几个地块上收集的一系列测量值相匹配。下面是来自较大数据集的子样本。 数据:

dput(nee.示例) 结构(列表)朱利安=c(159L,159L,159L,159L,159L, 159L,159L,159L,159L,159L,159L,159L,159L,169L,169L,169L, 169L,169L,169L,169L,169L,169L,169L,169L,169L,169L,169L, 169L),blk=结构(c(1L,1L,1L,1L,1L,1L,1L,1L, 1L,1L,1L,1L,1L,2L,2L,2L,2L,2L,2L,2L,2L,2L,2L,2L,2L,2L,2L,2L,2L, 2升,2升,2升,2升),.Label=c(“e”,“w”),class=“factor”),type=structure(c(1L, 1L、1L、1L、1L、1L、1L、1L、1L、1L、1L、1L、1L、1L、2L、2L、2L、, 2L,2L,2L,2L,2L,2L,2L,2L,2L,2L,2L,2L,2L),标签=c(“b”, “g”,class=“factor”),曲线图=c(1L,1L,1L,2L,2L, 2L、2L、3L、3L、3L、3L、1L、1L、1L、1L、2L、2L、2L、2L、2L、2L、2L、2L、, 3L,3L,3L,3L,3L,3L),trt=结构(c(1L,1L,1L,1L, 1L,1L,1L,1L,1L,1L,1L,1L,1L,1L,1L,1L,1L,1L,1L,1L,1L,1L,1L,1L, 1L、1L、1L、1L、1L、1L、1L、1L),.Label=“a”,class=“factor”), 布料=c(25L,50L,75L,100L,0L,25L,50L,75L,100L,0L, 25L,50L,75L,100L,0L,25L,50L,100L,0L,25L,50L,75L, 100L,0L,25L,50L,75L,75L,100L),绘图ID=c(1L,1L,1L, 1L、2L、2L、2L、2L、2L、3L、3L、3L、3L、13L、13L、13L、, 13L、14L、14L、14L、14L、14L、15L、15L、15L、15L、15L、15L、15L、15L ),通量=c(0.76,0.6,0.67,0.7,1.72,1.63,-7.8,0.89, 0.51, 0.76, 0.48, 0.62, 0.18, 0.21, 3.87, 2.44, 1.26, -1.39, 2.18, 1.9, 0.81, -0.04, -0.83, 1.99, 1.55, 0.57, -0.02, -0.16, -ChT=c(18.6,19.1,19.6,19.1,16.5,17.3,18.3, 19, 18.6, 17.2, 18.4, 19, 19.2, 20.6, 22, 21.9, 22.4, 23.8, 20.7, 21.5, 22.5, 23.3, 23.8, 20.1, 20.8, 21.2, 21.8, 21.8, 21.4),PAR=C(129.9,210.2,305.4,796.6,1.3,62.7,149.9, 171.2, 453.3, 1.3, 129.7, 409.3, 610, 1148.6, 1.3, 115.2, 237, 814.6, 1.3, 105.4, 293.4, 472.1, 955.9, 1.3, 100.5, 290467413.6934.2),名称=c(“朱利安”、“布莱克”、“类型”, “plot”、“trt”、“cloth”、“plotID”、“flux”、“ChT”、“par”),class=“data.frame”,row.names=c(NA, -(29L))

我需要在每个日期将以下模型(rec.hyp,如下)拟合到每个绘图,并检索每个julian plotID组合的参数估计值。经过一番探索后,由于分组方面的原因,听起来nlsList将是一个理想的函数:

library(nlme)
rec.hyp <- nlsList(flux ~ Re - ((Amax*par)/(k+par)) | julian/plotID,
             data=nee.example,
             start=c(Re=3, k=300, Amax=5),
             na.action=na.omit)
coef(rec.hyp)
我尝试调整nls.control中的控件以增加最大值和tol,但显示了相同的错误消息。我改变了初始的起始值,但没有用

需要注意的是,我需要使用最小二乘法拟合模型,以便与之前的工作保持一致

问题:

  • 是nlsList中允许的分组结构。换句话说,我可以在julian中嵌套plotID吗?这可能是我犯错误的原因吗

  • 我已经读到,不适当的起始参数估计会导致错误消息,但在更改它们之后,我得到了相同的消息

  • 我觉得我错过了一些简单的事情,但我的大脑已经崩溃了


    提前感谢。

    回答问题1:您的分组结构是正确的。您可以通过对数据子集运行
    nls
    来验证它:

    rec.hyp.test <- nls(flux ~ Re - ((Amax*par)/(k+par)),
                       data=subset(nee.example,julian==159 & plotID==3),
                       start=c(Re=3, k=300, Amax=5),
                       na.action=na.omit)
    coef(rec.hyp.test)
    #        Re           k        Amax 
    # 0.7208943 792.4412287   0.8972519 
    
    coef(rec.hyp)[3,]
    #              Re        k      Amax
    # 159/3 0.7208943 792.4412 0.8972519
    
    发现它不是单调的,我甚至可以说它根本没有任何趋势!我猜,即使你强迫nls为这种情况找到一些解决方案,也很可能是一个虚假的解决方案,所以你可能只想让它不适合(即NA)


    我还建议对输入数据和拟合模型质量进行目视检查。使用
    R
    reformae2
    ggplot2
    等软件包,您可以轻松绘制数百个图形,甚至快速查看它们也可以帮助您避免麻烦

    谢谢你的回复,非常有帮助。是否可以强制
    nls
    完成其他组的模型拟合,即使其他组中存在错误(例如,您在上面绘制的组)?让模型适应“好”的关系,然后回到“坏”的关系进行质量控制,这将是一件好事。否则,我将按照您的建议进行
    重塑
    ggplot2
    以识别异常值,然后重新运行
    nlsList
    模型。1。查看
    coef(rec.hyp)
    输出--
    nlsList
    自动完成分析并返回导致错误的组的
    NA
    。2.我认为目视检查将是一个好主意,无论您的数据在拟合方面是“好”还是“坏”。3.我还建议您看看
    shinny
    软件包,它可以用来为您的质量控制程序构建一个漂亮而闪亮的GUI
    rec.hyp.test <- nls(flux ~ Re - ((Amax*par)/(k+par)),
                       data=subset(nee.example,julian==159 & plotID==3),
                       start=c(Re=3, k=300, Amax=5),
                       na.action=na.omit)
    coef(rec.hyp.test)
    #        Re           k        Amax 
    # 0.7208943 792.4412287   0.8972519 
    
    coef(rec.hyp)[3,]
    #              Re        k      Amax
    # 159/3 0.7208943 792.4412 0.8972519
    
    plot(flux~par,subset(nee.example,julian==159 & plotID==1))