R:在nls中使用具有自然对数的方程

时间:2014-06-19 10:59:13

标签: r nonlinear-functions natural-logarithm

美好的一天,

我正在努力研究R和自然对数(ln)。首先,我在R中找不到ln(x)函数。我注意到log(x)与ln(x)相同(当使用ln(x)和计算器时)。

在R:

log(5) = 1.609438

用计算器:

ln(5) = 1.609438
log(5) = 0.69897

我试图在R中拟合一个等式(这正是我在3篇参考文献中找到的):

y = a + b( x / 305 )+ c( x / 305 2 + d ln 305 / x )+ f ln 2 < / SUP>( 305 / <子> X

在R中使用以下语法来使用等式是否正确?

y ~ a + b*(x/305) + c*((x/305)^2) + d*log(305/x) + f*(log(305/x))^2

这个想法是在R中使用nls()这个函数。 提前谢谢!

3 个答案:

答案 0 :(得分:15)

在R中,log是自然对数。在计算器中,log通常表示基数为10的对数。要在R中实现这一点,您可以使用log10函数。

log(5)
## [1] 1.609438
log10
## [1] 0.69897(5)

至于你的公式,似乎是正确的,因为log是自然对数。

答案 1 :(得分:4)

另外我会指出你的模特

y ~ a + b*(x/305) + c*((x/305)^2) + d*log(305/x) + f*(log(305/x))^2

在统计意义上是线性的,在系数中是线性的;它不需要在x中是线性的。

你不需要nls来适应这个模型,你可以使用lm()。

但请记住查看I()函数来表达像(x / 305)^ 2这样的术语。

ETA示例:

aDF <- data.frame(x=abs(rnorm(100)), y=rnorm(100))
lm(y ~ 1 + I(x/305) + I((x/305)^2) + log(305/x) + I(log(305/x)^2), data=aDF)

答案 2 :(得分:0)

在R中,log计算对数,默认情况下为自然对数,log10计算常用(即以10为底)对数,log2计算二进制(即以2为底)对数。常规形式log(x,base)以base为底计算对数。(“ R文档”)