声明:任何人可以修改此代码并个人无偿使用此程序,但不得商用,否则将追究法律责任。此文中包含大量共性程序模块,希望有志于统计学程序代码国产化的同仁与我协作,其它大量代码将来适当时机会公开,最后将以教材方式与大家见面。
try段请置于工作表代码中,其它置于类模块中。
Public Qe As Double, U As Double, SSY As Double, VARY As Double, AVEY As Double
Public fEQUATION As Double, pEQUATION As Double, B0 As Double, SB0 As Double
Public inter As Integer, NAMEY As String
Sub try()
Dim m As Integer, n As Integer
m = 142: n = 13
ReDim XY(m, n) As Double, NAME_(n) As String
Dim I, J
Dim TOOL As New LINE20110328ok
For I = 1 To n
NAME_(I) = Cells(1, I)
For J = 1 To m
XY(J, I) = Val(Cells(1 + J, I))
Next
Next
ReDim ave(n) As Double, var(n) As Double, Uvalue(n) As Double, _
PVALUE(n) As Double, bi(n) As Double, sbi(n) As Double
TOOL.ONEY_REGRESS XY, n, m, NAME_, ave, var, Uvalue, PVALUE, bi, sbi
For I = 1 To TOOL.inter
Cells(10 + m, I + 1) = ave(I)
Cells(11 + m, I + 1) = var(I)
Cells(12 + m, I + 1) = bi(I)
Cells(13 + m, I + 1) = sbi(I)
Cells(14 + m, I + 1) = Uvalue(I)
Cells(15 + m, I + 1) = PVALUE(I)
Cells(9 + m, I + 1) = NAME_(I)
Cells(10 + m, 1) = "ave(I)"
Cells(11 + m, 1) = "var(I)"
Cells(12 + m, 1) = "bi(I)"
Cells(13 + m, 1) = "sbi(I)"
Cells(14 + m, 1) = "Uvalue(I)"
Cells(15 + m, 1) = "PVALUE(I)"
Cells(9 + m, 1) = "NAME_(I)"
Next
Cells(10 + m, TOOL.inter + 3) = TOOL.AVEY
Cells(11 + m, TOOL.inter + 3) = TOOL.VARY
Cells(12 + m, TOOL.inter + 3) = TOOL.B0
Cells(13 + m, TOOL.inter + 3) = TOOL.SB0
Cells(14 + m, TOOL.inter + 3) = TOOL.fEQUATION
Cells(15 + m, TOOL.inter + 3) = TOOL.pEQUATION
Cells(16 + m, TOOL.inter + 3) = TOOL.Qe
Cells(17 + m, TOOL.inter + 3) = TOOL.SSY
Cells(10 + m, TOOL.inter + 2) = "AVEY"
Cells(11 + m, TOOL.inter + 2) = "VARY"
Cells(12 + m, TOOL.inter + 2) = "B0"
Cells(13 + m, TOOL.inter + 2) = "SB0"
Cells(14 + m, TOOL.inter + 2) = "fEQUATION"
Cells(15 + m, TOOL.inter + 2) = "pEQUATION"
Cells(16 + m, TOOL.inter + 2) = "Qe"
Cells(17 + m, TOOL.inter + 2) = "SSY"
End Sub
Sub ONEY_REGRESS(XY() As Double, ByVal Nxy As Integer, ByVal NSAMPLES As Integer, _
NAME_() As String, ave() As Double, var() As Double, Uvalue() As Double, _
PVALUE() As Double, bi() As Double, sbi() As Double)
''' 单因变量回归方程
Dim newInter As Integer '''single_y_x_into single_y_x_out 共用变量
Dim I As Integer, J As Integer, K As Integer
newInter = 0 '@@@@@@@@@@@
ReDim Newrelative(Nxy, Nxy) As Double
ReDim Newr0(Nxy, Nxy) As Double
simple_r XY, Nxy, NSAMPLES, Newrelative, ave, var
For I = 1 To Nxy
For J = 1 To Nxy
Newr0(I, J) = Newrelative(I, J)
Next
Next
ReDim BASE(Nxy) As Integer
Do While single_y_x_into(Newr0, Nxy, 0, BASE, Uvalue, newInter, NSAMPLES) '''核心段代码
Do While single_y_x_out(Newr0, Nxy, 0, BASE, Uvalue, newInter, NSAMPLES): Loop '''无变量可出基也无变量可入基时
Loop '''才终止
'''以下为结果数据整理程序
inter = 0
For I = 1 To Nxy - 1
If BASE(I) Then inter = inter + 1
Next
'''拷回原始数据重新计算,以提高精度----------
For I = 1 To Nxy
For J = 1 To Nxy
Newr0(I, J) = Newrelative(I, J)
Next
Next
For K = 1 To Nxy - 1
If BASE(K) Then 紧凑变换 Newr0, Nxy, K
Next
'''-------------拷回原始数据重新计算,以提高精度
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
ReDim LXX_1(inter, inter) As Double, AVEX(inter) As Double, VARX(inter) As Double, _
NAMEX(inter) As String, UVALUEX(inter) As Double, PVALUEX(inter) As Double '''生成Lxx-1及相关均值向量
ReDim order(inter + 1) As Integer '''序数,拷贝数据用
Dim II As Integer: II = 1:
For I = 1 To Nxy - 1
If BASE(I) Then
order(II) = I