我正在尝试使用LINEST函数调试我遇到的问题。根据版本,我似乎得到了不同的结果。特别是Excel 2007与更高版本。
出于......原因......我试图产生仅使用一部分值的二次回归。诀窍是子集可以根据用户输入动态变化。
以下是我发现错误的具体案例的数据:
Y keep x x^2
1 1 .0001 .00000001
2 1 .0001 .00000001
3 1 .0024 .00000576
4 1 .0024 .00000576
5 1 .0037 .00000729
6 0 0 0
7 0 0 0
8 0 0 0
9 0 0 0
10 0 0 0
我使用keep变量来产生拦截。这是我用来获取系数的实际函数:
b2: LINEST(Table[y], Table[[keep]:[x^2]], FALSE, FALSE)
b1: INDEX(LINEST(Table[y], Table[[keep]:[x^2]], FALSE, FALSE),2)
b0: INDEX(LINEST(Table[y], Table[[keep]:[x^2]], FALSE, FALSE),3)
这似乎在excel的更高版本中正常工作,我得到b2的值为1588628.76。在Excel 2007中,我的值为0.显然这是一个问题。
我无法在版本之间的LINEST实现中找到任何记录的差异。是否有人知道差异是什么以及我如何能够使这个功能对版本差异具有鲁棒性?
答案 0 :(得分:0)
经过一番思考之后,我决定最好回到数学上来确保一个强大的解决方案。这是我使用的:
b2: =INDEX(MMULT(MMULT(MINVERSE(MMULT(TRANSPOSE(Table[[keep]:[x^2]]),Table[[keep]:[x^2]])),TRANSPOSE(Table[[keep]:[x^2]])),Table[y]),3)
b1: =INDEX(MMULT(MMULT(MINVERSE(MMULT(TRANSPOSE(Table[[keep]:[x^2]]),Table[[keep]:[x^2]])),TRANSPOSE(Table[[keep]:[x^2]])),Table[y]),2)
b0: =INDEX(MMULT(MMULT(MINVERSE(MMULT(TRANSPOSE(Table[[keep]:[x^2]]),Table[[keep]:[x^2]])),TRANSPOSE(Table[[keep]:[x^2]])),Table[y]),1)