O registro dos registros da variável dependente e / ou independente afeta os erros do modelo e, portanto, a validade da inferência?

7

Costumo ver pessoas (estatísticos e profissionais) transformando variáveis ​​sem pensar duas vezes. Eu sempre tive medo de transformações, porque me preocupo que elas possam modificar a distribuição de erros e, assim, levar a inferência inválida, mas é tão comum que devo estar entendendo mal alguma coisa.

Para consertar idéias, suponha que eu tenha um modelo

Y=β0expXβ1+ϵ, ϵN(0,σ2)

Isso poderia, em princípio, ser adequado ao NLS. No entanto, quase sempre vejo pessoas pegando toras e ajustando

logY=logβ0+β1logX+???Z=α0+β1W+???

Eu sei que isso pode ser ajustado pelo OLS, mas não sei como calcular os intervalos de confiança nos parâmetros, agora, muito menos nos intervalos de previsão ou de tolerância.


E esse foi um caso muito simples: considere esse caso consideravelmente mais complexo (para mim) no qual não assumo a forma do relacionamento entre e a priori , mas tento inferir isso a partir de dados, com, por exemplo, um GAM. Vamos considerar os seguintes dados:YX

library(readr)
library(dplyr)
library(ggplot2)

# data
device <- structure(list(Amplification = c(1.00644, 1.00861, 1.00936, 1.00944, 
1.01111, 1.01291, 1.01369, 1.01552, 1.01963, 1.02396, 1.03016, 
1.03911, 1.04861, 1.0753, 1.11572, 1.1728, 1.2512, 1.35919, 1.50447, 
1.69446, 1.94737, 2.26728, 2.66248, 3.14672, 3.74638, 4.48604, 
5.40735, 6.56322, 8.01865, 9.8788, 12.2692, 15.3878, 19.535, 
20.5192, 21.5678, 22.6852, 23.8745, 25.1438, 26.5022, 27.9537, 
29.5101, 31.184, 32.9943, 34.9456, 37.0535, 39.325, 41.7975, 
44.5037, 47.466, 50.7181, 54.2794, 58.2247, 62.6346, 67.5392, 
73.0477, 79.2657, 86.3285, 94.4213, 103.781, 114.723, 127.637, 
143.129, 162.01, 185.551, 215.704, 255.635, 310.876, 392.231, 
523.313, 768.967, 1388.19, 4882.47), Voltage = c(34.7732, 24.7936, 
39.7788, 44.7776, 49.7758, 54.7784, 64.778, 74.775, 79.7739, 
84.7738, 89.7723, 94.772, 99.772, 109.774, 119.777, 129.784, 
139.789, 149.79, 159.784, 169.772, 179.758, 189.749, 199.743, 
209.736, 219.749, 229.755, 239.762, 249.766, 259.771, 269.775, 
279.778, 289.781, 299.783, 301.783, 303.782, 305.781, 307.781, 
309.781, 311.781, 313.781, 315.78, 317.781, 319.78, 321.78, 323.78, 
325.78, 327.779, 329.78, 331.78, 333.781, 335.773, 337.774, 339.781, 
341.783, 343.783, 345.783, 347.783, 349.785, 351.785, 353.786, 
355.786, 357.787, 359.786, 361.787, 363.787, 365.788, 367.79, 
369.792, 371.792, 373.794, 375.797, 377.8)), .Names = c("Amplification", 
"Voltage"), row.names = c(NA, -72L), class = "data.frame")

Se plotar os dados sem transformar o log , o modelo resultante e os limites de confiança não parecerão tão agradáveis:X

# build model
model <- gam(Voltage ~ s(Amplification, sp = 0.001), data = device)

# compute predictions with standard errors and rename columns to make plotting simpler 
Amplifications <- data.frame(Amplification = seq(min(APD_data$Amplification), 
                                           max(APD_data$Amplification), length.out = 500))
predictions <- predict.gam(model, Amplifications, se.fit = TRUE)
predictions <- cbind(Amplifications, predictions)
predictions <- rename(predictions, Voltage = fit) 

# plot data, model and standard errors
ggplot(device, aes(x = Amplification, y = Voltage)) +
  geom_point() +
  geom_ribbon(data = predictions, 
              aes(ymin = Voltage - 1.96*se.fit, ymax = Voltage + 1.96*se.fit), 
              fill = "grey70", alpha = 0.5) +
  geom_line(data = predictions, color = "blue")

insira a descrição da imagem aqui

Mas se eu transformar apenas , logon , parece que os limites de confiança em se tornam muito menores:XY

log_model <- gam(Voltage ~ s(log(Amplification)), data = device)
# the rest of the code stays the same, except for log_model in place of model

insira a descrição da imagem aqui Claramente algo suspeito está acontecendo. Esses intervalos de confiança são confiáveis? EDITAR não é simplesmente um problema do grau de suavização, como foi sugerido em uma resposta. Sem a transformação de log, o parâmetro de suavização é

> model$sp
s(Amplification) 
     5.03049e-07 

Com a transformação de log, o parâmetro de suavização é realmente muito maior:

>log_model$sp
s(log(Amplification)) 
         0.0005156608 

Mas essa não é a razão pela qual os intervalos de confiança se tornam tão pequenos. Por uma questão de fato, usando um parâmetro de suavização ainda maior sp = 0.001, mas evitando qualquer transformação de log, as oscilações são reduzidas (como no caso de transformação de log), mas os erros padrão ainda são enormes em relação ao caso de transformação de log:

smooth_model <- gam(Voltage ~ s(Amplification, sp = 0.001), data = device)
# the rest of the code stays the same, except for smooth_model in place of model

insira a descrição da imagem aqui

Em geral, se eu registrar a transformação e / ou , o que acontece com os intervalos de confiança? Se não for possível responder quantitativamente no caso geral, aceitarei uma resposta quantitativa (isto é, mostra uma fórmula) para o primeiro caso (o modelo exponencial) e forneça pelo menos um argumento de ondulação manual para o segundo caso (Modelo GAM).XY

DeltaIV
fonte
Quando você "transforma" as variáveis, está ajustando um modelo totalmente diferente. Os intervalos de confiança relacionados são válidos se o modelo transformado for válido (por exemplo, no seu primeiro exemplo, se os erros realmente forem multiplicativos na escala original), eles diferem apenas porque são modelos diferentes. Você deve ter cuidado se precisar inverter a transformação: não é uma previsão imparcial para um novo (é imparcialmente mediana, embora ) β^0X~β1^Y
Chris Haug
Não conheço gam, e a documentação se refere a um livro que não tenho. No entanto, com base no comportamento da coisa, presumo que ela tente aproximar uma função desconhecida usando polinômios. Polinômios fazem um péssimo trabalho na aproximação de formas como y = ln (x), e isso talvez explique o fraco desempenho de gam aqui. O toque que Hugh Perkins menciona não vem de uma função de passo ou suavização insuficiente aqui (novamente suspeito), mas do fato de que os polinômios tocam ao aproximar-se das funções logarítmicas. Seus dados parecem logarítmicos, não polinomiais para mim. Você pode testar com o teste de Vuong.
Bill
@ Bill muito obrigado pelas entradas. O GAM não usa polinômios, mas splines de regressão penalizados, que não têm todos os problemas dos polinômios (veja, por exemplo, "Uma introdução ao aprendizado estatístico", de James et al.). Na verdade, uma das bases de spline disponíveis por mgcvpode ser representada como uma soma dos termos do tipo - eu posso experimentá-los. Qual é o teste de Voung? Você pode fornecer mais detalhes? Você sabe se ele foi implementado em um pacote R? x2log(x)
DeltaIV 25/11
11
O argumento de Chris Haug é chamado de problema de re-transformação. Há várias perguntas e respostas sobre esse tópico no site. Em geral, respondi a várias perguntas sobre esse tópico, você pode encontrar uma aqui: stats.stackexchange.com/questions/55692/…
Bill
11
Aqui (eu acho) é o que eu vinculei
Bill

Respostas:

2

Você está vendo o toque, que é o resultado de passar uma alteração de alta frequência, ou seja, uma função de etapa, através de um filtro de baixa passagem, ou seja, o GAM.

Ao aplicar a transformação de log, você altera o gradiente da seção quase vertical do gráfico, no lado esquerdo, para que fique um pouco menos íngreme, com menos altas frequências implícitas e o efeito de toque desaparece.

Edite: algumas fotos do toque aqui: /electronics/79717/what-can-reduce-overshoot-and-ringing-on-a-simple-square-wave-pulse-generator

Edit2: observe que o aumento da suavização aumentaria o toque, uma vez que a suavização é essencialmente o filtro passa-baixo que está causando o toque. O que reduziria o toque seria, por exemplo: 1. remover os pontos na borda do penhasco à esquerda e recolocar, ou 2. reduzir a suavização ou 3. reduzir a frequência / aumentar o comprimento de onda / aumentar a frequência de corte da suavização .

Você pode ver que, se você remover o bit da borda do penhasco, o restante do gráfico será mais ou menos uma linha reta, então por que o GAM está ajustando uma onda sinusoidal nesses pontos? É inteiramente porque a parte da borda do penhasco está forçando um gradiente muito alto, o que causa superação subsequente.

Edit3: se fosse eu, acho que tentaria encontrar uma transformação que transformará o gráfico em uma linha aproximadamente reta. Não sei ao certo qual seria essa transformação, mas parece que o gráfico está muito perto de ser uma linha plana, assintótica a ~ 380 ou mais. Essa é uma não linearidade mais forte do que log, por exemplo , que se tornará simples, mas não tão rapidamente, eu acho. Talvez algo como um sigmóide inverso? Sigmoid é:

y=11+exp(x)

... e parece (da wikipedia https://en.wikipedia.org/wiki/Sigmoid_function )

insira a descrição da imagem aqui

Sigmoide inverso é a logitfunção, https://en.wikipedia.org/wiki/Logit :

f(x)=log(11x)

Talvez uma transformação relacionada a isso, ou uma versão parametrizada, possa tornar o gráfico mais próximo de ser uma linha reta e, portanto, mais passível de técnicas estatísticas padrão?

Hugh Perkins
fonte
Se o que você diz está correto, eu seria capaz de obter o mesmo resultado simplesmente aumentando manualmente o parâmetro de suavização do GAM, em vez de deixá- gamlo escolher por validação cruzada. Interessante: vou testar isso. Aprecio o insight (+1), mas ele não responde à pergunta original sobre o efeito das transformações de log nos intervalos de confiança.
DeltaIV 23/11
sua resposta não está correta ou, pelo menos, incompleta. Como provei em meu experimento, o efeito da transformação de log nos intervalos de confiança não se deve ao aumento da suavização - se eu não transformar, mas aplico ainda mais, obter intervalos de confiança muito maiores. Veja minha pergunta editada.
DeltaIV 24/11
acrescentou algumas reflexões sobre o efeito de alterar a suavização no toque; e um possível uso de logittransformar o gráfico em algo mais perto de uma linha reta
Hugh Perkins
nas minhas experiências, reduzir o suavização aumentou o toque, se com toque você quer dizer as oscilações: não posso editar a pergunta agora, mas sim na próxima semana. Mas ainda assim, meu problema é com os intervalos de confiança, não com a curva de regressão: sua resposta não os cobre.
DeltaIV 25/11
Há uma descrição de como obter intervalos de confiança para o OLS na wikipedia, en.wikipedia.org/wiki/Simple_linear_regression section 'Propriedades baseadas em modelo'. É isto que você quer dizer?
Hugh Perkins