私はよく人々(統計家や実務家)が再考せずに変数を変換しているのを見ます。エラーの分布が変更されて無効な推論につながる可能性があるので、私は常に変換を怖がっていますが、何かを誤解しなければならないのはよくあることです。
アイデアを修正するために、モデルがあるとします
これは原則としてNLSに適合します。しかし、ほとんどの場合、私は人々が丸太を取り、フィッティング
これはOLSで適合できることはわかっていますが、パラメーターの信頼区間を計算する方法がわかりません。今のところ、予測区間や許容区間はもちろんです。
そして、それは非常に単純なケースでした:かなり複雑な(私にとって)ケースを考えてください。 そして アプリオリですが、GAMなどを使用してデータから推測しようとします。次のデータについて考えてみましょう。
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")
ログ変換せずにデータをプロットした場合 、結果のモデルと信頼限界はそれほど美しく見えません。
# 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")
しかし、ログ変換のみ 、それは信頼限界のようです はるかに小さくなる:
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
明らかに何か怪しいことが起こっています。これらの信頼区間は信頼できますか? EDITこれは単にそれが答えで提案されたように、平滑化の程度の問題ではありません。対数変換がない場合、平滑化パラメーターは
> model$sp
s(Amplification)
5.03049e-07
対数変換を使用すると、平滑化パラメーターが実際にはるかに大きくなります。
>log_model$sp
s(log(Amplification))
0.0005156608
しかし、これが信頼区間が非常に小さくなる理由ではありません。実際のところ、さらに大きな平滑化パラメーターを使用しますがsp = 0.001
、対数変換を回避すると、振動は減少しますが(対数変換の場合のように)、標準エラーは対数変換の場合に比べて非常に大きくなります。
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
一般的に、変換をログに記録すると および/または 、信頼区間はどうなりますか?一般的なケースで定量的に答えることができない場合、私は最初のケース(指数モデル)に対して定量的な(つまり、式を示す)答えを受け入れ、少なくとも2番目のケースについては手を振る引数を与えます(GAMモデル)。
mgcv
は、タイプの項の合計として表すことができます。-やってみます。Voungのテストとは何ですか?詳細を教えてください。Rパッケージに実装されているかどうか知っていますか?