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
Isso poderia, em princípio, ser adequado ao NLS. No entanto, quase sempre vejo pessoas pegando toras e ajustando
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:
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:
# 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")
Mas se eu transformar apenas , logon , parece que os limites de confiança em se tornam muito menores:
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
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
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).
mgcv
pode 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?