Agora uma versão de cálculo de correlação de Pearson em VBA usando o Access. Este cálculo é mais fácil de fazer no VBA, porque já há a função interna de cálculo de desvio padrão.
Segue:
Public Function Correlacao(Coluna1 As String, Coluna2 As String, Tabela As String) As Double Dim s As String Dim rs As DAO.Recordset Correlacao = 0 Dim where As String 'Descrever quais são os critérios de valores válidos 'No meu caso, só queria valores entre 1 e 5 where = "[X] > 0 AND [X] < 6 AND [Y] > 0 AND [Y] < 6" where = Replace(where, "X", Coluna1) where = Replace(where, "Y", Coluna2) Dim dCol1 As Double Dim dCol2 As Double dCol1 = DStDev("[" & Coluna1 & "]", Tabela, where) 'Função interna dCol2 = DStDev("[" & Coluna2 & "]", Tabela, where) 'Função interna If dCol1 = 0 Or dCol2 = 0 Then GoTo exitFunction Dim dV As Double dV = dCol1 * dCol2 ' (Avg([P2k]*[P8])-Avg([P2k])*Avg([P8])) '(Avg([P2k]*[P8])-Avg([P2k])*Avg([P8])) s = "SELECT (Avg([X] * [Y]) - (Avg([X]) * Avg([Y]))) AS C FROM [Tabela] WHERE " & where & ";" s = Replace(s, "X", Coluna1) s = Replace(s, "Y", Coluna2) s = Replace(s, "Tabela", Tabela) 'Uma função minha que inclui tratamentos de erros. 'Em essência é CurrentDB.OpenRecordset(stringSQL, RecordsetTypeEnum) Set rs = DAORecordset(s, dbOpenSnapshot) If rs Is Nothing Then GoTo exitFunction If rs.EOF And rs.BOF Then GoTo exitFunction Dim dCorrel1 As Double dCorrel1 = rs(0).Value / dV Correlacao = dCorrel1 exitFunction: Set rs = Nothing End Function |
Para usar:
doubleCorrel = Correlacao(nomeColuna1, nomeColuna2, nomeTabelaOuConsulta) |
Espero que ajude alguém!!!