Our full technical support staff does not monitor this forum. If you need assistance from a member of our staff, please submit your question from the Ask a Question page.


Log in or register to post/reply in the forum.

Data Processing in CRBasic--linear regression


EricWinegar Dec 28, 2015 08:05 PM

Does anyone have any experience in doing linear regression in a CRBasic situation?  Any code to share?  I want to compare two variables on an on-going basis, and plot the regression equation along with the actual data in RTMC Pro.  Of course, the alternative is post-processing, but it would be of value to do it on an continuing basis.

Thanks


aps Dec 30, 2015 03:41 PM

Can I suggest you have a look at the CovSpa or Covariance instructions which calculate most of the statistics necessary to perform a regression online.   I know others have used these instructions in the past for regressions, but I do not have any simple program examples to share.

Andrew


aps Dec 30, 2015 03:44 PM

Going back almost 10 years I found an example in an old archive.  Hopefully you can work from this:

'CR1000 Series Datalogger
'Demonstrates how to do a linear regression either on a block of stored data or
'it could be done on data coming in real-time, with the regression calculated over a given
'time interval.
'Uses the Covariance instruction to do the stats.

'Declare Public Variables
'Example:

Public Rdata(10,2), regdata(2),i, j, doit As Boolean
Public slope, offset

'Some test data
Data -4,2
Data 4,7
Data -10,45
Data 2,34
Data 4,45
Data -23,167



'Define Data Tables
'This table is a working table which calculates the stats.
'The result is calculated when "doit" is set true or is could be at fixed
'intervals by including a datainterval command.
DataTable (Test,doit,-1)
  Covariance (2,Regdata,FP2,False,2)
  Average(2,regdata,fp2,false)	
EndTable



'Main Program
BeginProg

'Read the test data into an array. x and y values.  
For i= 1 To 10   
    Read Rdata(i,1)
    Read Rdata(i,2)
Next i

i=1

Scan (1,Sec,0,0)
  'Load the test data into a two element array, a pair at a time
   Regdata(1)=Rdata(i,1)
   Regdata(2)=Rdata(i,2)
   If i=6 Then  'Every 6th call calculate the stats
     doit=true
     i=0
     EndIf
   CallTable Test
   doit=false
   i=i+1
   'Calculate the slope as Covariance/Variance
   Slope=test.regdata_Cov(2)/test.regdata_Cov(1)
   'Solve for the offset using the averages
   offset=test.regdata_Avg(2)-slope*test.regdata_Avg(1)
   
	NextScan
EndProg


EricWinegar Jan 3, 2016 01:17 AM

Thanks for digging that up.

Log in or register to post/reply in the forum.