Advertisement
Guest User

Untitled

a guest
Oct 4th, 2017
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. program regression
  2. implicit none
  3.  
  4. real                      :: a
  5. real                      :: b1
  6. real                      :: b2
  7. real                      :: fTest
  8. integer                   :: i
  9. integer                   :: k
  10. integer                   :: n
  11. real                      :: rSquared
  12. real                      :: ssReg
  13. real                      :: ssRes
  14. real                      :: sumX1
  15. real                      :: sumX1X1
  16. real                      :: sumX1X1_norm
  17. real                      :: sumX1X2
  18. real                      :: sumX1X2_norm
  19. real                      :: sumX1Y
  20. real                      :: sumX1Y_norm
  21. real                      :: sumX2
  22. real                      :: sumX2X2
  23. real                      :: sumX2X2_norm
  24. real                      :: sumX2Y
  25. real                      :: sumX2Y_norm
  26. real                      :: sumY
  27. real                      :: sumYY
  28. real                      :: sumYY_norm
  29. real,         allocatable :: x1(:)
  30. real,         allocatable :: x2(:)
  31. real,         allocatable :: y(:)
  32. character(3), allocatable :: yName(:)
  33.  
  34.  
  35. ! Parameters
  36. k = 2
  37. n = 30
  38.  
  39.  
  40. ! Allocations
  41. allocate(yName(n), y(n), x1(n), x2(n))
  42.  
  43. sumX1   = 0
  44. sumX1X1 = 0
  45. sumX1X2 = 0
  46. sumX1Y  = 0
  47. sumX2   = 0
  48. sumX2X2 = 0
  49. sumX2Y  = 0
  50. sumY    = 0
  51. sumYY   = 0
  52.  
  53.  
  54. ! Data
  55. yName = [ "WSH", "PIT", "CHI", "CBJ", "MIN", "ANA", "MTL", "EDM", "NYR", "STL", &
  56.         & "SJS", "OTT", "BOS", "TOR", "CGY", "NSH", "NYI", "TBL", "PHI", "WPG", &
  57.         & "CAR", "LAK", "FLA", "DAL", "DET", "BUF", "NJD", "ARI", "VAN", "COL"  ]
  58.    
  59. y     = [ 55, 50, 50, 50, 49, 46, 47, 47, 48, 46, 46, 44, 44, 40, 45, &
  60.         & 41, 41, 42, 39, 40, 36, 39, 35, 34, 33, 33, 28, 30, 30, 22  ]
  61.        
  62. x1    = [ 263, 282, 244, 249, 266, 223, 226, 247, 256, 235, 221, 212, 234, 251, 226, &
  63.         & 240, 241, 234, 219, 249, 215, 201, 210, 223, 207, 201, 183, 197, 182, 166  ]
  64.        
  65. x2    = [ 182, 234, 213, 195, 208, 200, 200, 212, 220, 218, 201, 214, 212, 242, 221, &
  66.         & 224, 242, 227, 236, 256, 236, 205, 237, 262, 244, 237, 244, 260, 243, 278  ]
  67.        
  68.        
  69. ! Preliminary calculations
  70. do i = 1, n
  71.    sumY    = sumY    + y(i)
  72.    sumX1   = sumX1   + x1(i)
  73.    sumX2   = sumX2   + x2(i)
  74.    sumYY   = sumYY   + y(i)  * y(i)
  75.    sumX1X1 = sumX1X1 + x1(i) * x1(i)
  76.    sumX2X2 = sumX2X2 + x2(i) * x2(i)
  77.    sumX1Y  = sumX1Y  + x1(i) * y(i)
  78.    sumX2Y  = sumX2Y  + x2(i) * y(i)
  79.    sumX1X2 = sumX1X2 + x1(i) * x2(i)
  80. enddo
  81.  
  82. sumYY_norm   = sumYY   - (sumY)**2       / n
  83. sumX1X1_norm = sumX1X1 - (sumX1)**2      / n
  84. sumX2X2_norm = sumX2X2 - (sumX2)**2      / n
  85. sumX1Y_norm  = sumX1Y  - (sumX1 * sumY)  / n
  86. sumX2Y_norm  = sumX2Y  - (sumX2 * sumY)  / n
  87. sumX1X2_norm = sumX1X2 - (sumX1 * sumX2) / n
  88.  
  89.  
  90. ! Calculate regression slopes and intercept
  91. b1 = (sumX2X2_norm * sumX1Y_norm - sumX1X2_norm * sumX2Y_norm) / &
  92.    & (sumX1X1_norm * sumX2X2_norm - sumX1X2_norm**2)
  93. b2 = (sumX1X1_norm * sumX2Y_norm - sumX1X2_norm * sumX1Y_norm) / &
  94.    & (sumX1X1_norm * sumX2X2_norm - sumX1X2_norm**2)
  95. a  = (sumY - b1 * sumX1 - b2 * sumX2) / n
  96. write(*,*) b1, b2, a
  97.  
  98. ! Calculate sum of squares, R values
  99. ssReg = b1 * sumX1Y_norm + b2 * sumX2Y_norm
  100. ssRes = sumYY_norm - ssReg
  101. rSquared = ssReg / sumYY_norm
  102. fTest = (ssReg / k) / (ssRes / (n - k - 1))
  103. write(*,*) ssReg, ssRes, rSquared, fTest
  104.  
  105.  
  106. ! Write out pertinent info to file.
  107. open(96, file = 'regression_output.txt')
  108.    do i = 1, n
  109.       write(96, '(F6.4, F6.4)') y(i), a + b1 * x1(i) + b2 * x2(i)
  110.    end do
  111. close(96)
  112.  
  113. end program
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement