Tôi thường thấy mọi người (nhà thống kê và học viên) biến đổi các biến mà không có ý nghĩ thứ hai. Tôi luôn sợ biến đổi, vì tôi lo rằng họ có thể sửa đổi phân phối lỗi và do đó dẫn đến suy luận không hợp lệ, nhưng nó phổ biến đến mức tôi phải hiểu sai điều gì đó.
Để sửa ý tưởng, giả sử tôi có một mô hình
Điều này về nguyên tắc có thể phù hợp bởi NLS. Tuy nhiên, hầu như lúc nào tôi cũng thấy mọi người lấy nhật ký và lắp
Tôi biết điều này có thể được trang bị bởi OLS, nhưng tôi không biết cách tính khoảng tin cậy trên các tham số, bây giờ, hãy để một mình khoảng dự đoán hoặc khoảng dung sai.
Và đó là một trường hợp rất đơn giản: hãy xem xét trường hợp phức tạp hơn (đối với tôi) trong đó tôi không giả sử dạng mối quan hệ giữa và là một tiên nghiệm , nhưng tôi cố gắng suy ra nó từ dữ liệu, ví dụ, một GAM. Hãy xem xét các dữ liệu sau:
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")
Nếu tôi vẽ dữ liệu mà không chuyển đổi log , mô hình kết quả và giới hạn độ tin cậy sẽ không đẹp lắm:
# 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")
Nhưng nếu tôi chỉ chuyển đổi log , có vẻ như giới hạn niềm tin đối với trở nên nhỏ hơn nhiều:
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
Rõ ràng một cái gì đó tanh đang xảy ra. Là những khoảng tin cậy đáng tin cậy? EDIT đây không chỉ đơn giản là một vấn đề về mức độ làm mịn, như nó đã được đề xuất trong một câu trả lời. Không có biến đổi log, tham số làm mịn là
> model$sp
s(Amplification)
5.03049e-07
Với biến đổi log, tham số làm mịn thực sự lớn hơn nhiều:
>log_model$sp
s(log(Amplification))
0.0005156608
Nhưng đây không phải là lý do tại sao khoảng tin cậy trở nên quá nhỏ. Như một vấn đề thực tế, sử dụng một tham số làm mịn thậm chí còn lớn hơn sp = 0.001
, nhưng tránh bất kỳ biến đổi log nào, các dao động được giảm (như trong trường hợp chuyển đổi log) nhưng các lỗi tiêu chuẩn vẫn rất lớn đối với trường hợp chuyển đổi 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
Nói chung, nếu tôi đăng nhập biến đổi và / hoặc , điều gì xảy ra với các khoảng tin cậy? Nếu không thể trả lời một cách định lượng trong trường hợp chung, tôi sẽ chấp nhận một câu trả lời là định lượng (nghĩa là nó hiển thị một công thức) cho trường hợp đầu tiên (mô hình hàm mũ) và đưa ra ít nhất một đối số vẫy tay cho trường hợp thứ hai (Mô hình GAM).
mgcv
có thể được biểu diễn dưới dạng tổng của các điều khoản của loại - Tôi có thể thử chúng. Bài kiểm tra của Voung là gì? Bạn có thể cung cấp chi tiết hơn? Bạn có biết nếu nó được thực hiện trong một gói R?