标签: nls

R:nls()公式中的多项式快捷符号

使用线性模型函数lm()多项式公式可以包含如下的快捷符号:

m <- lm(y ~ poly(x,3))
Run Code Online (Sandbox Code Playgroud)

这是一个快捷方式,使用户不必创建x ^ 2和x ^ 3变量或在公式中键入它们I(x^2) + I(x^3).是否有非线性函数的可比表示法nls()

r formula nls lm

3
推荐指数
2
解决办法
1806
查看次数

使用nls重现PROC NLIN输出

我想在R中实现以下SAS代码.

$$ N_e = N_o {1-exp [\ frac {(d + bN_o)(T_h N_e - T)} {(1 + c N_o)}]} $$

其中$ b> 0 $,$ c\geq 0 $,$ T_h> 0 $,$ T = 72 $.

SAS代码是

 DATA NOTONECT;
  INPUT N0  REP FATE    NE  N02 N03 PROPEAT;
  DATALINES;
5   1   0   0   25  125 0
5   2   0   1   25  125 0.2
5   3   0   1   25  125 0.2
5   4   0   2   25  125 0.4
5   5   0 …
Run Code Online (Sandbox Code Playgroud)

r sas nls

3
推荐指数
1
解决办法
1510
查看次数

在nls中处理0错误 - R脚本

有没有办法让我的nls在非线性拟合时有0个残差?在我的数据中有一些情况,其中拟合应该有0错误,但是nls总是失败并且吐出错误.

谁能告诉我:

  1. 如何测试这是否是由nls吐出的错误?
  2. 如何允许0个错误案例?(完美契合)

这是我的nls电话:

fit <- nls(y ~ ifelse(g, m1 * (x - x0) + y0, m2 * (x - x0) + y0),
            start = c(m1 = -1, m2 = 1, y0 = 0, x0 = split),
            algorithm = "port",
            lower = c(m1 = -Inf, m2 = -Inf, y0 = -Inf, x0 = split),
            upper = c(m1 = Inf, m2 = Inf, y0 = Inf, x0 = (split+1)),
            data=data.frame(x,y))
Run Code Online (Sandbox Code Playgroud)

r nonlinear-functions nls

3
推荐指数
1
解决办法
702
查看次数

如何获得一周的第一天,取决于NLS

我想获得一周中第一天的日期,但我希望它依赖于NLS参数.比如说,当我在美国运行它应该给我星期日约会,但在土耳其它应该给我星期一..

select trunc(to_date(sysdate,'dd-mm-yy'),'iw')from dual;
Run Code Online (Sandbox Code Playgroud)

我怎样才能依赖它?

oracle nls

3
推荐指数
1
解决办法
1万
查看次数

nls - 收敛错误

对于此数据集:

dat = structure(list(x = c(5L, 5L, 5L, 5L, 10L, 10L, 10L, 10L, 15L, 
15L, 15L, 15L, 17L, 17L, 17L, 17L, 20L, 20L, 20L, 20L, 20L, 20L, 
20L, 20L, 22L, 22L, 22L, 22L, 24L, 24L, 24L, 24L, 25L, 25L, 25L, 
25L, 27L, 27L, 27L, 27L, 30L, 30L, 30L, 30L, 35L, 35L, 35L, 35L), 
y = c(2.2, 2.2, 1.95, 1.9, 4.1, 3.95, 3.75, 3.4, 5.15, 4.6, 
4.75, 5.15, 3.7, 4.1, 3.9, 3.5, 7, 6.7, 6.7, 6.95, 4.95, 6, 6.45, 
6.4, 7, …
Run Code Online (Sandbox Code Playgroud)

r nls convergence

3
推荐指数
1
解决办法
1163
查看次数

使用ggplot2拟合nls - 类型为"symbol"的错误对象不是子表

我正在尝试使用以下数据与ggplot配合: df <- data.frame(t = 0:30, m = c(125.000000, 100.248858, 70.000000, 83.470795, 100.000000, 65.907870, 66.533715, 53.588087, 61.332351, 43.927435, 40.295448, 44.713459, 32.533143, 36.640336, 40.154711, 23.080295, 39.867928, 22.849786, 35.014645, 17.977267, 21.159180, 27.998273, 21.885735, 14.273962, 13.665969, 11.816435, 25.189016, 8.195644, 17.191337, 24.283354, 17.722776)

我到目前为止的代码(有点简化)是

ggplot(df, aes(x = t, y = m)) +
geom_point() +
geom_smooth(method = "nls", formula=log(y)~x)
Run Code Online (Sandbox Code Playgroud)

但是我收到以下错误

Error in cll[[1L]] : object of type 'symbol' is not subsettable
Run Code Online (Sandbox Code Playgroud)

我浏览了stackoverflow并发现了类似的问题,但我无法解决问题.我真的想在不改变轴的情况下绘制数据.

任何帮助深表感谢.

r curve-fitting nls ggplot2 data-fitting

3
推荐指数
1
解决办法
3754
查看次数

将nls拟合为分组数据R.

我试图将非线性模型拟合到整个季节中几个地块上收集的一系列测量数据中.以下是较大数据集的子样本.数据:

dput(nee.example)结构(列表(julian = c(159L,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,1L,2L,2L,2L,2L,2L,2L,2L,2L,2L,2L,2L,2L,2L,2L,2L),.标签= 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),. Label = c("b","g"),class ="factor"),plot = c(1L ,1L,1L,1L,2L,2L,2L,2L,2L,3L,3L,3L,3L,3L,1L,1L,1L,1L,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),.标签="a",类="因子"),布= 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),plotID = c(1L,1L,1L,1L,2L,2L,2L,2L,2L,3L,3L,3L,3L,3L,13L,13L,13L, 13L,14L,14L,14L,14L,14L,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,-2.12),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,290,467,413.6,934.2)),. Name = c("julian","blk","type","plot","trt","cloth","plotID", "flux","ChT","par"),class ="data.frame",row.names = c(NA,-29L))"flux","ChT","par"),class ="data.frame",row.names = c(NA,-29L))"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)
Run Code Online (Sandbox Code Playgroud)

但是我一直收到相同的错误消息:

Error in nls(formula = formula, data = data, start = start, control = …
Run Code Online (Sandbox Code Playgroud)

r nls

3
推荐指数
1
解决办法
1202
查看次数

在R中使用nls重新创建研究

我正在学习如何在R中使用nls函数,并且遇到了一些问题.我现在只是试图重新创建研究论文中的曲线.该模型符合1987年股市崩盘前股市走势的曲线.

我已经定义了一个函数func,如下所示:

func <- function(a,b,tc,t){
 a+b*log(tc-t)
}
Run Code Online (Sandbox Code Playgroud)

我这样打电话给nls:

nls1 <- nls(Y ~ func(a,b,tc,t), data2, start=list(a=0, b=1, tc=1466, t=1))
Run Code Online (Sandbox Code Playgroud)

data2是一个由两列组成的数据框,一列是日期,另一列是值.有1466行.

head(data2)
 Date      Y
1  1/4/82 882.52
2  1/5/82 865.30
3  1/6/82 861.02
4  1/7/82 861.78
5  1/8/82 866.53
6 1/11/82 850.46
Run Code Online (Sandbox Code Playgroud)

我运行nls时收到以下消息,

Error in qr(.swts * attr(rhs, "gradient")) : 
  dims [product 4] do not match the length of object [1466]

In addition: Warning message:

In .swts * attr(rhs, "gradient") :
  longer object length is not a multiple of shorter object length …
Run Code Online (Sandbox Code Playgroud)

r nls

2
推荐指数
1
解决办法
1580
查看次数

R语言,非线性模型公式预测

我用一组数据 (x, y) 拟合指数公式。然后我想根据公式计算 y 值,其中 x 值超出实际数据集。它不起作用,总是打印实际 x 值的 y 值。这是代码。我做错了什么?我的 R 语言任务的解决方案是什么:

data <- data.frame(x=seq(1,69), y=othertable[1:69, 2])
nlsxypw <- nls(data$y ~ a*data$x^b, col2_60, start=list(a=2200000, b=0))
predict(nlsxypw)
#here I want to calculate the y values for x = 70-80
xnew <- seq(70, 80, 1)
predict(nlsxypw, xnew)

#it doesn't print these values, still the actual values for x=1~69.
Run Code Online (Sandbox Code Playgroud)

r nls predict

2
推荐指数
1
解决办法
864
查看次数

在 R 中,如何从“nls”模型对象中提取帽子/投影/影响矩阵或值?

对于lmglm类型对象,甚至lmer类型对象,您可以使用 R 函数从模型中提取帽子值hatvalues()。然而,显然这不适用于nls对象。我用谷歌搜索了各种方法,但找不到获取这些值的方法。是否nls根本不创建帽子矩阵,或者非线性最小二乘模型产生的帽子值是否不可靠?

可重现的例子:

xs = rep(1:10, times = 10)
ys = 3 + 2*exp(-0.5*xs)
for (i in 1:100) {
xs[i] = rnorm(1, xs[i], 2)
}
df1 = data.frame(xs, ys)
nls1 = nls(ys ~ a + b*exp(d*xs), data=df1, start=c(a=3, b=2, d=-0.5))
Run Code Online (Sandbox Code Playgroud)

r nls non-linear-regression

2
推荐指数
1
解决办法
3087
查看次数