Transformando variáveis ​​para regressão múltipla em R

26

Estou tentando executar uma regressão múltipla em R. No entanto, minha variável dependente tem o seguinte gráfico:

DV

Aqui está uma matriz de dispersão com todas as minhas variáveis ​​( WARé a variável dependente):

SPLOM

Eu sei que preciso executar uma transformação nessa variável (e possivelmente nas variáveis ​​independentes?), Mas não tenho certeza da transformação exata necessária. Alguém pode me apontar na direção certa? Fico feliz em fornecer informações adicionais sobre o relacionamento entre as variáveis ​​independentes e dependentes.

Os gráficos de diagnóstico da minha regressão têm a seguinte aparência:

Parcelas de diagnóstico

EDITAR

Depois de transformar as variáveis ​​dependentes e independentes usando as transformações de Yeo-Johnson, os gráficos de diagnóstico são assim:

Depois de transformar

Se eu usar um GLM com um link de log, os gráficos de diagnóstico são:

GLM com link de log

zgall1
fonte
3
Oi @ zglaa1 e bem-vindo. Por que você acha que precisa transformar as variáveis? O primeiro passo seria ajustar a regressão com as varibales originais e, em seguida, examinar o ajuste (resíduos etc.). Os resíduos devem ser distribuídos aproximadamente normalmente normalmente, não as variáveis. Talvez você ache este post interessante.
COOLSerdash
Obrigado pelo link e pela sugestão. Executei minha regressão e sei que as variáveis ​​precisam ser transformadas com base no seguinte gráfico: i.imgur.com/rbmu14M.jpg Consigo ver imparcialidade e falta de variabilidade constante nos resíduos. Além disso, eles não são normais.
precisa saber é o seguinte
@COOLSerdash Dei uma olhada no link. Eu tenho uma base básica em estatística, então eu entendo a discussão. No entanto, meu problema é que tenho experiência limitada em aplicar as técnicas que aprendi, por isso luto para descobrir o que exatamente preciso fazer com meus dados (no Excel ou no R) para realmente executar as transformações necessárias.
precisa saber é o seguinte
Obrigado pelo gráfico. Você está absolutamente certo ao dizer que esse ajuste é subótimo. Você poderia produzir uma matriz de gráficos de dispersão com os DV e IVs na regressão? Isso pode ser feito Rcom o comando pairs(my.data, lower.panel = panel.smooth)onde my.dataestaria o seu conjunto de dados.
COOLSerdash
2
lmboxcox(my.lm.model)MASSλ

Respostas:

30

O livro de John Fox Um companheiro R para regressão aplicada é um excelente recurso na modelagem de regressão aplicada com R. O pacote carque utilizo nesta resposta é o pacote que o acompanha. O livro também tem como site com capítulos adicionais.


Transformando a resposta (aka variável dependente, resultado)

RlmboxCoxcarλfamily="yjPower"

boxCox(my.regression.model, family="yjPower", plotit = TRUE)

Isso produz um gráfico como o seguinte:

Box-Cox lambdaplot

λλ

Para transformar sua variável dependente agora, use a função yjPowerdo carpacote:

depvar.transformed <- yjPower(my.dependent.variable, lambda)

lambdaλboxCox

Importante: Em vez de apenas transformar a variável dependente em log, considere ajustar um GLM com um link de log. Aqui estão algumas referências que fornecem informações adicionais: primeiro , segundo , terceiro . Para fazer isso R, use glm:

glm.mod <- glm(y~x1+x2, family=gaussian(link="log"))

onde yé a variável dependente e x1, x2etc. são as suas variáveis independentes.


Transformações de preditores

As transformações de preditores estritamente positivos podem ser estimadas pela máxima probabilidade após a transformação da variável dependente. Para fazer isso, use a função boxTidwellda carembalagem (para o documento original, veja aqui ). Use-o assim: boxTidwell(y~x1+x2, other.x=~x3+x4). O importante aqui é que a opção other.xindica os termos da regressão que não devem ser transformados. Essas seriam todas as suas variáveis ​​categóricas. A função produz uma saída do seguinte formato:

boxTidwell(prestige ~ income + education, other.x=~ type + poly(women, 2), data=Prestige)

          Score Statistic   p-value MLE of lambda
income          -4.482406 0.0000074    -0.3476283
education        0.216991 0.8282154     1.2538274

incomeλincomeincomenew=1/incomeold

Outro post muito interessante no site sobre a transformação das variáveis ​​independentes é este .


Desvantagens das transformações

1/yλλ


Modelando relacionamentos não lineares

Dois métodos bastante flexíveis para ajustar relações não lineares são polinômios fracionários e splines . Esses três artigos oferecem uma introdução muito boa aos dois métodos: primeiro , segundo e terceiro . Há também um livro inteiro sobre polinômios fracionários e R. O R pacotemfp implementa polinômios fracionários multivariáveis. Esta apresentação pode ser informativa sobre polinômios fracionários. Para ajustar splines, você pode usar a função gam(modelos aditivos generalizados, consulte aqui uma excelente introdução R) do pacotemgcv ou das funçõesns(splines cúbicos naturais) e bs(splines B cúbicos) do pacote splines(veja aqui um exemplo do uso dessas funções). Usando gamvocê pode especificar quais preditores você deseja ajustar usando splines usando a s()função:

my.gam <- gam(y~s(x1) + x2, family=gaussian())

aqui, x1seria ajustado usando um spline e x2linearmente como em uma regressão linear normal. Dentro, gamvocê pode especificar a família de distribuição e a função de link como em glm. Então, para ajustar um modelo com uma função de log-link, você pode especificar a opção family=gaussian(link="log")em gamcomo em glm.

Dê uma olhada neste post do site.

COOLSerdash
fonte
11
Boa explicação. Não sei se Box-Cox explícito é realmente o método mais comum de escolher uma transformação. Se você contar as pessoas que simplesmente escolhem os logs de qualquer maneira, meu próprio palpite é que é um método minoritário. Esse ponto exigente não afeta mais nada, naturalmente.
Nick Cox
@NickCox Obrigado (+1 pela sua resposta, btw). A afirmação de que Box-Cox é o método mais comum vem do livro de John Fox. Aceitei isso pelo valor de face, pois não tenho experiência suficiente para julgar a afirmação. Vou remover a declaração.
COOLSerdash
Muito obrigado pela explicação detalhada. Vou tentar aplicá-lo aos meus dados agora.
zgall1
@COOLSerdash Usando sua explicação detalhada, apliquei a transformação Box Cox às minhas variáveis ​​dependentes e depois independentes e tenho o seguinte gráfico das minhas variáveis ​​de diagnóstico - i.imgur.com/eO01djl.jpg Claramente, há uma melhoria, mas ainda parece problemas com variabilidade constante e imparcialidade e definitivamente há um problema com a normalidade. Para onde posso ir daqui?
zgall1
11
@ zgall1 Obrigado pelo seu feedback, agradeço. Hum, sim, as transformações não pareciam ter ajudado muito :). Nesse ponto, provavelmente tentaria usar splines para os preditores usando modelos de aditivos generalizados (GAMs) com o mgcvpacote e gam. Se isso não ajudar, estou com medo. Existem pessoas aqui que são muito mais experientes do que eu e talvez possam lhe dar mais conselhos. Também não tenho conhecimento de beisebol. Talvez haja um modelo mais lógico que faça sentido com esses dados.
COOLSerdash
8

Você deve nos dizer mais sobre a natureza da sua variável de resposta (resultado, dependente). Desde o seu primeiro gráfico, ele é fortemente inclinado positivamente, com muitos valores próximos de zero e alguns negativos. A partir disso, é possível, mas não inevitável, que a transformação o ajude, mas a questão mais importante é se a transformação aproximaria seus dados de um relacionamento linear.

Observe que os valores negativos para a resposta excluem a transformação logarítmica direta, mas não o log (resposta + constante), e não um modelo linear generalizado com link logarítmico.

Existem muitas respostas neste site discutindo o log (resposta + constante), que divide as pessoas estatísticas: algumas pessoas não gostam dele como sendo ad hoc e difícil de trabalhar, enquanto outras o consideram um dispositivo legítimo.

Um GLM com link de log ainda é possível.

Como alternativa, pode ser que o seu modelo reflita algum tipo de processo misto; nesse caso, um modelo personalizado que reflita o processo de geração de dados mais de perto seria uma boa idéia.

(MAIS TARDE)

O OP tem uma variável dependente WAR com valores que variam aproximadamente de 100 a -2. Para superar os problemas de obtenção de logaritmos de valores nulos ou negativos, o OP propõe um desvio de zeros e negativos para 0,000001. Agora, em uma escala logarítmica (base 10), esses valores variam de cerca de 2 (100 ou mais) a -6 (0,000001). A minoria de pontos falsos em escala logarítmica é agora uma minoria de valores discrepantes em massa. Plote log_10 (WAR falsificado) contra qualquer outra coisa para ver isso.

Nick Cox
fonte
Como você pode perceber no gráfico de dispersão publicado acima, estou usando um conjunto de dados estatísticos de beisebol. A variável independente, WAR, é essencialmente uma medida cumulativa do valor contribuído por um jogador ao longo de sua carreira no nível da liga principal. As variáveis ​​independentes AdjSLG, SOPct e BBPct são estatísticas secundárias da liga que geralmente são pensadas para prever o sucesso no nível da liga principal. A variável Idade é a idade em que o jogador produziu as estatísticas da liga menor. As variáveis ​​dummy são usadas para indicar o nível da liga menor em que as estatísticas foram produzidas.
zgall1
Com relação ao problema da variável independente negativa (WAR), por razões um pouco complexas, é razoável codificá-las novamente como zeros, se isso facilitar o processo de transformação. Dentro da estrutura deste conjunto de dados, este é um procedimento justificável. Se você quiser que eu entre em mais detalhes (aviso - é necessário um jargão de beisebol), fico feliz em fazê-lo.
zgall1
11
Parece que WAR é sua variável dependente . Você fornece evidências para minha afirmação, contestada em outra parte deste site, de que os dois termos geralmente são confusos. Meu conselho não é recodificar valores negativos em zeros (trata mal os dados), mas usar um GLM com link de log. Por favor, assuma zero interesse ou conhecimento de minúcias de beisebol do meu lado.
Nick Cox
Você está certo de que WAR é minha variável dependente. Vou olhar para um GLM com link de log. Obrigado pelo conselho.
zgall1
11
Pode ser útil saber como é calculado o WAR da carreira (também conhecido como entender o processo de geração de dados).
Affine