11

Excel は、一連のペア値の散布図を作成します。また、最適なトレンドラインとトレンドラインの数式を生成するオプションも提供します。また、各値に与えられた重みを考慮したバブル ダイアグラムも作成します。ただし、重みはトレンドラインや数式には影響しません。以下は、マッピングと重みを含む値のセットの例です。

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

Excel の傾向線では、値 5 のマッピングが数式に与える影響が大きすぎます。それぞれの重みを反映する式を作成する方法はありますか?

参考として、5 つの連続する値の加重平均を導入しました。しかし、彼らはより良い方法ですか?

4

2 に答える 2

14

A2:C7 のデータを使用して、標準の加重最小二乗式に基づいて、次のことを試すことができます。

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

E2:F2 または任意の 2x1 範囲で CTRL+SHIFT+ENTER を使用して入力します。これも {1.1353,1.4412} を返します。

Rsquared には、次のように入力できます。

=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 上の y の正規回帰を考えてみましょう。const = TRUE の場合、リグレッサー行列は、1 の列とそれに続くリグレッサー列、つまり X'=(1,X) で構成される拡張行列です。const = FALSE の場合、リグレッサー行列は単純に X であるため、1 の列を含めて回帰を実行すると、1 の列を使用せずに const=TRUE を設定して実行した場合と同じ推定値が得られます。

ここで、加重最小二乗回帰を考えてみましょう。回帰は、WX'=(W1,WX) の Wy になりました。ここで、W は重みの平方根で構成される対角行列です。1 の列が存在しないため、const = FALSE に設定し、回帰行列で 2 つの列を使用する必要があります。

R2乗計算

3 行目と 5 行目にある最初の数式の LINEST 出力で stats を TRUE に設定します。

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

const=FALSE であるため、これらの値は非中心バージョン (u) であることに注意してください (詳細については、LINEST の MS ヘルプを参照してください)。

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
于 2012-06-19T07:37:52.000 に答える
1

更新
何万行もあるという追加情報に基づいて、ここに仕事をするVBA UDFがあります(r2を含む)

以下のスクリーンショットによると、拡張されたデータセットが元の回答で行ったのと同じ値と値をm提供しxますr2

ここに画像の説明を入力

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 つのペアをグラフ化しようとするのではなく、最高値と最低値の比率を使用してポイントを繰り返します。

すなわちグラフ

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

ここに画像の説明を入力

于 2012-06-19T02:43:05.727 に答える