加权趋势线

Excel会为一组值对生成散点图。 它也提供了为趋势线生成最佳拟合趋势线和公式的选项。 它也产生气泡图,考虑到每个值提供的重量。 但重量对趋势线或公式没有影响。 以下是一组示例值及其映射和权重。

Value Map Weight 0 1 10 1 2 10 2 5 10 3 5 20 4 6 20 5 1 1 

使用Excel的趋势线,值5的映射对公式的影响太大。 有什么办法可以产生反映各自权重的公式?

作为帮助,我已经为连续的五个值引入了加权平均值。 但是他们是更好的方法吗?

使用A2:C7中的数据,根据标准加权最小二乘公式,可以尝试:

 =LINEST(B2:B7*C2:C7^0.5,IF({1,0},1,A2:A7)*C2:C7^0.5,0) 

在E2:F2或任何2×1范围内用CTRL + SHIFT + ENTERinput。 这也返回{1.1353,1.4412}。

对于Rsquared,您可以input:

 =INDEX(LINEST((B2:B7-SUM(B2:B7*C2:C7)/SUM(C2:C7))*C2:C7^0.5,IF({1,0},1,A2:A7)*C2:C7^0.5,0,1),3,1) 

公式的解释

首先考虑使用LINEST对X的正常回归。 如果const = TRUE,则回归matrix是由一列紧随回归列(即X'=(1,X))组成的增广matrix。 如果const = FALSE,那么回归matrix就是X,所以使用一列包含的回归运行回归可以得到与没有一列的情况下运行相同的估计,并且设置const = TRUE。

现在考虑加权最小二乘回归。 现在回归WX'=(W1,WX),其中W是由权重的平方根组成的对angularmatrix。 由于不存在列的列,所以我们必须设置const = FALSE并在回归matrix中使用两列。

Rsquared计算

在我们得到的第三和第五行的第一个公式的LINEST输出中将stats设置为TRUE:

 SSres = 59.76 SSreg(u) = 1461.24 SSTot(u) = 1521 Rsq(u) = 1 - 59.76/1521 = 0.9607 

请注意,这些值是非常规版本(u),因为const = FALSE(有关更多信息,请参阅LINEST上的MS帮助)。对于居中版本(c),我们需要减去加权平均值,如下所示:

 SSTot(c) =SUMPRODUCT(C2:C7*(B2:B7-SUM(B2:B7*C2:C7)/SUM(C2:C7))^2) = 244.93 Rsq(c) = 1 - 59.76/244.93 = 0.756 

更新
根据附加信息,你有成千上万的行,这里是一个VBA的UDF,将完成这项工作(包括R2)

按照下面的屏幕截图,它提供了与我的扩展数据集在原始答案中所做的相同的mxr2

在这里输入图像说明

 Public Function LinestWeighted(xRng As Range, yRng As Range, wRng As Range, bInt As Boolean, bStat As Boolean) As Variant Dim x As Variant Dim y As Variant Dim W As Variant Dim TotX As Variant Dim TotY As Variant Dim lngRow As Long Dim strDelim As String Dim strX As String Dim strY As String Dim NewSeries As Variant x = Application.Transpose(xRng) y = Application.Transpose(yRng) W = Application.Transpose(wRng) strDelim = "," If (UBound(x, 1) = UBound(y, 1)) And (UBound(x, 1) = UBound(W, 1)) Then For lngRow = 1 To UBound(W) strX = strX & Application.WorksheetFunction.Rept(x(lngRow) & strDelim, W(lngRow)) strY = strY & Application.WorksheetFunction.Rept(y(lngRow) & strDelim, W(lngRow)) Next lngRow TotX = Split(Left$(strX, Len(strX) - 1), strDelim) TotY = Split(Left$(strY, Len(strY) - 1), strDelim) ReDim NewSeries(1 To UBound(TotX) + 1, 1 To 2) For lngRow = 0 To UBound(TotX) NewSeries(lngRow + 1, 1) = CDbl(TotX(lngRow)) NewSeries(lngRow + 1, 2) = CDbl(TotY(lngRow)) Next With Application LinestWeighted = .WorksheetFunction.LinEst(.Index(.Transpose(NewSeries), 2), .Index(.Transpose(NewSeries), 1), bInt, bStat) End With Else LinestWeighted = "input ranges must be equal in length" Exit Function End If End Function 

初始答案

只是扩大你的数据系列的权重因素

因此,而不是试图绘制6对,使用你的最高和最低的比例来重复的重点

即graphics

 0 1 `10 times` 1 2 `10 times` ... 5 1 `once` 

在这里输入图像描述