主题
LinEst (方法)
使用最小二乘法对已知数据进行最佳直线拟合,并返回描述此直线的数组。因为此函数返回数值数组,所以必须以数组公式的形式输入。
说明
直线的公式为:
y = mx + b 或者
y = m1x1 + m2x2 + ... + b(如果有多个区域的 x 值)
式中,因变量 y 是自变量 x 的函数值。M 值是与每个 x 值相对应的系数,b 为常量。注意 y、x 和 m 可以是向量。LINEST 函数返回的数组为 {mn,mn-1,...,m1,b}。LINEST 函数还可返回附加回归统计值。
- 如果数组 known_y's 在单独一列中,则 known_x's 的每一列被解释为一个独立的变量。
- 如果数组 known_y's 在单独一行中,则 known_x's 的每一行被解释为一个独立的变量。
- known_x's 数组可以包括一组或多组自变量。如果仅使用一个变量,那么只要 known_x's 和 known_y's 具有相同的维数,则它们可以是任何形状的区域。如果用到多个变量,则 known_y's 必须为向量(即必须为一行或一列)。
- 如果省略 known_x's,则假定该数组为 {1,2,3,...},其大小与 known_y's 相同。
- 如果 const 为 TRUE 或被省略,b 将按正常方式计算。
- 如果 const 为 FALSE,b 将被设为 0,并同时调整 m 值使 y = mx。
- 如果 stats 为 TRUE,则 LINEST 函数返回附加回归统计值,这时返回的数组为 {mn,mn-1,...,m1,b;sen,sen-1,...,se1,seb;r2,sey;F,df;ssreg,ssresid}。
- 如果 stats 为 FALSE 或省略,LINEST 函数只返回系数 m 和常量 b。
附加回归统计值如下:
统计值 | 说明 |
---|---|
se1,se2,...,sen | 系数 m1,m2,...,mn 的标准误差值。 |
seb | 常量 b 的标准误差值(当 const 为 FALSE 时,seb = #N/A)。 |
r2 | 判定系数。Y 的估计值与实际值之比,范围在 0 到 1 之间。如果为 1,则样本有很好的相关性,Y 的估计值与实际值之间没有差别。如果判定系数为 0,则回归公式不能用来预测 Y 值。有关计算 r2 的方法的详细信息,请参阅本主题后面的“注解”。 |
sey | y 估计值的标准误差。 |
F | F 统计或 F 观察值。使用 F 统计可以判断因变量和自变量之间是否偶尔发生过可观察到的关系。 |
df | 自由度。用于在统计表上查找 F 临界值。所查得的值和 LINEST 函数返回的 F 统计值的比值可用来判断模型的置信度。有关如何计算 df,请参阅在此主题中后面的“注解”。示例 4 注解了 F 和 df 的使用。 |
ssreg | 回归平方和。 |
ssresid | 残差平方和。有关计算 ssreg 和 ssresid 的方法的详细信息,请参阅本主题后面的“注解”。 |
- 可以使用斜率和 y 轴截距描述任何直线: 斜率 (m): 通常记为 m,如果需要计算斜率,则选取直线上的两点,(x1,y1) 和 (x2,y2);斜率等于 (y2 - y1)/(x2 - x1)。 Y 轴截距 (b): 通常记为 b,直线的 y 轴的截距为直线通过 y 轴时与 y 轴交点的数值。 直线的公式为 y = mx + b。如果知道了 m 和 b 的值,将 y 或 x 的值代入公式就可计算出直线上的任意一点。还可以使用 TREND 函数。
- 当只有一个自变量 x 时,可直接利用下面公式得到斜率和 y 轴截距值: 斜率: =INDEX(LINEST(known_y's,known_x's),1) Y 轴截距: =INDEX(LINEST(known_y's,known_x's),2)
- 数据的离散程度决定了 LINEST 函数计算的精确度。数据越接近线性,LINEST 模型就越精确。LINEST 函数使用最小二乘法来判定最适合数据的模型。
- 直线和曲线函数 LINEST 和 LOGEST 可用来计算与给定数据拟合程度最高的直线或指数曲线。但需要判断两者中哪一个更适合数据。可以用函数 TREND(known_y's,known_x's) 来计算直线,或用函数 GROWTH(known_y's, known_x's) 来计算指数曲线。这些不带参数 new_x's 的函数可在实际数据点上根据直线或曲线来返回 y 的数组值,然后可以将预测值与实际值进行比较。还可以用图表方式来直观地比较二者。
- 回归分析时,ET 计算每一点的 y 的估计值和实际值的平方差。这些平方差之和称为残差平方和 (ssresid)。然后 ET 计算总平方和 (sstotal)。当 const = TRUE 或被删除时,总平方和是 y 的实际值和平均值的平方差之和。当 const = FALSE 时,总平方和是 y 的实际值的平方和(不需要从每个 y 值中减去平均值)。回归平方和 (ssreg) 可通过公式 ssreg = sstotal - ssresid 计算出来。残差平方和与总平方和的比值越小,判定系数 r2 的值就越大,r2 是表示回归分析公式的结果反映变量间关系的程度的标志。r2 等于 ssreg/sstotal。
- 某些情况下,一个或多个 X 列(假设 Y's 和 X's 位于列中)在有其他 X 列的情况下可能没有附加的预测值。换句话说,删除一个或多个 X 列可能并不影响 Y 预测值的精度。在这种情况下,应该从回归模型中略去这些冗余的 X 列。这种现象被称为“共线性”,因为任何冗余的 X 列都可以表示为多个非冗余的 X 列的和。LINEST 检查共线性,并在识别出任何冗余的 X 列以后从回归模型中删除这些列。可以在 LINEST 输出中识别出已删除的 X 列,因为这些列的系数为 0 并且 se's 也为 0。如果一个或多个列被作为冗余列删除,则 df 会受到影响,因为 df 取决于实际用于预测的 X 列的个数。有关计算 df 的详细信息,请参阅下面的例 4。如果由于删除冗余的 X 列而改变了 df,则 sey 和 F 的值也会受到影响。实际上,共线性应该相对稀有。但是,很有可能出现共线性的一种情况是,某些 X 列仅包含 0's 和 1's 作为某个实验中的对象是否属于某个组的指示器。如果 const = TRUE 或被省略,LINEST 可以有效插入一个所有 1's 的附加 X 列,以建立截距模型。假定有一列,1 表示相应对象是男性,0 表示相应对象不是男性;另有一列,1 表示相应对象是女性,0 表示相应对象不是女性,那么,后一列就是冗余的,因为从 LINEST 添加的所有 1's 的附加列中的项减去“男性指示器”列中的项就可以得到后一列中的项。
- 如果没有任何 X 列因共线性而从模型中删除,则 df 的计算方法如下所示:如果存在 known_x's 的 k 列且 const = TRUE 或被省略,则 df = n – k – 1。如果 const = FALSE,则 df = n - k。在这两种情况下,只要因共线性删除一个 X 列,df 就会加 1。
- 对于返回结果为数组的公式,必须以数组公式的形式输入。
- 当输入一个数组常量(如 known_x's)作为参数时,用逗号来分隔同一行中的值,用分号来分隔不同的行。分隔符可能因**“控制面板”中的“区域和语言选项”**中区域设置的不同而有所不同。
- 注意,如果 y 的回归分析预测值超出了用来计算公式的 y 值的范围,它们可能是无效的。
- LINEST 函数中使用的基础算法与 SLOPE 和 INTERCEPT 函数中使用的基础算法不同。这些算法间的差异可能在共线数据不确定时导致不同的结果。例如,如果 known_y's 参数的数据点个数为 0,而 known_x's 参数的数据点个数为 1:
- LINEST 返回值 0。LINEST 算法经过特殊设计,可为共线数据返回合理的结果,而在本例中,可以找到至少一个答案。
- SLOPE 和 INTERCEPT 返回 #DIV/0! 错误。SLOPE 和 INTERCEPT 算法设计为寻找唯一一个答案,而在本例中可能有多个答案。
参数
属性 | 数据类型 | 必填 | 说明 |
---|---|---|---|
Arg1 | any | 必填 | Known_y's - 关系表达式 y = mx + b 中已知的 y 值集合。 |
Arg2 | any | 可选 | Known_x's - 关系表达式 y = mx + b 中可能已知的可选 x 值集合。 |
Arg3 | any | 可选 | Const - 一个逻辑值,用于指定是否强制常量 b 等于 0。 |
Arg4 | any | 可选 | Stats - 一个逻辑值,指定是否返回附加回归统计值。 |
返回值
Variant
示例
javascript
/*本示例为A1等单元格分别赋值,使用 LinEst 方法获取最小二乘法计算出最适合数据的直线来计算直线的统计信息,并将描述该直线的数组分别赋值给B4等单元格。*/
function test() {
Range("A1").Value2 = 100
Range("A2").Value2 = 88
Range("B1").Value2 = 8.3
Range("B2").Value2 = 6.5
Range("B4:C4").Value2 = WorksheetFunction.LinEst(Range("A1:A2"), Range("B1:B2"), true, true)
Range("B5:C5").Value2 = WorksheetFunction.LinEst(Range("A1:A2"), Range("B1:B2"), false, false)
}
javascript
/*本示例为C1等单元格分别赋值,使用 LinEst 方法获取最小二乘法计算出最适合数据的直线来计算直线的统计信息,并显示描述该直线的数组。*/
function test() {
Range("C1").Value2 = 111
Range("C2").Value2 = 245
Range("D1").Value2 = 10
Range("D2").Value2 = 18.6
let arr = WorksheetFunction.LinEst(Range("C1:C2"), Range("D1:D2"))
console.log(arr.toString())
}