首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >nlsList -incorrect用法?

nlsList -incorrect用法?
EN

Stack Overflow用户
提问于 2021-12-06 14:49:59
回答 1查看 88关注 0票数 0

我试图在数据集上运行一个非线性回归,以便为每个组运行一个新的回归。数据框架非常类似于这个:

代码语言:javascript
复制
Date <- as.POSIXct(c("2021-05-25","2021-05-20", "2021-05-21","2021-05-22",
"2021-05-23","2021-05-24" ,"2021-05-25","2021-05-20", "2021-05-21","2021-05-22",
"2021-05-23","2021-05-24" ,"2021-05-25","2021-05-20", "2021-05-21","2021-05-22",
"2021-05-23","2021-05-24" ,"2021-05-25","2021-05-20", "2021-05-21","2021-05-22",
"2021-05-23","2021-05-24" ,"2021-05-25"))
Ts <- rnorm(25, mean=10, sd=0.5)
Exp_flux <- 3.5*exp((Ts-10)/10)
Collar <- as.factor(c("t1","t2","t3","t4","t5","t1","t2","t3","t4","t5","t1","t2","t3","t4",
"t5","t1","t2","t3","t4","t5","t1","t2","t3","t4","t5"))
df <- data.frame(Date,Collar,Ts,Exp_flux)

df
         Date Collar        Ts Exp_flux
1  2021-05-25     t1  9.596453 3.361570
2  2021-05-20     t2  8.870983 3.126334
3  2021-05-21     t3 10.011902 3.504168
4  2021-05-22     t4 10.480873 3.672418
5  2021-05-23     t5 10.264998 3.593989
6  2021-05-24     t1 10.196256 3.569368
7  2021-05-25     t2  9.523135 3.337014
8  2021-05-20     t3 10.315953 3.612349
9  2021-05-21     t4  9.510503 3.332801
10 2021-05-22     t5 10.300981 3.606945
11 2021-05-23     t1 10.788605 3.787187
12 2021-05-24     t2 10.226902 3.580323
13 2021-05-25     t3  9.005530 3.168683
14 2021-05-20     t4 10.752006 3.773351
15 2021-05-21     t5  9.335704 3.275051
16 2021-05-22     t1  9.345418 3.278234
17 2021-05-23     t2 10.034693 3.512164
18 2021-05-24     t3 10.754786 3.774401
19 2021-05-25     t4  9.655313 3.381415
20 2021-05-20     t5 10.670903 3.742872
21 2021-05-21     t1  8.986950 3.162801
22 2021-05-22     t2 10.441217 3.657883
23 2021-05-23     t3 10.446326 3.659753
24 2021-05-24     t4 10.550104 3.697931
25 2021-05-25     t5 10.442247 3.658260

我在这里的目的是对每个项圈类型分别运行一个Exp_flux与Ts的回归。我知道我可以将主数据集划分为每个项圈的子集,并手动执行每个回归,但在现实中,有20多个项圈类型,我认为必须有一个更有效的方法来做到这一点。我尝试使用nlme包的nlme函数,它只给出一个空列表,或者(在以前的情况下)只返回第一个项圈:

代码语言:javascript
复制
fit.collars <- nlsList(Exp_Flux ~ SRref*q^((Ts-10)/10)| Collar,
                               data=df,  start=list(SRref=3, q=2), na.action = na.omit )
summary(fit.collars)

Error in class(val) <- c("summary.nlsList", class(val)) : 
  attempt to set an attribute on NULL

我一定是不正确地使用了nlsList函数,但我想不出是怎么回事。关于这个函数的教程在网上是相当稀少的。有人能对此或相对简单的替代方案提出建议吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-12-06 15:24:18

让我引用help("nls")

nls的默认设置通常在人为的“零残差”数据问题上失败.

如果我加了一些白噪音并修正了错误,我就成功地适应了。

代码语言:javascript
复制
set.seed(42)

Date <- as.POSIXct(c("2021-05-25","2021-05-20", "2021-05-21","2021-05-22",
                     "2021-05-23","2021-05-24" ,"2021-05-25","2021-05-20", "2021-05-21","2021-05-22",
                     "2021-05-23","2021-05-24" ,"2021-05-25","2021-05-20", "2021-05-21","2021-05-22",
                     "2021-05-23","2021-05-24" ,"2021-05-25","2021-05-20", "2021-05-21","2021-05-22",
                     "2021-05-23","2021-05-24" ,"2021-05-25"))
Ts <- rnorm(25, mean=10, sd=0.5)
Exp_flux <- 3.5*exp((Ts-10)/10) + rnorm(25, sd = 0.01)
Collar <- as.factor(c("t1","t2","t3","t4","t5","t1","t2","t3","t4","t5","t1","t2","t3","t4",
                      "t5","t1","t2","t3","t4","t5","t1","t2","t3","t4","t5"))
df <- data.frame(Date,Collar,Ts,Exp_flux)

library(nlme)
fit.collars <- nlsList(Exp_flux ~ SRref*q^((Ts-10)/10)| Collar,
                       data=df,  start=list(SRref=3, q=2), na.action = na.omit )
summary(fit.collars)
#works

如果您真的想要一个集合的残差标准错误,请仔细考虑。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70247380

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档