R 语言 非线性最小二乘

  • R 语言 非线性最小二乘

    为回归分析对现实世界的数据建模时,我们观察到很少出现模型方程为线性方程的线性方程的情况。在大多数情况下,现实世界数据模型的方程式包含较高阶的数学函数,例如3的指数或正弦函数。在这种情况下,模型的图给出的是曲线而不是直线。线性回归和非线性回归的目标都是调整模型参数的值,以找到最接近数据的直线或曲线。找到这些值后,我们将能够以较高的准确性估算响应变量。
    在最小二乘回归中,我们建立了一个回归模型,在该模型中,不同点到回归曲线的垂直距离的平方和最小。我们通常从定义的模型开始,并假设一些系数值。然后,我们应用R的nls()函数来获得更准确的值以及置信区间。
    在R中创建非线性最小二乘检验的基本语法是-
    
    nls(formula, data, start)
    
    以下是所用参数的描述-
    • formula - 是包含变量和参数的非线性模型公式。
    • data - 是用于评估公式中变量的数据框。
    • start - 是起始估计的命名列表或命名数字向量。
    我们将考虑一个非线性模型,该模型假定其系数为初始值。接下来,我们将看到这些假定值的置信区间是多少,以便我们可以判断这些值在模型中的表现程度。
    为此,让我们考虑以下等式-
    
    a = b1*x^2+b2
    
    让我们假设初始系数为1和3,并将这些值拟合到nls()函数中。
    
    xvalues <- c(1.6,2.1,2,2.23,3.71,3.25,3.4,3.86,1.19,2.21)
    yvalues <- c(5.19,7.43,6.94,8.11,18.75,14.88,16.06,19.12,3.21,7.58)
    
    # Give the chart file a name.
    png(file = "nls.png")
    
    
    # Plot these values.
    plot(xvalues,yvalues)
    
    
    # Take the assumed values and fit into the model.
    model <- nls(yvalues ~ b1*xvalues^2+b2,start = list(b1 = 1,b2 = 3))
    
    # Plot the chart with new data by fitting it to a prediction from 100 data points.
    new.data <- data.frame(xvalues = seq(min(xvalues),max(xvalues),len = 100))
    lines(new.data$xvalues,predict(model,newdata = new.data))
    
    # Save the file.
    dev.off()
    
    # Get the sum of the squared residuals.
    print(sum(resid(model)^2))
    
    # Get the confidence intervals on the chosen values of the coefficients.
    print(confint(model))
    
    尝试一下
    当我们执行以上代码时,它产生以下结果-
    
    [1] 1.081935
    Waiting for profiling to be done...
           2.5%    97.5%
    b1 1.137708 1.253135
    b2 1.497364 2.496484
    
    nonlinear
    我们可以得出结论,b1的值更接近1,而b2的值更接近2而不是3。