我有一个Excel散点图,它有一个趋势线和R2值。
如何将趋势线的R平方值返回到变量?
我想:
x = ActiveChart.SeriesCollection(1).Trendlines(1).Datalabel.Value
但这不起作用。
我知道我们可以使用RSQ和LINEST直接计算,但是当截取时,零值表格图表与通过LINEST计算的不同。我想记录图表中的值。
答案 0 :(得分:3)
你可以尝试:
x = Val (Split(ActiveChart.SeriesCollection(1).Trendlines(1).DataLabel.Text, "=")(1))
如果同时显示公式,则使用第三个元素(id 2)
x = Val (Split(ActiveChart.SeriesCollection(1).Trendlines(1).DataLabel.Text, "=")(2))
要完全确定位置,可以使用:
Public Function GetR2() As Single
Dim sArray() As String
sArray = Split(ActiveChart.SeriesCollection(1).Trendlines(1).DataLabel.Text, "=")
GetR2 = CSng(sArray(UBound(sArray)))
End Function
如果你想坚持一行,那么这也适用于两种情况
x = Val(Split(ActiveChart.SeriesCollection(1).Trendlines(1).DataLabel.Text,“R²=”)(1))
答案 1 :(得分:0)
这有效:
Dim iR2 As Long, iEqual As Long
Dim linearFitLabel As String
Dim strR2 As String
Dim r2 As Double
'Get the trendline label; may contain equation in addition to R²
linearFitLabel = ActiveChart.SeriesCollection(1).Trendlines(1).DataLabel.Text
iR2 = InStr(linearFitLabel, "R²") ' find string "R²"
iEqual = InStr(iR2, linearFitLabel, "=") ' find equal sign after that
r2 = CDbl(Trim(Mid(linearFitLabel, iEqual + 1))) ' convert everything after = into a number
MsgBox "R² displayed on chart: " & r2
但请注意,返回的值将取决于图表中显示的R²值的数字格式。所以你不会得到R²的实际值,只是为了显示目的而得到一些精确的值。
其他信息
要真的很干净,我可能想从头开始计算R²。 The formula可以写成Excel公式:
=1-SUMPRODUCT((B3:B10-(A3:A10*INDEX(LINEST(B3:B10,A3:A10,NOT($D$4)),1)+INDEX(LINEST(B3:B10,A3:A10,NOT($D$4)),2)))^2)/SUMPRODUCT((B3:B10-AVERAGE(B3:B10))^2)
无论线性拟合截距是否设置为零(单元格D4),这仍然有效:
与否:
通过一些努力,这个Excel公式可以重写为VBA。