Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/73.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
R 创建拟合对数模型_R - Fatal编程技术网

R 创建拟合对数模型

R 创建拟合对数模型,r,R,我正在用我掌握的一些数据绘制洪水频率图。 以下是我正在处理的数据类型: #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)

我正在用我掌握的一些数据绘制洪水频率图。 以下是我正在处理的数据类型:

#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公式中指定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$b
a$“b”

此外,正如@Gregor所指出的,如果你只是对一个预测值进行对数变换,这基本上仍然是一个线性模型。你能行

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

当您收到错误时,它有助于包含您收到的确切错误消息。只需
logMod=nls(max~(a*log10(RI)+b),data=flow,start=list(a=0,b=0))
?使用公式语法时,最好避免使用
$
,除非名称中有有趣的字符,否则通常使用
a$b
比使用
a$“b”
更好!谢谢大家!@Flick先生,作为答案发布?还有。。。没有理由对线性模型使用
nls
。谢谢Flick先生。你知道我该如何在对数/对数尺度上绘制这个图吗?这是一个完全不同的问题。在评论中提出新问题不是个好主意。如果你有不同的问题,你应该提出一个新问题。
lm( max ~ log10(RI), data=flow)