如何获得 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。
您可以执行以下操作。
基于 x
、y
和 C
的前两个条目(根据您的编辑)完成一个明确的示例是说明性的。我们可以使用基 R 的函数 solve
求解 A
和 B
的两个线性方程组 -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
我们通过将 x
和 y
值的矩阵乘以系数 A
和 B
[= 来验证 sol
确实是一个解38=]
mat %*% sol
# [,1]
#[1,] -8.965961
#[2,] -8.883207
正如预期的那样,这些只是 C
的前两个值,所以一切都很好:-)
为了求解所有的线性方程组x
、y
和[=17中的2个条目的组合=]我们可以用combn
得到所有的组合,然后用和上面一样的方法。结果对象 res
是一个矩阵,其系数为 A
和 B
两行
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
现在很容易计算A
和B
的系数值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
现在想求出下式中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。
您可以执行以下操作。
基于
求解x
、y
和C
的前两个条目(根据您的编辑)完成一个明确的示例是说明性的。我们可以使用基 R 的函数solve
A
和B
的两个线性方程组-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
我们通过将
x
和y
值的矩阵乘以系数A
和B
[= 来验证sol
确实是一个解38=]mat %*% sol # [,1] #[1,] -8.965961 #[2,] -8.883207
正如预期的那样,这些只是
C
的前两个值,所以一切都很好:-)为了求解所有的线性方程组
x
、y
和[=17中的2个条目的组合=]我们可以用combn
得到所有的组合,然后用和上面一样的方法。结果对象res
是一个矩阵,其系数为A
和B
两行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
现在很容易计算
A
和B
的系数值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