How to predict from spline parameters ns without a model object

I have coefficients from glm set to R and I want to predict the expected values ​​for a new dataset. If I had a model object, that would be simple using pred (). However, I am now out of the office and for reasons of data privacy I no longer have a model object. I only have a summary object generated using summary (model), which contains the coefficients of the model.

It is easy to use coefficients to predict expected values ​​for a simple model. However, I would like to know how to do this when the model includes the cubic spline ns (). Any keyboard shortcuts when the model also includes categorical variables will also be appreciated.

Here is a simple example.

library(splines)
dat <- data.frame(x=1:500, z=runif(500), k=as.factor(sample(c("a","b"), size=500, replace=TRUE)))
kvals <- data.frame(kn=c("a","b"),kv=c(20,30))
dat$y = dat$x + (40*dat$z)^2 + kvals$kv[match(dat$k,kvals$kn)] + rnorm(500,0,30)
# Fit model
library(splines)
mod <- glm(y ~ x + ns(z,df=2) + k,data=dat)
# Create new dataset
dat.new <- expand.grid(x=1:3,z=seq(0.2,0.4,0.1),k="b")
# Predict expected values in the usual way
predict(mod,newdata=dat.new)
summ <- summary(mod)
rm(mod)
# Now, how do I predict using just the summary object and dat.new?
+4
1

, , , , . summ , , :

    names(summ)
     [1] "call"           "terms"          "family"         "deviance"       "aic"           
     [6] "contrasts"      "df.residual"    "null.deviance"  "df.null"        "iter"          
    [11] "deviance.resid" "coefficients"   "aliased"        "dispersion"     "df"            
    [16] "cov.unscaled"   "cov.scaled"    

terms, , predvars:

str(summ$terms)
Classes 'terms', 'formula'  language y ~ x + ns(z, df = 2) + k
  ..- attr(*, "variables")= language list(y, x, ns(z, df = 2), k)
  ..- attr(*, "factors")= int [1:4, 1:3] 0 1 0 0 0 0 1 0 0 0 ...
  .. ..- attr(*, "dimnames")=List of 2
  .. .. ..$ : chr [1:4] "y" "x" "ns(z, df = 2)" "k"
  .. .. ..$ : chr [1:3] "x" "ns(z, df = 2)" "k"
  ..- attr(*, "term.labels")= chr [1:3] "x" "ns(z, df = 2)" "k"
  ..- attr(*, "order")= int [1:3] 1 1 1
  ..- attr(*, "intercept")= int 1
  ..- attr(*, "response")= int 1
  ..- attr(*, ".Environment")=<environment: R_GlobalEnv> 
  ..- attr(*, "predvars")= language list(y, x, ns(z, knots = structure(0.514993450604379, .Names = "50%"), Boundary.knots = c(0.00118412892334163,  0.99828373757191), intercept = FALSE), k)
  ..- attr(*, "dataClasses")= Named chr [1:4] "numeric" "numeric" "nmatrix.2" "factor"
  .. ..- attr(*, "names")= chr [1:4] "y" "x" "ns(z, df = 2)" "k"

:

str(attributes(summ$terms)$predvars)
 language list(y, x, ns(z, knots = structure(0.514993450604379, .Names = "50%"),
               Boundary.knots = c(0.00118412892334163,  0.99828373757191), intercept = FALSE), k)

, , x, y, z k:

with(dat, ns(z, knots = 0.514993450604379, Boundary.knots = c(0.00118412892334163, 
 0.99828373757191), intercept = FALSE) )
#---
                 1             2
  [1,] 5.760419e-01 -1.752762e-01
  [2,] 2.467001e-01 -1.598936e-01
  [3,] 4.392684e-01  4.799757e-01
snipping ....
[498,] 4.965628e-01 -2.576437e-01
[499,] 5.627389e-01  1.738909e-02
[500,] 2.393920e-02 -1.611872e-02
attr(,"degree")
[1] 3
attr(,"knots")
[1] 0.5149935
attr(,"Boundary.knots")
[1] 0.001184129 0.998283738
attr(,"intercept")
[1] FALSE
attr(,"class")
[1] "ns"     "basis"  "matrix"

dat, . . ?ns , .

+1

Source: https://habr.com/ru/post/1655019/


All Articles