Ich sehe oft Leute (Statistiker und Praktiker), die Variablen ohne einen zweiten Gedanken transformieren. Ich hatte immer Angst vor Transformationen, weil ich befürchte, dass sie die Fehlerverteilung ändern und somit zu ungültigen Schlussfolgerungen führen könnten, aber es ist so häufig, dass ich etwas falsch verstehen muss.
Angenommen, ich habe ein Modell, um Ideen zu korrigieren
Dies könnte im Prinzip von NLS angepasst werden. Fast immer sehe ich jedoch Leute, die Protokolle nehmen und passen
Ich weiß, dass dies von OLS angepasst werden kann, aber ich weiß nicht, wie ich die Konfidenzintervalle für die Parameter berechnen soll, geschweige denn Vorhersageintervalle oder Toleranzintervalle.
Und das war ein sehr einfacher Fall: Betrachten Sie diesen (für mich) wesentlich komplexeren Fall, in dem ich nicht die Form der Beziehung zwischen und a priori annehme , sondern versuche, sie aus Daten abzuleiten, z. ein GAM. Betrachten wir die folgenden Daten:
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")
Wenn ich die Daten ohne logarithmische Transformation von , sehen das resultierende Modell und die Vertrauensgrenzen nicht so gut aus:
# 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")
Aber wenn ich nur logarithmisch transformiere , scheinen die Vertrauensgrenzen für viel kleiner zu werden:
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
Offensichtlich ist etwas faul. Sind diese Konfidenzintervalle zuverlässig? BEARBEITEN Dies ist nicht einfach ein Problem des Glättungsgrades, wie es in einer Antwort vorgeschlagen wurde. Ohne die Protokolltransformation ist der Glättungsparameter
> model$sp
s(Amplification)
5.03049e-07
Mit der Log-Transformation ist der Glättungsparameter tatsächlich viel größer:
>log_model$sp
s(log(Amplification))
0.0005156608
Dies ist jedoch nicht der Grund, warum die Konfidenzintervalle so klein werden. In der Tat werden durch die Verwendung eines noch größeren Glättungsparameters sp = 0.001
unter Vermeidung jeglicher Protokolltransformation die Oszillationen reduziert (wie im Fall der Protokolltransformation), aber die Standardfehler sind in Bezug auf den Fall der Protokolltransformation immer noch sehr groß:
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
Was passiert im Allgemeinen mit den Konfidenzintervallen , wenn ich die Transformation und / oder protokolliere ? Wenn es im allgemeinen Fall nicht möglich ist, quantitativ zu antworten, akzeptiere ich eine Antwort, die für den ersten Fall (das Exponentialmodell) quantitativ ist (dh eine Formel zeigt) und für den zweiten Fall mindestens ein handwedelndes Argument liefert (GAM-Modell).
mgcv
als eine Summe von Begriffen vom Typ - ich kann sie ausprobieren. Was ist Voung's Test? Können Sie weitere Details angeben? Wissen Sie, ob es in einem R-Paket implementiert ist?