Notifications
Clear all

Ajuda LogEst no VBA

8 Posts
3 Usuários
0 Reactions
1,837 Visualizações
(@mueldavc)
Posts: 24
Eminent Member
Topic starter
 

Bom dia pessoal.

Gostaria de informações a respeito de como aplicar a WorksheetFunction.LogEst pelo VBA.
Sucintamente se trata de uma forma de correlacionar uma variavel de pendente (y) com mais de uma independente (x). usando a função PROJ.LOG no excel gera uma matriz de 5 por quantidade de variáveis + 1, estou tentando ter o mesmo resultado pelo vba, mas não me parece ser a mesma metodologia.
Se alguém dos senhores puderen me ajudar...

Abraço

Davi Muela

 
Postado : 19/02/2014 6:39 am
Wagner Morel
(@wagner-morel-vidal-nobre)
Posts: 0
Illustrious Member
 

mueldavc,

Boa Tarde!

Bem... não entendo nada do assunto a que você se refere na sua mensagem (pendente/independente/matriz, etc). Por isso mesmo não posso ajudar melhor.

Todavia, não sei se você já recorreu ao próprio Help da Microsoft. Caso contrário, segue abaixo o mesmo:

Referência sobre o desenvolvedor do Excel 
WorksheetFunction.Método Proj.Log 
Na análise de regressão, calcula uma curva exponencial adequada aos dados e retorna uma matriz de valores que descrevem a curva. Como essa função retorna uma matriz de valores, ela deve ser inserida como uma fórmula matricial.
Sintaxe

expressão.LogEst(Arg1, Arg2, Arg3, Arg4)

expressão   Uma variável que representa um objeto WorksheetFunction.

Parâmetros

Nome Obrigatório/Opcional Tipo de dados Descrição 
Arg1 Obrigatório Variant Val_conhecidos_y - o conjunto de valores y que você já conhece na relação y = b*m^x. 
Arg2 Opcional Variant Val_conhecidos_x - um conjunto opcional de valores x que você talvez já conheça na relação y = b*m^x. 
Arg3 Opcional Variant Constante - um valor lógico que especifica a necessidade de forçar ou não a constante b igual a zero. 
Arg4 Opcional Variant Estatísticas - um valor lógico especificando a necessidade de retornar ou não estatísticas adicionais de regressão. 

Valor de retorno
Variant

Comentários


A equação para a curva é:

y = b*m^x ou

y = (b*(m1^x1)*(m2^x2)*_) (se houver vários valores x)

onde o valor y dependente é uma função dos valores x independentes. Os valores m são bases correspondentes a cada valor x expoente e b é um valor constante. Observe que y, x e m podem ser vetores. A matriz que PROJ.LOG retorna é {mn,mn-1,...,m1,b}.

Se a matriz val_conhecidos_y estiver em uma única coluna, cada coluna de val_conhecidos_x será interpretada como uma variável separada. 
Se a matriz val_conhecidos_y estiver em uma única linha, cada linha de val_conhecidos_x será interpretada como uma variável separada. 
A matriz val_conhecidos_x pode incluir um ou mais conjuntos de variáveis. Se apenas uma variável for usada, val_conhecidos_y e val_conhecidos_x podem ser intervalos de qualquer formato, desde que tenham dimensões iguais. Se mais de uma variável for usada, val_conhecidos_y deverá ser um intervalo de células com altura de uma linha ou largura de uma coluna (também conhecido como vetor). 
Se val_conhecidos_x for omitido, pressupõe-se que a matriz {1,2,3,...} seja do mesmo tamanho que val_conhecidos_y. 
Se constante for VERDADEIRO ou omitido, b será calculado normalmente.

Se constante for FALSO, b será igual a 1 e os valores m serão ajustados para y = m^x.

Se estatísticas for VERDADEIRO, PROJ.LOG retornará as estatísticas adicionais de regressão; portanto, a matriz retornada será {mn,mn-1,...,m1,b;sen,sen-1,...,se1,seb;r 2,sey; F,df;ssreg,ssresid}. 
Se estatísticas for FALSO, PROJ.LOG retornará apenas coeficientes m e a constante b. 
Para obter mais informações sobre estatísticas adicionais de regressão, consulte PROJ.LIN.

Quanto mais a plotagem de seus dados lembrar uma curva exponencial, melhor a linha calculada os acomodará. Como PROJ.LIN, PROJ.LOG retorna uma matriz de valores que descreve uma relação entre os valores, mas PROJ.LIN adequa uma linha reta aos dados; PROJ.LOG adequa uma curva exponencial. Para obter mais informações, consulte PROJ.LIN.
Quando você tiver apenas uma variável x independente, poderá obter os valores de intercepção y diretamente usando as seguintes fórmulas: 
Intercepção Y (b):
ÍNDICE(PROJ.LOG(val_conhecidos_y,val_conhecidos_x),2)

Você pode usar a equação y = b*m^x para prever valores futuros de y, mas o Microsoft Excel fornece a função CRESCIMENTO para isso. Para obter mais informações, consulte CRESCIMENTO.

As fórmulas que fornecem matrizes devem ser inseridas como fórmulas matriciais.
Ao inserir uma constante, como um argumento val_conhecidos_x, use vírgulas na mesma linha e ponto-e-vírgulas para separar linhas. Os caracteres separadores podem ser diferentes dependendo da configuração da localidade em Opções Regionais e de Idioma no Painel de Controle.
Lembre-se de que os valores y previstos pela equação de regressão talvez não sejam válidos se estiverem fora do intervalo dos valores y usados para determinar a equação.

Desenvolvo pequenas soluções em VBA Excel a valores que variam entre R$ 50,00 a R$ 200,00. Se te interessar, entre no meu instagran (vba_excel_desenvolvimento)

Atenciosamente
Wagner Morel

 
Postado : 19/02/2014 10:48 am
(@mueldavc)
Posts: 24
Eminent Member
Topic starter
 

Olá Wagner.

Obrigado pela ajuda, mas realmente eu já tinha lido o help do excel. Fazendo normalmente no excel é tranquilo, o problema é que eu queria fazer isso no VBA, mas no VBA eu não to sabendo fazer funcionar.

Obrigado mesmo assim.
Abraço

Davi Muela

 
Postado : 19/02/2014 11:29 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Monte um modelo com as formulas e o resultado esperado, creio que assim, mesmo quem não conhece o assunto (eu também não o conheço)pode montar algo ou dar alguma sugestão de como proceder no VBA

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 19/02/2014 2:19 pm
(@mueldavc)
Posts: 24
Eminent Member
Topic starter
 

Olá Reinaldo.
Em anexo segue um modelo...

Se trata de uma regressão multi logaritmica.
Quando gravo a fórmula com VBA fica então nesse formato:

Range("O2:T7").Select
Selection.FormulaArray = "=LOGEST(RC[-4]:R[1]C[-4],RC[-10]:R[1]C[-6],1,1)"

Mais ou menos, acho que as referencias de colunas e linhas não estão muito corretas... Eu conheço a fórmula do VBA WorksheetsFunction.LogEst(y,x,true,true), mas não estou conseguindo o mesmo resultado. Porque quero fazer testes e as referencias de linhas iram mudar e de acordo com o grau de correlação a linha sera selecionada ou não...
Se puderem me ajudar, ficarei muito agradecido.

Davi Muela

 
Postado : 20/02/2014 6:43 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Pode-se utilizar em VB assim:

Sub LogEst()
Dim Val_Conhec_Y As Range, Val_Conhec_X As Range, Retorno()

Set Val_Conhec_Y = Worksheets("Regressão").Range("F2:F8")
Set Val_Conhec_X = Worksheets("Regressão").Range("A2:E8")
 
Retorno = Application.WorksheetFunction.LogEst(Val_Conhec_Y, Val_Conhec_X, 1, 1)
Worksheets("Regressão").Range("A13:F17") = Retorno
End Sub

Crei que o mais dificil é determinar o tamanho da range de saida (Retorno)

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 20/02/2014 7:41 am
(@mueldavc)
Posts: 24
Eminent Member
Topic starter
 

Reinaldo vc é Rei...

Era isso mesmo, muito obrigado pela ajuda =D...
Funcionol direitinho.

Abraço a todos...

Davi Muela

 
Postado : 20/02/2014 11:00 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Caso seja necessário reabrir o tópico, o autor poderá enviar uma MP para um dos moderadores solicitando o desbloqueio.

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 20/02/2014 3:42 pm