Esto suena como un gran trabajo para GAMs a través de la mgcv
paquete. Utiliza un spline de suavizado penalizado para estimar $g$ y añadir un efecto aditivo de $X$ . El modelo tendría el siguiente aspecto gam(y ~ x + s(z)
.
library(mgcv)
#> Loading required package: nlme
#> This is mgcv 1.8-31. For overview type 'help("mgcv-package")'.
z = rnorm(1000)
x = rnorm(1000)
y = 2 + 0.25*x + sin(pi*z) + rnorm(1000, 0, 0.3)
d = data.frame(x, y, z)
model = gam(y ~ x + s(z), data = d)
summary(model)
#>
#> Family: gaussian
#> Link function: identity
#>
#> Formula:
#> y ~ x + s(z)
#>
#> Parametric coefficients:
#> Estimate Std. Error t value Pr(>|t|)
#> (Intercept) 1.968566 0.009514 206.91 <2e-16 ***
#> x 0.262245 0.009888 26.52 <2e-16 ***
#> ---
#> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#>
#> Approximate significance of smooth terms:
#> edf Ref.df F p-value
#> s(z) 8.977 9 625.1 <2e-16 ***
#> ---
#> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#>
#> R-sq.(adj) = 0.865 Deviance explained = 86.6%
#> GCV = 0.091407 Scale est. = 0.090404 n = 1000
Creado el 2020-10-20 por el paquete reprex (v0.3.0)