gpt4 book ai didi

r - 创建拟合对数模型

转载 作者:行者123 更新时间:2023-12-02 04:20:40 26 4
gpt4 key购买 nike

我正在尝试用我拥有的一些数据绘制洪水频率图表。这是我正在使用的数据类型:

#Set up maximum flow data
flow=sample(seq(10,1000,20),100,replace=TRUE)
flow=as.data.frame(flow[order(flow, decreasing=TRUE)])
names(flow)="max"
#rank flows from largest to smallest
flow$"rank"=seq(1,nrow(flow),1)
#Calculate the return interval in years
flow$"RI"=(nrow(flow)+1)/flow$"rank"
plot(flow$"max"~flow$"RI",type='p',log='xy', xlab='Return Interval', ylab='Max flow')

现在我们有了每年记录的最大流量和复发间隔的估计。现在我想做的是找到最适合的对数线。我一直在尝试使用 nls 函数,但不断出现此错误。

Error in parse(text = x) : <text>:2:0: unexpected end of input
1: ~
^

以下是我使用 nls 函数执行的操作的示例:

logMod = nls((flow$"max"~(a*log10(flow$"RI")+b)),start = list(a = 0, b = 0))

有人可以帮助我并让我知道我在哪里误入歧途吗?

最佳答案

在 nls 公式中指定 data.frame 中的数据时,不应使用 $。您应该使用 data= 参数来指定使用哪个 data.frame 来查找变量值。因此你应该将你的调用更改为

logMod = nls( max ~ (a*log10(RI)+b), data=flow, 
start = list(a = 0, b = 0))

问题似乎是由于使用 a$"b" 而不是更常见的 a$b 造成的。 nls() 使用 all.vars() 提取变量名称。并观察

all.vars(flow$"max" ~ (a * log10(flow$"RI") + b))
# [1] "flow" "a" "b"
all.vars(flow$max ~ (a * log10(flow$RI) + b))
# [1] "flow" "max" "a" "RI" "b"

这是因为当您使用引号时,您不再将列指定为符号/名称以供 all.vars() 查找,而是将它们作为字符值传递,这些字符值是没有提取。因此,在这种情况下 a$ba$"b"

略有不同

此外,正如 @Gregor 指出的那样,如果您只是对其中一个预测变量进行对数变换,那么这基本上仍然是一个线性模型。你可以做

lm( max ~ log10(RI), data=flow)

关于r - 创建拟合对数模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29568831/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com