使用自然对数方程在nls中

19

您好,

我在使用R和自然对数(ln)方面遇到了一些困难。首先,在R中我找不到ln(x)函数。我注意到使用计算器时log(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 ln2(305/x)

在R中使用以下语法来使用此方程是否正确?

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

使用这个函数配合R中的nls()函数。

提前感谢!


2
在R中,log表示自然对数。这是数学家的惯例,因为“常用”对数没有数学意义。 “ln”缩写是为了让学生更容易理解而引入的。 - James King
3
要了解 log 的作用,您不需要计算器,只需阅读文档:help("log")。您的公式看起来正确。 - Roland
3个回答

38
在R中,log表示自然对数。在计算器中,log通常表示以10为底的对数。要在R中实现这个功能,可以使用log10函数。
log(5)
## [1] 1.609438
log10(5)
## [1] 0.69897

关于你的公式,看起来是正确的,因为log是自然对数。

谢谢你的回答!我已经预料到了,只是需要确认一下。再次感谢! - wernerfeuer

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)

1
在R中,log函数计算对数,默认为自然对数;log10函数计算常用(即以10为底)对数;log2函数计算二进制(即以2为底)对数。一般形式的log(x, base)函数可以计算指定底数的对数。(“R文档”)

请格式化你的回答。你可以在 https://stackoverflow.com/help/how-to-answer 找到关于格式化的信息和技巧。 - Ignacio Lago

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接