如何获得 x 和 y 的斜率系数?

How to get slope coefficients of both x and y?

现在想求出下式中A、B的斜率系数值;

By = Ax + C, where I have 100 sets of x, y and C.

如何解决这个问题并使用 R 获得 A 和 B?


对于不完整的解释,我深表歉意。 我添加了更多细节如下;

现在我的y,x,C三个值如下:

 y <- c(-9216.656,-9134.369,-9186.813,-8780.633,-9006.787)                 
 x <- c(908.4656,932.6687,1015.0424,816.9116,703.2510)                       
 C <- c(-8.965961,-8.883207,-8.935910,-8.546677,-8.766842)

我所知道的是 y、x 和 C 可以用下面的等式来解释;

By = Ax + C

在这种情况下,我可以使用已知的 y、x 和 C 参数来确定 A 和 B 的斜率值吗?

例如,等式可以写成:

-9216.656*B = 908.4656*A -8.965961 (using y[1], x[1], C[1])
-9134.369*B = 932.6687*A -8.883207 (using y[2], x[2], C[2])

我想得到满足上述等式的 A 和 B 的值。如果我理解正确的话,两组y,x和C的每个组合都可以产生一组A和B。

在这里,一组 y、x 和 C 会产生一个方程。我想求解这两个方程的所有组合。在这种情况下,组合的总数应该是

choose(5, 2) = 10.

那么,如果我没理解错的话,我会得到10套A和B。

我的最终目标是计算每个 A 和 B 的平均值和 sd。

您可以执行以下操作。

  1. 基于 xyC 的前两个条目(根据您的编辑)完成一个明确的示例是说明性的。我们可以使用基 R 的函数 solve

    求解 AB 的两个线性方程组 -A x + B y = C
    idx <- c(1, 2)
    mat <- matrix(c(x[idx], y[idx]), ncol = 2)
    sol <- solve(mat, C[idx])
    sol
    #[1] 8.371691e-05 9.810516e-04
    

    我们通过将 xy 值的矩阵乘以系数 AB[= 来验证 sol 确实是一个解38=]

    mat %*% sol
    #          [,1]
    #[1,] -8.965961
    #[2,] -8.883207
    

    正如预期的那样,这些只是 C 的前两个值,所以一切都很好:-)

  2. 为了求解所有的线性方程组xy和[=17中的2个条目的组合=]我们可以用combn得到所有的组合,然后用和上面一样的方法。结果对象 res 是一个矩阵,其系数为 AB 两行

    res <- apply(combn(length(x), 2), 2, function(idx) {
        setNames(solve(matrix(c(x[idx], y[idx]), ncol = 2), C[idx]), c("A", "B"))
    })
    #          [,1]         [,2]         [,3]         [,4]          [,5]
    #A 8.371691e-05 9.311096e-06 0.0001004419 2.732112e-05 -2.208575e-05
    #B 9.810516e-04 9.737176e-04 0.0009827001 9.754928e-04  9.702486e-04
    #          [,6]         [,7]         [,8]         [,9]        [,10]
    #A 9.391842e-05 3.562515e-05 3.819669e-05 2.069634e-05 2.729837e-07
    #B 9.820932e-04 9.761412e-04 9.769091e-04 9.749755e-04 9.733808e-04
    
  3. 现在很容易计算AB的系数值mean/sd;例如,要计算平均值,我们可以使用 rowMeans

    rowMeans(res)
    #           A            B
    #3.874148e-05 9.766710e-04
    

    对于标准差

    apply(res, 1, sd)
    #           A            B
    #4.134705e-05 4.087056e-06