R 非线性全最小二乘/德明回归

R 非线性全最小二乘/德明回归,r,regression,R,Regression,我一直在使用nls()将自定义模型拟合到我的数据中,但我不喜欢模型的拟合方式,我希望使用一种最小化x轴和y轴上残差的方法 我做了大量的搜索,找到了适合线性模型的解决方案,如deming软件包()和这些stackoverflow帖子:。我还发现了matlab解决方案(),但它们适合二阶多项式,而不是自定义的用户定义模型 我想要的是类似于nls()的东西,它实现了x和y残差的最小化。这将允许我输入自定义模型。有人知道R中的任何解决方案吗 非常感谢 编辑 这里有一个例子,但请注意,我正在寻求关于非线性

我一直在使用
nls()
将自定义模型拟合到我的数据中,但我不喜欢模型的拟合方式,我希望使用一种最小化x轴和y轴上残差的方法

我做了大量的搜索,找到了适合线性模型的解决方案,如deming软件包()和这些stackoverflow帖子:。我还发现了matlab解决方案(),但它们适合二阶多项式,而不是自定义的用户定义模型

我想要的是类似于
nls()
的东西,它实现了x和y残差的最小化。这将允许我输入自定义模型。有人知道R中的任何解决方案吗

非常感谢

编辑

这里有一个例子,但请注意,我正在寻求关于非线性总体最小二乘回归的一般解决方案的建议,而不是特定于此数据集的建议(这只是一个基于以下数据的示例):


dfCrossValidated的G.Grothendieck和Brian Borchers建议使用onls软件包,这正是我想要的。谢谢大家,非常感谢你们的帮助。有关更多信息,请参见此处:

下面是一个使用上面相同数据的示例-这提供了与常规的
nls()
相同的拟合参数,但是它确实使我的实际数据有所不同。但这至少说明了如何开展这些行动

df <- structure(list(x = c(3, 4, 5, 6, 7, 8, 9, 10, 11), y = c(1.0385, 
1.0195, 1.0176, 1.01, 1.009, 1.0079, 1.0068, 1.0099, 1.0038)), .Names = c("x", 
"y"), row.names = c(NA, -9L), class = "data.frame")

library(onls)
(onlsfit <- onls(y ~ a^b^x, data = df, start = c(a=0.9, b=0.6)))

# define function containing onls fitted parameters for plotting
fit.model <- function(x) {1.0934^0.7242^x}

library(ggplot2)
ggplot(df, aes(x=x, y=y)) + 
    geom_point() + 
    stat_function(fun=fit.model, color="black")

df不是我投了反对票,但问题至少应该显示您所尝试的代码和输入数据。谢谢G.Grothendieck!我添加了一个非线性回归的例子。还想知道是否有人知道非线性TLS模拟。塞纳克斯!也许PCA回归?主成分使拟合线到任意给定点的正交距离最小化。我想你可能被否决了,因为你的问题比stackoverflow更适合交叉验证()谢谢bjoseph,我感谢你的反馈。我会把我的问题贴在那里。此外,我在搜索过程中也遇到了PCA回归,但我想知道这是否只适用于线性情况(不是非线性?)。非常感谢。目前还不完全清楚如何知道某个特定的答案是否是您想要的,但第一点似乎具有很高的杠杆作用,因此,这可能会扭曲与您想要的匹配。如果曲线通常具有高杠杆点,则可以使用稳健拟合方法:
library(robustbase);nlrob(y~a^b^x,df,start=coef(nlsfit),method=“tau”,lower=c(a=0,b=0),upper=2)
。对于正交最小二乘法,您可以尝试使用onls软件包,但我不确定这是否会给出与问题中显示的拟合有很大不同的拟合。
df <- structure(list(x = c(3, 4, 5, 6, 7, 8, 9, 10, 11), y = c(1.0385, 
1.0195, 1.0176, 1.01, 1.009, 1.0079, 1.0068, 1.0099, 1.0038)), .Names = c("x", 
"y"), row.names = c(NA, -9L), class = "data.frame")

library(onls)
(onlsfit <- onls(y ~ a^b^x, data = df, start = c(a=0.9, b=0.6)))

# define function containing onls fitted parameters for plotting
fit.model <- function(x) {1.0934^0.7242^x}

library(ggplot2)
ggplot(df, aes(x=x, y=y)) + 
    geom_point() + 
    stat_function(fun=fit.model, color="black")