声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 2686|回复: 5

[VB] 求多元回归程序

[复制链接]
发表于 2007-6-29 21:50 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
求多元回归程序!最好是运用VB语言编的,谢谢!:handshake
回复
分享到:

使用道具 举报

 楼主| 发表于 2007-7-2 08:58 | 显示全部楼层

十万火急

:'( 怎么没有人响应啊!
发表于 2007-7-2 10:57 | 显示全部楼层
多元回归的vb实现

  1. On Error Resume Next
  2. Dim x() As Double
  3. Dim y() As Double
  4. Dim xz() As Double
  5. Dim c() As Double
  6. Dim d() As Double
  7. Dim a() As Double
  8. Dim am, bm, cm As Double
  9. Dim y1() As Double

  10. ReDim x(m, n)
  11. ReDim y(m)
  12. ReDim y1(m)
  13. ReDim xz(n, m)
  14. ReDim c(n, 2 * n)
  15. ReDim d(n, m)
  16. ReDim a(n)
  17. For i = 1 To m
  18. x(i, 1) = 1
  19. Next i
  20. For i = 1 To m
  21.   For j = 2 To n
  22.      x(i, j) = VSFGrid1.TextMatrix(i, j - 1)
  23.   Next j
  24. Next i

  25. For i = 1 To m
  26.   y(i) = VSFGrid1.TextMatrix(i, n)
  27. Next i

  28. 'a=(x'*x)^-1*x'*y
  29. For i = 1 To n
  30. For j = 1 To m
  31.    xz(i, j) = x(j, i)   '转置
  32.   
  33. Next j
  34. Next i

  35. For i = 1 To n
  36.   For j = 1 To 2 * n
  37.     If j = i + n Then
  38.       c(i, j) = 1
  39.     Else
  40.       c(i, j) = 0
  41.     End If
  42.   Next j
  43. Next i

  44. For i = 1 To n
  45.   For j = 1 To n
  46.     For k = 1 To m
  47.       c(i, j) = c(i, j) + xz(i, k) * x(k, j) '求xz()*x()
  48.     Next k
  49.   Next j
  50. Next i


  51. For k = 1 To n '用主元除主元所在行的所有元素
  52.   am = 1 / c(k, k) '将主元变为1
  53.   For j = k To 2 * n
  54.     c(k, j) = c(k, j) * am
  55.   Next j

  56. '____________________________________
  57.   For i = k + 1 To n '将原矩阵变为下三角矩阵
  58.     bm = c(i, k)
  59.     For j = 1 To 2 * n
  60.       c(i, j) = c(i, j) - c(k, j) * bm
  61.     Next j
  62.   Next i
  63. Next k
  64. '------------------------------------------------
  65. For k = 2 To n
  66.   For i = 1 To k - 1 '将下三角矩阵变为单位阵
  67.     cm = c(i, k)
  68.     For j = k To 2 * n
  69.       c(i, j) = c(i, j) - c(k, j) * cm
  70.     Next j
  71.   Next i
  72. Next k
  73. '------------------------------------------------

  74. For i = 1 To n
  75.   For j = 1 To n
  76.     c(i, j) = c(i, j + n)
  77.   Next j
  78. Next i


  79. For i = 1 To n
  80.   For j = 1 To m
  81.     For k = 1 To n
  82.       d(i, j) = d(i, j) + c(i, k) * xz(k, j)
  83.     Next k
  84.   Next j
  85. Next i

  86. For i = 1 To n
  87.   For j = 1 To m
  88.     a(i) = a(i) + d(i, j) * y(j)
  89.   Next j
  90. Next i
  91. For i = 1 To n
  92. If VSFGrid1.TextMatrix(0, i) = "" Then
  93.   VSFGrid1.TextMatrix(0, i) = "变量" & i
  94. End If
  95. Next i

  96. VSFGrid1.TextMatrix(0, n + 1) = "回归值"
  97. VSFGrid1.TextMatrix(0, n + 2) = "偏差值"

  98. For k = 1 To m
  99. y1(k) = a(1)
  100. For i = 1 To n - 1
  101.   
  102. y1(k) = y1(k) + Val(VSFGrid1.TextMatrix(k, i)) * a(i + 1)
  103. VSFGrid1.TextMatrix(k, n + 1) = y1(k)
  104. Next i
  105. Next k

  106. For k = 1 To m
  107. VSFGrid1.TextMatrix(k, n + 2) = Val(VSFGrid1.TextMatrix(k, n)) - Val(VSFGrid1.TextMatrix(k, n + 1))
  108. Next k

  109. For k = 1 To m
  110. Dim pfh, ypfh, yp, sz, sh, ss, f, r, bzc As Double

  111.   pfh = pfh + y(k) * y(k)
  112.   ypfh = ypfh + y1(k) * y1(k)
  113.   yp = yp + y(k) / m
  114.   yp = yp * yp


  115. Next k
  116. sz = pfh - m * yp
  117. sh = ypfh - m * yp
  118. ss = sz - sh
  119. f = sh / (n - 1) / (ss / (m - n))
  120. r = (sh / sz) ^ 0.5
复制代码
 楼主| 发表于 2007-7-5 10:35 | 显示全部楼层

谢谢风花雪月

万分感谢!我先研究研究,不懂的地方还请指教!:handshake
 楼主| 发表于 2007-7-5 22:00 | 显示全部楼层

回复 #3 风花雪月 的帖子

请问这个程序是基于最小二乘法的吗?各个变量所代表的意思能不能给我介绍一下啊,麻烦你了,谢谢!我正在研究的东西是基于最小二乘法的多元线性或者非线性逐步回归法,由于起步不叫晚所学的还不是很深入,以后还请您多多指教!再次感谢
发表于 2007-7-23 15:19 | 显示全部楼层
原帖由 lidong007106 于 2007-7-5 22:00 发表
请问这个程序是基于最小二乘法的吗?各个变量所代表的意思能不能给我介绍一下啊,麻烦你了,谢谢!我正在研究的东西是基于最小二乘法的多元线性或者非线性逐步回归法,由于起步不叫晚所学的还不是很深入,以后还 ...


自己读一下吧,程序又不复杂
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-10 22:41 , Processed in 0.059951 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表