请教多元线性回归C++算法或程序

请教多元线性回归C++算法或程序,第1张

多元线性回归大含袜C++程序滚激:

Dim a() As String, b() As String

Private Sub Command1_Click()

Dim temp1 As String

Dim i As Integer, k As Integer

temp1 = Text1.Text

a = Split(temp1, ",")

lenolds = Len("->")

For i = 0 To UBound(a)

s = a(i)

j = InStr(s, "->")

Do While j >0

ReDim Preserve b(i, k)

b(i, k) = Val(Left(s, j + lenolds))

s = Left(s, j - 1) + "->" + Mid(s, j + lenolds + 1)

k = k + 1

j = InStr(s, "老侍->")

Loop

ReDim Preserve b(i, k)

b(i, k) = s

Next i

For i = 0 To UBound(a)

For j = 0 To k

Text2.Text = Text2.Text + b(i, j)

Next j

Next i

End Sub

LINEST使用最小二乘法对已知数据进行最佳直线拟合,并返回描述此直线的数组。因为此函数返回数值数组,所以必须以数组公式的形式输入。语法LINEST(known_y's,known_x's,const,stats)Known_y's

是关系表达式

y

=

mx

+

b

中已知的

y

值集合。如果数组

known_y's

在单独一列中,则

known_x's

的每一列被视为一个独立的变量。

如果数组

known-y's

在单独一行中,则

known-x's

的每一行被视为一个独立的变量。

Known_x's

是关系表达式

y

=

mx

+

b

中已知的可选

x

值集合。数组

known_x's

可以包含一组或多组变量。如果只用到一个变量,只要

known_y's

known_x's

维数相同,它们可以是任何形状的区域。如果用到多个变量,则

known_y's

必腔老须为向量(即必伍正升须为一行或一列)。

如果省略

known_x's,则假设该数组为

{1,2,3,...},其大小与

known_y's

相同。

Const

为一逻辑值,用于指定是否将常清陆量

b

强制设为

0。如果

const

TRUE

或省略,b

将按正常计算。

如果

const

FALSE,b

将被设为

0,并同时调整

m

值使

y

=

mx。

Stats

为一逻辑值,指定是否返回附加回归统计值。如果

stats

TRUE,则

LINEST

函数返回附加回归统计值,这时返回的数组为

{mn,mn-1,...,m1,bsen,sen-1,...,se1,sebr2,seyF,dfssreg,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

的方法的详细信息,请参阅本主题后面的“说明”。seyY

估计值的标准误差。FF

统计或

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

函数使用最小二乘法来判定最适合数据的模型。当只有一个自变量

x

时,m

b

是根据下面的公式计算出的:

其中

x

y

是样本平均值,例如

x

=

AVERAGE(known

x's)

y

=

AVERAGE(known_y's)。直线和曲线函数

LINEST

LOGEST

可用来计算与给定数据拟合程度最高的直线或指数曲线。但需要判断两者中哪一个更适合数据。可以用函数

TREND(known_y's,known_x's)

来计算直线,或用函数

GROWTH(known_y's,

known_x's)

来计算指数曲线。这些不带参数

new_x's

的函数可在实际数据点上根据直线或曲线来返回

y

的数组值,然后可以将预测值与实际值进行比较。还可以用图表方式来直观地比较二者。

回归分析时,Microsoft

Excel

计算每一点的

y

的估计值和实际值的平方差。这些平方差之和称为残差平方和

(ssresid)。然后

Microsoft

Excel

计算总平方和

(sstotal)。当

const

=

TRUE

或被删除时,总平方和是

y

的实际值和平均值的平方差之和。当

const

=

FALSE

时,总平方和是

y

的实际值的平方和(不需要从每个

y

值中减去平均值)。回归平方和

(ssreg)

可通过公式

ssreg

=

sstotal

-

ssresid

计算出来。残差平方和与总平方和的比值越小,判定系数

r2

的值就越大,r2

是表示回归分析公式的结果反映变量间关系的程度的标志。r2

等于

ssreg/sstotal。

在某些情况下,一个或多个

X

列可能没有出现在其他

X

列中的预测值(假设

Y's

X's

位于列中)。换句话说,删除一个或多个

X

列可能导致同样精度的

y

预测值。在这种情况下,这些多余的

X

列应该从回归模型中删除。这种现象被称为“共线”,原因是任何多余的

X

列被表示为多个非多余

X

列的和。LINEST

将检查是否存在共线,并在识别出来之后从回归模型中删除任何多余的

X

列。由于包含

0

系数以及

0

se's,所以已删除的

X

列能在

LINEST

输出中被识别出来。如果一个或多个多余的列被删除,则将影响

df,原因是

df

取决于被实际用于预测目的的

X

列的个数。有关计算

df

的详细信息,请参阅下面的示例

4。如果由于删除多余的

X

列而更改了

df,则也会影响

sey

F

的值。实际上,共线应该相对很少发生。但是,很可能引起共线的情况是,当某些

X

列仅包含

0's

1's

作为一个实验中的对象是否属于某个组的指示器。如果

const

=

TRUE

或被删除,则

LINEST

可有效地插入所有

1's

的其他

X

列以便模型化截取。如果有一列,1

对应于每个男性的对象,0

对应于非男性对象,还有一列,1

对应于每个女性对象,0

对应于非女性对象,那么后一列就是多余的,原因是其中的项可通过从所有

1's(由

LINEST

添加)的另一列中减去“男性指示器”列中的项来获得。

df

的计算方法,如下所示(没有

X

列由于共线而从模型中被删除):如果存在

known_x's

k

列和

const

=

TRUE

或被删除,那么

df

=

n

k

1。如果

const

=

FALSE,那么

df

=

n

-

k。在这两种情况下,每次由于共线而删除一个

X

列都会使

df

1。

对于返回结果为数组的公式,必须以数组公式的形式输入。

当需要输入一个数组常量(如

known_x's)作为参数时,以逗号作为同一行中数据的分隔符,以分号作为不同行数据的分隔符。分隔符可能因“区域设置”中或“控制面板”的“区域选项”中区域设置的不同而有所不同。

注意,如果

y

的回归分析预测值超出了用来计算公式的

y

值的范围,它们可能是无效的。

示例

1

斜率和

Y

轴截距如果您将示例复制到空白工作表中,可能会更易于理解该示例。 *** 作方法创建空白工作簿或工作表。

请在“帮助”主题中选取示例。不要选取行或列标题。

从“帮助”中选取示例

Ctrl+C。

在工作表中,选中单元格

A1,再按

Ctrl+V。

若要在查看结果和查看返回结果的公式之间切换,请按

Ctrl+`(重音符),或在“工具”菜单上,指向“公式审核”,再单击“公式审核模式”。

12345AB已知

y已知

x10945273公式公式=LINEST(A2:A5,B2:B5,,FALSE)

注释

示例中的公式必须以数组公式输入。在将公式复制到一张空白工作表后,选择以公式单元格开始的区域

A7:B7。按

F2,再按

Ctrl+Shift+Enter。如果公式不是以数组公式输入,则返回单个结果值

2。当以数组输入时,将返回斜率

2

y

轴截距

1。示例

2

简单线性回归如果您将示例复制到空白工作表中,可能会更易于理解该示例。 *** 作方法创建空白工作簿或工作表。

请在“帮助”主题中选取示例。不要选取行或列标题。

从“帮助”中选取示例

Ctrl+C。

在工作表中,选中单元格

A1,再按

Ctrl+V。

若要在查看结果和查看返回结果的公式之间切换,请按

Ctrl+`(重音符),或在“工具”菜单上,指向“公式审核”,再单击“公式审核模式”。

1234567AB月销售131002450034400454005750068100公式说明(结果)=SUM(LINEST(B2:B7,

A2:A7)*{9,1})估算第

9

个月的销售值

(11000)通常,SUM({m,b}*{x,1})

等于

mx

+

b,即给定

x

值的

y

的估计值。也可以使用

TREND

函数。

123456789101112ABCDE底层面积

(x1)办公室的个数

(x2)入口个数

(x3)办公楼的使用年数

(x4)办公楼的评估值

(y)23102220142,00023332212144,000235631.533151,00023793243150,00024022353139,00024254223169,000244821.599126,00024712234142,90024943323163,00025174455169,00025402322149,000公式=LINEST(E2:E12,A2:D12,TRUE,TRUE)


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12560216.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存