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!!!
Deixe um comentário