# ### ~/Beratung/StuteW/KernelAdjustedNonparRegression/AMSE_Minimierung.R
# ### Schaetzung und Minimierung der AMSE-Funktion fuer die Simulationen in "Ker-
# ### nel Adjusted Nonparametric Regression" von Eichner & Stute
# ### R 2.12.2, 17./18./22.3./5./6./7./8./14./18./26./27./29.4./27.5./3.6.2011
# ###********************************************************************************
#
# ## Hilfsfunktionen
# ##*****************
# # R-Paket fuer "Kernel Regression Smoothing with Local Plug-in Bandwidth"
# #*************************************************************************
# library( lokern)
#
# # Grafikfunktion
# #****************
# TitleAndTopAxis <- function( at, digits = 4, ...) {
# op <- par( ...); at0 = par( "usr")[ 1]; lh <- 1.1 * par( "cex.axis")
# B <- signif( Biases, digits); V <- signif( Variances, digits)
# M <- signif( MSEs, digits)
# axis( 3, at = c( at0, at), tick = FALSE, hadj = 0, line = 0,
# labels = c( expression( paste( widehat(plain(MSE)), ":", sep = "")),
# bquote( .(M[ 1])), bquote( .(M[ 2])), bquote( .(M[ 3])) ) )
# axis( 3, at = c( at0, at), tick = FALSE, hadj = 0, line = 1 * lh,
# labels = c( expression( paste( widehat(plain(Var)), ":", sep = "")),
# bquote( .(V[ 1])), bquote( .(V[ 2])), bquote( .(V[ 3])) ) )
# axis( 3, at = c( at0, at), tick = FALSE, hadj = 0, line = 2 * lh,
# labels = c( expression( paste( widehat(plain(Bias)), ":", sep = "")),
# bquote( .(B[ 1])), bquote( .(B[ 2])), bquote( .(B[ 3])) ) )
# axis( 3, at = at, tick = FALSE, hadj = 0, line = 2.9 * lh,
# labels = c( expression( hat(m)[n](x[0])), expression( m[n](x[0])),
# expression( plain(lokerns)(x[0])) ) )
#
# title( bquote( list( h[adj] == {n^{-1/5} == .(signif( h, digits))},
# ~~h[ideal] == .(signif( h_opt, digits)),
# ~~bar(h[lokerns]) == .(signif( lox0.meanh, digits)),
# ~~~x[0] == .(x0) )),
# line = 4.2 * lh, outer = TRUE)
# title( bquote( list( "AMSE-optimal, K = Gauss kernel", ~~S == .(MCsamplesize),
# ~~n == .(n), ~~sigma(paste(Y,"|",X==x)) == .(sd.eps) )),
# line = 5.4 * lh, outer = TRUE)
#
# invisible( par( op))
# }
#
#
# # Potenzielle Kern- und damit assoziierte Funktionen
# #****************************************************
# Kern <- function( x) dnorm( x) # Gausskern
#
# Integral_Kquadrat <- integrate( function( u) { k <- Kern( u); k*k },
# lower = -Inf, upper = Inf)$value
# # = 1 / (2 * sqrt( pi)), falls Kern Gausskern
# Integral_xquadratK <- integrate( function( u) u*u * Kern( u),
# lower = -Inf, upper = Inf)$value
# # = 1, falls Kern Gausskern
#
#
# # Potenzielle Regressionsfunktionen
# #***********************************
#
# #m.poly3 <- function( x, a0 = 1, a1 = -3, a2 = 1, a3 = 1)
# # a0 + a1 * x + a2 * x*x + a3 * x*x*x # m'(x) = a1 + 2 a2 x + 3 a3 x^2
# # # m''(x) = 2 a2 + 6 a3 x
# #m.poly4 <- function( x, a0 = 1, a1 = -3, a2 = 1, a3 = 1, a4 = -1)
# # a0 + a1 * x + a2 * x*x + a3 * x*x*x + a4 * x*x*x*x
# # # m'(x) = a1 + 2 a2 x + 3 a3 x^2 + 4 a4 x^3
# # # m''(x) = 2 a2 + 6 a3 x + 12 a4 x^2
# # # Effizienter: a0 + (a1 + (a2 + (a3 + a4 * x) * x) * x) * x
#
# # Gewuenscht ist ein Polynom 4. Grades m mit einem
# # Tief-/Hochpunkt, wo also m'(x) = 0 und m''(x) <> 0, einem
# # Wendepunkt, wo also m''(x) = 0 und m'(x) <> 0 sowie einem
# # Sattelpunkt, wo also m'(x) = 0 = m''(x).
# # Memo: Fuer f(x) = a * (x - x1) * (x - x2)^3 + b ist der
# # TP/HP an (3 * x1 + x2) / 4, der WP an (x1 + x2) / 2 und der SP an x2.
# m.poly4 <- function( x, x1 = 0, x2 = 8, a = 0.01, b = 0)
# a * (x - x1) * (x - x2)^3 + b
#
#
# #m.sin <- function( x, a0 = 0, a1 = 1, a2 = 1) # m'(x) = a1 a2 cos( a2 x)
# # a0 + a1 * sin( a2 * x) # m''(x) = -a1 a2^2 sin( a2 x)
#
#
# # Nadaraya-Watson-Schaetzer ("NW-Schaetzer", m_n im Paper)
# #**********************************************************
# NadWat <- function( x, X, Y, h, K = Kern) {
# # x: Vektor (x_1, ..., x_r) oder Skalar
# # X, Y: Vektoren (X_1, ..., X_n), (Y_1, ..., Y_n)
# # h: Skalar
# # K: Fkt. mit vektorieller Ein- & Ausgabe
# M <- K( outer( x/h, X/h, "-")) # r x n
# drop( (M %*% Y) / rowSums( M)) # r x 1
# }
#
#
# # Gewichte
# #**********
# Wn <- function( sigma, h, xXh, thetaXh, K = Kern) {
# # sigma: Vektor (sigma_1, ..., sigma_s) oder Skalar
# # h: Skalar
# # xXh: Vektor ((x - X_1)/h, ..., (x - X_n)/h)
# # thetaXh: Vektor ((\theta - X_1)/h, ..., (\theta - X_n)/h)
# # K: Fkt. mit vektorieller Ein- & Ausgabe
#
# A <- outer( sigma/h, xXh) # s x n
# A <- outer( A, thetaXh, "+") # s x n x n
# A <- rowSums( K( A), dims = 2) # s x n
# A / rowSums( A) # s x n: (W_{ni}( x, \sigma_r))_{1<=r<=s, 1<=i<=n}
# }
#
#
# # Zwei Versionen des Bias-Schaetzers: BiasA() mit m_n, BiasB() mit \hat m_n
# #****************************************************************************
# BiasA <- function( sigma, h, xXh, thetaXh, K = Kern, mmDiff) {
# # sigma, X, h, xXh, thetaXh, K: Siehe Wn()!
# # mmDiff: Vektor (m_n(X_1) - m_n(x), ..., m_n(X_n) - m_n(x))
#
# drop( Wn( sigma, h, xXh, thetaXh, K) %*% mmDiff) # s x 1
# }
#
#
# BiasB <- function( sigma, Y, h, xXh, XXh, thetaXh, K = Kern) {
# # sigma, h, xXh, thetaXh, K: Siehe Wn()!
# # Y: Vektor (Y_1, ..., Y_n)
# # XXh: Matrix ((X_j - X_i)/h)_{1<=j<=n, 1<=i<=n}
#
# wx <- Wn( sigma, h, xXh, thetaXh, K) # s x n
#
# wX <- apply( XXh, 2, function( XXih) Wn( sigma, h, XXih, thetaXh, K))
# # (1<=r<=s)*(1<=j<=n) x (1<=i<=n)
# wX <- array( wX, dim = c( length( sigma), dim( XXh)))
# # (1<=r<=s) x (1<=j<=n) x (1<=i<=n)
# wX <- aperm( wX - as.vector( wx), c( 2, 1, 3))
# # (1<=j<=n) x (1<=r<=s) x (1<=i<=n)
# rowSums( wx * colSums( wX * Y)) # s x 1
# # (1<=r<=s) x (1<=i<=n)
# }
#
#
# # Zwei Versionen des Varianzschaetzer: VarA() mit m_n, VarB() mit \hat m_n
# #***************************************************************************
# VarA <- function( sigma, h, xXh, thetaXh, K = Kern, YmDiff2) {
# # sigma, h, xXh, thetaXh, K: Siehe Wn()!
# # YmDiff2: Vektor ( (Y_1 - m_n(x))^2, ..., (Y_n - m_n(x))^2 )
#
# wx <- Wn( sigma, h, xXh, thetaXh, K) # s x n
# drop( (wx * wx) %*% YmDiff2) # s x 1
# }
#
#
# VarB <- function( sigma, Y, h, xXh, XXh, thetaXh, K = Kern) {
# # sigma, h, xXh, thetaXh, K: Siehe Wn()!
# # Y: Vektor (Y_1, ..., Y_n)
# # XXh: Matrix ((X_j - X_i)/h)_{1<=j<=n, 1<=i<=n}
#
# wx <- Wn( sigma, h, xXh, thetaXh, K) # s x n
#
# wX <- apply( XXh, 2, function( XXih) Wn( sigma, h, XXih, thetaXh, K))
# # (1<=r<=s)*(1<=j<=n) x (1<=i<=n)
# wX <- aperm( array( wX, dim = c( length( sigma), dim( XXh))), c( 2, 1, 3))
# # (1<=j<=n) x (1<=r<=s) x (1<=i<=n)
# Y_twXY <- Y - t( colSums( wX * Y)) # (1<=i<=n) x (1<=r<=s)
#
# rowSums( (wx * wx) * t( Y_twXY * Y_twXY)) # s x 1
# }
#
#
# # Zwei Versionen des geschaetzten "Asymptotic Mean Squared Errors"
# # (\widehat AMSE): AMSE_A() mit m_n, AMSE_B() mit \hat m_n
# #*****************************************************************
# AMSE_A <- function( sigma, h, xXh, thetaXh, K = Kern, mmDiff, YmDiff2) {
# # sigma, h, xXh, thetaXh, K: Siehe Wn()!
# # mmDiff: Vektor (m_n(X_1) - m_n(x), ..., m_n(X_n) - m_n(x))
# # YmDiff2: Vektor ( (Y_1 - m_n(x))^2, ..., (Y_n - m_n(x))^2 )
# W <- Wn( sigma, h, xXh, thetaXh, K) # s x n
# Bn <- W %*% mmDiff # = BiasA( sigma, h, xXh, thetaXh, K, mmDiff)
# Vn2 <- (W * W) %*% YmDiff2 # = VarA( sigma, h, xXh, thetaXh, K, YmDiff2)
# drop( Vn2 + Bn * Bn) # s x 1
# }
#
#
# AMSE_B <- function( sigma, Y, h, xXh, XXh, thetaXh, K = Kern) {
# # sigma, h, xXh, thetaXh, K: Siehe Wn()!
# # Y: Vektor (Y_1, ..., Y_n)
# # XXh: Matrix ((X_j - X_i)/h)_{1<=j<=n, 1<=i<=n}
#
# wx <- Wn( sigma, h, xXh, thetaXh, K) # s x n
#
# wX <- apply( XXh, 2, function( XXih) Wn( sigma, h, XXih, thetaXh, K))
# # (1<=r<=s)*(1<=j<=n) x (1<=i<=n)
# wX <- array( wX, dim = c( length( sigma), dim( XXh)))
# # (1<=r<=s) x (1<=j<=n) x (1<=i<=n)
#
# wX_wx <- aperm( wX - as.vector( wx), c( 2, 1, 3))
# # (1<=j<=n) x (1<=r<=s) x (1<=i<=n)
# Bn <- rowSums( wx * colSums( wX_wx * Y))
# # = BiasB( sigma, Y, h, xXh, XXh, thetaXh, K), s x 1
#
# Y_twXY <- Y - t( colSums( aperm( wX, c( 2, 1, 3)) * Y)) # (1<=i<=n) x (1<=r<=s)
# Vn2 <- rowSums( (wx * wx) * t( Y_twXY * Y_twXY))
# # = VarB( sigma, Y, h, xXh, XXh, thetaXh, K), s x 1
#
# drop( Vn2 + Bn * Bn) # s x 1
# }
#
#
#
# ## Die Simulations-Szenarien
# ##***************************
#
# ##Version <- "A" # Varianz- und Bias-Schaetzung mit NW-Schaetzer m_n fuer m
# Version <- "B" # Varianz- und Bias-Schaetzung mit \hat m_n fuer m
#
# # Simulationsparameter
# x00 <- c( 2, 4, 5, 8) # Punkte, an denen die AMSE-optim. "kernel adjusted
# # nonparametric regressions" von m stattfinden sollen.
# # Fuer m.poly4()'s Voreinstellung ist TP an 2, WP an 4
# # und SP an 8; ein "beliebiger" Punkt liegt z. B. bei 5.
# nn <- c( 25, 50, 100) # Stichprobenumfaenge.
# sdd <- c( 0.5, 1, 2) # Std.-abwn. der Fehler \epsilon_i: \sqrt(Var(Y|X=x)).
#
# Resultate <- array( NA, dim = c( length( x00), length( nn), length( sdd), 3, 3),
# dimnames = list( x0 = paste( "x0", x00, sep = "="),
# n = paste( "n", nn, sep = "="),
# sd = paste( "sd", sdd, sep = "="),
# Schaetzer = c( "Bias", "Var", "MSE"),
# Methode = c( "adjusted", "idealistic",
# "classic")) )
#
# mm <- m.poly4 # Regressionsfunktion und ihre erste sowie zweite Ableitung
# mm_prime <- function() {}; body( mm_prime) <- D( body( mm), "x")
# mm_second <- function() {}; body( mm_second) <- D( body( mm_prime), "x")
# formals( mm_second) <- formals( mm_prime) <- formals( mm)
#
# # Dichte der Normalverteilung (der X_i) und ihre erste Ableitung
# f <- dnorm; f_prime <- function( x) -x * dnorm( x)
#
#
# for( x0 in x00) { # Punkt x_0
#
# design.mean <- x0 + 0.5 # "Zentrum" und "Skala" des Designs = Erwartungswert
# design.sd <- 1 # bzw. Standardabweichung der Verteilung der X_i.
# xx <- design.mean + seq( -3.3 * design.sd, 3.3 * design.sd, length = 101)
# # x-Gitter, worauf m und der NW-Schaetzer m_n ausgewertet & gezeichnet werden.
#
# sig.range <- c( 0.01, 1.5 * diff( range( xx))) # Zu betrachtender Wertebereich
# sig.grid <- seq( sig.range[ 1], # samt Gitter fuer den Skalenparame-
# sig.range[ 2], length = 501)# ter \sigma des adaptiv. Verfahrens.
#
# for( n in nn) { # Stichprobenumfang
# for( sd.eps in sdd) { # Standardabweichung der \epsilon_i
#
# set.seed( 20110426) # Startwert des Pseudo-Zufallszahlengenerators
#
# # Berechnung der fuer x_0 optimalen, "idealistischen" Fensterbreite h_opt
# # zur Berechnung des NW-Schaetzers an x_0
# numerator <- sd.eps^2 * Integral_Kquadrat * f( x0)
# denominator <- n * Integral_xquadratK^2 *
# (f( x0) * mm_second( x0) + 2 * f_prime( x0) * mm_prime( x0))^2
# h_opt <- (numerator / denominator)^(1/5)
#
# # Wahl von h fuer das adaptive Verfahren
# h <- n^(-1/5)
#
# # Vorbereitung des Grafik-Ausgabe
# now <- format( Sys.time(), "%Y%m%d_%H%M%S")
# pdf( paste( "Plots/mBVA_x", x0, "_n", formatC( n, width = 3, flag = 0), "_s",
# formatC( 10*sd.eps, width = 2, flag = 0), "_D", now, ".pdf",
# sep = ""),
# paper = "a4", width = 0, height = 0)
# op <- par( mfrow = c( 3,1), mar = c( 3,3,3,0.1)+0.1, mgp = c( 1.5,0.5,0),
# tcl = -0.3, cex.main = 2)
#
# ## Ein paar beispielhafte Simulationslaeufe mit Grafikgenerierung
# ##****************************************************************
# for( bsp in 1:4) {
# # Datengenerierung Y_i = m( X_i) + \epsilon_i, i = 1, ..., n
# X <- rnorm( n, mean = design.mean, sd = design.sd)
# Y <- mm( X) + rnorm( length( X), sd = sd.eps)
#
# # NW-Schaetzer auf einem x-Gitter, um ihn zur Anschauung zu zeichnen
# mnxx <- NadWat( xx, X, Y, h_opt)
#
# # Kern-Schaetzer mit lokal-adaptiver "plug-in"-Bandbreite (aus dem R-Paket
# # "lokern"), auf selbem x-Gitter, um auch ihn zur Anschauung zu zeichnen
# loxx <- lokerns( x = X, y = Y, x.out = xx)$est
#
# # Vorratsberechnung von Groessen, die nicht von \sigma abhaengen, aber
# # i. F. wiederholt gebraucht werden; Algor. wird so effizienter.
# x0Xh <- (x0 - X) / h; thetaXh <- (mean( X) - X) / h
#
# if( Version == "A") { # Var.- & Bias-Schaetzung mit m_n
#
# # NW-Schaetzer m_n(x0) und m_n(X_1), ..., m_n(X_n) mit Fensterbreite
# # h = n^(-1/5) sowie daraus gebildete Groessen zur Schaetzung von
# # Var_x0(\sigma) und Bias_x0(\sigma)
# mnx0 <- NadWat( x0, X, Y, h) # m_n(x0)
# mnX <- NadWat( X, X, Y, h) # m_n(X_i) fuer i = 1, ..., n
# mnX_mnx0 <- mnX - mnx0 # m_n(X_i) - m_n(x0) fuer i = 1, ..., n
# Y_mnX2 <- (Y - mnX)^2 # (Y_i - m_n(X_i))^2 fuer i = 1, ..., n
#
# # Schaetzer von Var_x0(\sigma) und Bias_x0(\sigma) auf dem \sigma-Gitter,
# # um sie zur Anschauung zu zeichnen
# Bn <- BiasA( sigma = sig.grid, h = h, xXh = x0Xh, thetaXh = thetaXh,
# mmDiff = mnX_mnx0)
# Vn2 <- VarA( sigma = sig.grid, h = h, xXh = x0Xh, thetaXh = thetaXh,
# YmDiff2 = Y_mnX2)
#
# # # Versuch 1: Minimizer und Minimum des Schaetzers von AMSE_x0(\sigma):
# # opt <- optimize( f = AMSE_A, interval = sig.range, h = h, xXh = x0Xh,
# # thetaXh = thetaXh, mmDiff = mnX_mnx0, YmDiff2 = Y_mnX2)
# # sig_opt_x0 <- opt$minimum; amse_min <- opt$objective
# #
# # # Versuch 2: Minimizer und Minimum des Schaetzers von AMSE_x0(\sigma):
# # opt <- optimize( f = AMSE_A, interval = sig.range/c(1,3), h = h, xXh = x0Xh,
# # thetaXh = thetaXh, mmDiff = mnX_mnx0, YmDiff2 = Y_mnX2)
# # sig_opt_x0_2 <- opt$minimum; amse_min_2 <- opt$objective
#
# } else if( Version == "B") { # Var.- & Bias-Schaetzung mit \hat m_n
#
# # Weitere Vorratsgroesse, die nicht von \sigma abhaengt, aber i. F.
# # wiederholt gebraucht wird
# XjXih <- outer( X/h, X/h, "-")
#
# # Schaetzer von Var_x0(\sigma) und Bias_x0(\sigma) auf dem \sigma-Gitter,
# # um sie zur Anschauung zu zeichnen
# Bn <- BiasB( sigma = sig.grid, Y = Y, h = h, xXh = x0Xh, XXh = XjXih,
# thetaXh = thetaXh)
# Vn2 <- VarB( sigma = sig.grid, Y = Y, h = h, xXh = x0Xh, XXh = XjXih,
# thetaXh = thetaXh)
#
# # # Versuch 1: Minimizer und Minimum des Schaetzers von AMSE_x0(\sigma):
# # opt <- optimize( f = AMSE_B, interval = sig.range, Y = Y, h = h,
# # xXh = x0Xh, XXh = XjXih, thetaXh = thetaXh)
# # sig_opt_x0 <- opt$minimum; amse_min <- opt$objective
# #
# # # Versuch 2: Minimizer und Minimum des Schaetzers von AMSE_x0(\sigma):
# # opt <- optimize( f = AMSE_B, interval = sig.range/c(1,3), Y = Y, h = h,
# # xXh = x0Xh, XXh = XjXih, thetaXh = thetaXh)
# # sig_opt_x0_2 <- opt$minimum; amse_min_2 <- opt$objective
#
# } else stop( "Version '", Version, "' gibt es nicht!")
#
# # # Versuch 2 "besser" als Versuch 1?
# # if( amse_min_2 < amse_min) {
# # sig_opt_x0 <- sig_opt_x0_2; amse_min <- amse_min_2
# # }
#
# # "Komposition" von AMSE_x0(\sigma) aus den Schaetzern von Var_x0(\sigma)
# # und Bias_x0(\sigma) auf dem \sigma-Gitter
# An <- Vn2 + Bn * Bn
#
# # Minimizer und Minimum des Schaetzers von AMSE_x0(\sigma)
# # durch "grid search":
# min_idx <- which.min( An)
# sig_opt_x0 <- sig.grid[ min_idx]; amse_min <- An[ min_idx]
#
# # Der AMSE-optimale "kernel adjusted nonparametric regression"-Schaetzwert
# # an x_0, also \hat m_n( x_0)
# W <- Wn( sigma = sig_opt_x0, h = h, xXh = x0Xh, thetaXh = thetaXh)
# mnhatx0 <- W %*% Y
#
# # Grafische Darstellung fuer den aktuellen Datensatz
# plot( Y ~ X, xlim = range( X, xx),
# ylim = range( Y, mnxx, mnhatx0, loxx, na.rm = TRUE),# mm(xx)
# main = bquote( n == .(n)), xlab = "x", ylab = "y") # Das Streudiagramm
# lines( xx, mm( xx), lty = 2) # Die "wahre" Regressionsfunktion m
# lines( xx, mnxx) # Der NW-Schaetzer m_n von m
# lines( xx, loxx, col = "blue") # Der lokal-adaptive Schaetzer von m
# points( x0, mnhatx0, col = "red", pch = 8, cex = 2) # (x_0, \hat m_n(x_0))
# legend( "bottomleft", lty = c( 2, 1, 1), col = c( "black", "black", "blue"),
# bty = "n", cex = 1.5,
# legend = c( bquote( paste( "m, ", sigma(paste( Y,"|", X==x))
# == .(sd.eps)) ),
# expression( m[n]), "lokern()"))
# legend( "top", pch = 8, col = "red", bty = "n", cex = 1.5,
# legend = bquote( paste( hat(m)[n](x[0]), ", ", x[0] == .(x0))))
#
# matplot( sig.grid, cbind( Bn*Bn, Vn2), type = "l", lty = 1:2,
# col = c( "black", "red"), xlab = expression( sigma), ylab = "")
# legend( "top", lty = 1:2, col = c( "black", "red"), bty = "n", cex = 1.5,
# legend = c( expression( paste( widehat(plain(Bias))[x[0]]^2, (sigma))),
# expression( widehat(plain(Var))[x[0]](sigma))))
#
# plot( sig.grid, An, type = "l", xlab = expression( sigma), ylab = "",
# main = expression( widehat(plain(AMSE))[x[0]](sigma)))
# points( sig_opt_x0, amse_min, pch = 13, col = "red", cex = 2)
# legend( "top", pch = 13, col = "red", bty = "n", cex = 1.5,
# legend = substitute( group( "(", list( plain( Minimizer),
# plain( Minimum)), ")")
# == group( "(", list( x, y), ")"),
# list( x = signif( amse_min, 4),
# y = signif( sig_opt_x0, 4))))
# } # bsp-loop
# par( op)
# dev.off() ## Ende der beispielhaften Simulationslaeufe
#
#
# ## Die eigentliche Simulation (Kommentierung siehe oben!)
# ##****************************
# MCsamplesize <- 5000
#
# now <- format( Sys.time(), "%Y%m%d_%H%M%S")
# set.seed( 20110426) # Derselbe Startwert des Pseudo-RNGs wie oben.
# Sim <- replicate( MCsamplesize, { # Schleife ueber Monte-Carlo-Samples
# X <- rnorm( n, mean = design.mean, sd = design.sd)
# Y <- mm( X) + rnorm( length( X), sd = sd.eps)
#
# if( n > 25 || sd.eps == 1) {
# c( mnhatx0 = NA, mnx0_hopt = NA, lox0 = NA, lox0.h = NA)
# } else {
# mnx0_hopt <- NadWat( x0, X, Y, h_opt)
# lokerns.x0 <- lokerns( x = X, y = Y, x.out = x0)
# lox0 <- lokerns.x0$est; lox0.h <- lokerns.x0$bandwidth
#
# x0Xh <- (x0 - X) / h; thetaXh <- (mean( X) - X) / h
#
# if( Version == "A") {
# mnx0 <- NadWat( x0, X, Y, h); mnX <- NadWat( X, X, Y, h)
# mnX_mnx0 <- mnX - mnx0; Y_mnX2 <- (Y - mnX)^2
# # # Minimierungsversuch 1:
# # opt <- optimize( f = AMSE_A, interval = sig.range, h = h, xXh = x0Xh,
# # thetaXh = thetaXh, mmDiff = mnX_mnx0, YmDiff2 = Y_mnX2)
# # sig_opt_x0 <- opt$minimum; amse_min <- opt$objective
# # # Minimierungsversuch 2:
# # opt <- optimize( f = AMSE_A, interval = sig.range/c(1,3), h = h, xXh = x0Xh,
# # thetaXh = thetaXh, mmDiff = mnX_mnx0, YmDiff2 = Y_mnX2)
# # sig_opt_x0_2 <- opt$minimum; amse_min_2 <- opt$objective
#
# An <- AMSE_A( sig.grid, h = h, xXh = x0Xh, thetaXh = thetaXh,
# mmDiff = mnX_mnx0, YmDiff2 = Y_mnX2)
#
# } else if( Version == "B") {
# XjXih <- outer( X/h, X/h, "-")
# # # Minimierungsversuch 1:
# # opt <- optimize( f = AMSE_B, interval = sig.range, Y = Y, h = h,
# # xXh = x0Xh, XXh = XjXih, thetaXh = thetaXh)
# # sig_opt_x0 <- opt$minimum; amse_min <- opt$objective
# # # Minimierungsversuch 2:
# # opt <- optimize( f = AMSE_B, interval = sig.range/c(1, 3), Y = Y, h = h,
# # xXh = x0Xh, XXh = XjXih, thetaXh = thetaXh)
# # sig_opt_x0_2 <- opt$minimum; amse_min_2 <- opt$objective
#
# An <- AMSE_B( sig.grid, Y = Y, h = h, xXh = x0Xh, XXh = XjXih,
# thetaXh = thetaXh)
#
# } else stop( "Version '", Version, "' gibt es nicht!")
#
# # # Minimierungsversuch 2 "besser" als 1?
# # if( amse_min_2 < amse_min) sig_opt_x0 <- sig_opt_x0_2
#
# # Minimizer und Minimum des Schaetzers von AMSE_x0(\sigma)
# # durch "grid search":
# sig_opt_x0 <- sig.grid[ which.min( An)]
#
# W <- Wn( sigma = sig_opt_x0, h = h, xXh = x0Xh, thetaXh = thetaXh)
# mnhatx0 <- W %*% Y
#
# c( mnhatx0 = mnhatx0, mnx0_hopt = mnx0_hopt, lox0 = lox0, lox0.h = lox0.h)
# }
# } )
#
# lox0.meanh <- mean( Sim[ "lox0.h",]); Sim <- Sim[ -4,]
# mx0 <- mm( x0); Means <- rowMeans( Sim); Biases <- Means - mx0
# Variances <- apply( Sim, 1, var); MSEs <- Biases * Biases + Variances
#
# Resultate[ paste( "x0", x0, sep = "="), paste( "n", n, sep = "="),
# sd = paste( "sd", sd.eps, sep = "="),
# c( "Bias", "Var", "MSE"), ] <- rbind( Biases, Variances, MSEs)
#
# if( !(n > 25 || sd.eps == 1)) {
# ## Grafische Darstellung der Resultate (Boxplots)
# ##************************************************
# Bim1 <- as.list( as.data.frame( t( Sim)))
# Bim2 <- list( "'Idealistic' - Adjusted" = Sim[ "mnx0_hopt",] - Sim[ "mnhatx0",],
# "'Classic' - Adjusted" = Sim[ "lox0",] - Sim[ "mnhatx0",])
#
# pch <- c( 1, 4, 5); cols <- c( "red", "orange", "green"); cex <- 2
# pdf( paste( "Plots/AMSEopt_x", x0, "_n", formatC( n, width = 3, flag = 0),
# "_s", formatC( 10*sd.eps, width = 2, flag = 0), "_D", now,
# ".pdf", sep = ""),
# paper = "a4", width = 0, height = 0)
# par( pl <- list( oma = c( 0,0,8,0), mar = c( 3.5, 3.3, 1, 3)+.1,
# mgp = c( 2, 0.5, 0), tcl = -0.3, lab = c( 5, 10, 0)))
# boxplot( Bim1, names = c( "Adjusted ...", "'Idealistic' ...", "'Classic' ..."),
# ylab = expression( hat(m)[n](x[0])~~~~"bzw."~~~~m[n](x[0])
# ~~~~"bzw."~~~~lokerns(x[0])),
# cex.axis = 1.2, cex.lab = 1.2,
# xlab = expression( "kernel regression estimate values at"~x[0]))
#
# abline( h = mx0, col = "blue")
# axis( 4, at = mx0, tick = FALSE, labels = expression( m(x[0])), line = 0,
# las = 2, cex.axis = 1.2, col.axis = "blue")
#
# points( Means, col = cols, pch = pch, cex = cex, lwd = 3)
# legend( "top", pch = pch, col = cols, pt.lwd = 3, bty = "n", cex = 1.4,
# legend = c( expression( bar(hat(m)[n](x[0]))),
# expression( bar(m[n](x[0]))),
# expression( bar(lokerns(x[0]))) ), y.intersp = 1.7)
# TitleAndTopAxis( at = 1:3 - 0.18, cex.axis = 1.2)
#
#
# boxplot( Bim2, cex.axis = 1.1, cex.lab = 1.1,
# ylab = expression( m[n](x[0]) - hat(m)[n](x[0])~~~~~~"bzw."~~~~~~
# lokerns(x[0]) - hat(m)[n](x[0])),
# xlab = bquote( "Difference between kernel regression estimates at "~
# x[0] == .(x0)~"with"~
# sigma(paste(Y,"|",X==x)) == .(sd.eps)))
# abline( h = 0, col = "blue")
# points( c( Means[ "mnx0_hopt"] - Means[ "mnhatx0"],
# Means[ "lox0"] - Means[ "mnhatx0"]),
# col = c( "darkgreen", "brown"), pch = c( 8, 9), cex = cex, lwd = 2)
# legend( "topleft", pch = c( 8, 9, -1), col = c( "darkgreen", "brown", NA),
# pt.lwd = 2, bty = "n", cex = 1.4,
# legend = c( bquote( bar(m[n](x[0]) - hat(m)[n](x[0])) ==
# .(round( Means[ "mnx0_hopt"] - Means[ "mnhatx0"],
# 5))),
# bquote( bar(lokerns(x[0]) - hat(m)[n](x[0]))==
# .(round( Means[ "lox0"] - Means[ "mnhatx0"], 5))),
# expression() ), y.intersp = 1.7)
# TitleAndTopAxis( at = c( 0.833, 1.5, 2.165) - 0.12, cex.axis = 1.2)
# dev.off()
# }
# } # sd.eps-loop
# } # n-loop
# } # x0-loop
#
# # rm( list = ls()); dev.off()
#
#
# today <- format( Sys.time(), "%Y%m%d")
# sink( paste( "Resultate_", today, ".txt", sep = ""))
# print( ftable( Resultate))
# sink()
#
# #round( ftable( Resultate[ c( "x0=4", "x0=8", "x0=2"),
# # c( "n=25", "n=50", "n=100"),
# # c( "sd=0.5", "sd=2"), , ],
# # row.vars = c( "x0", "sd", "Schaetzer") ), 4)
#
# library( Hmisc)
# punkte <- c( "minimum" = "x0=2", "point of inflection" = "x0=4",
# "'arbitrary' point" = "x0=5", "saddle point" = "x0=8")
# Tab <- lapply( punkte, function( v)
# ftable( Resultate[ v, c( "n=50", "n=25", "n=100"),
# c( "sd=0.5", "sd=2"), , ],
# row.vars = c( "sd", "Schaetzer")) )
# names( Tab) <- paste( "Performance in", names( punkte),
# paste( "$(", gsub( "x0", "x_0", punkte, fixed = TRUE),
# ")$", sep = ""),
# "based on", MCsamplesize, "Monte Carlo samples" )
#
# CV <- attr( Tab[[1]], "col.vars")
# CV$n <- paste( "$", CV$n, "$", sep = "")
# CV$Methode2 <- c( "$\\hat m_n$", "$m_n$", "\\texttt{lokerns}")
#
# RV <- attr( Tab[[1]], "row.vars")
# RV$sd <- paste( "$", gsub( "sd", "\\sigma", RV$sd, fixed = TRUE), "$", sep = "")
# RV$Schaetzer <- paste( "$\\widehat{\\text{", RV$Schaetzer, "}}$", sep = "")
#
# w <- latex( object = Tab, file = paste( "Tab_", today, ".tex", sep = ""),
# title = "", where = "!htbp", dec = 3, first.hline.double = FALSE,
# cgroup = CV$n, colheads = rep( CV$Methode2, length( CV$n)),
# extracolheads = rep( CV$Methode, length( CV$n)),
# rgroup = RV$sd, rowname = rep( RV$Schaetzer, length( RV$sd))
# )
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.