R。使用测量,样条和仅一个自变量值的错误预测

问题描述 投票:0回答:1

[当我尝试使用此语法仅对自变量的一个值进行预测时:

library(survey)
library(splines)
data(api)
dclus <- svydesign(id=~dnum,data=apiclus2)
log<-svyglm(api99 ~  bs(ell,degree=1, knots =c(14,23)) , dclus)
data <- data.frame(ell = 0)
data <- cbind(data, predict(log, newdata=data))
data <- data.frame(ell = 15)
data <- cbind(data, predict(log, newdata=data))

我总是得到相同的预测:

#link=591.0929

如果仅使用测量或样条曲线,或者创建具有独立值列表的数据框,则不会发生这种情况:

data<-data.frame(ell = rep(seq(from = 0, to = 66)))
data <- cbind(data, predict(log, newdata=data))

很奇怪,在此最后一个数据帧中,link = 591.0929对应于ell = 23

r spline survey bspline
1个回答
0
投票

这里的问题是bs()术语没有完全指定基础-它也使用预测变量的范围来计算边界结。仅凭一点,它的工作方式就行不通了。

解决方法是指定边界结,例如

> log<-svyglm(api99 ~  bs(ell,degree=1, knots =c(14,23), Boundary.knots=c(0,100)) , dclus)
> data <- data.frame(ell = 0)
>  predict(log, newdata=data)
    link     SE
1 787.64 27.162
> data2 <- data.frame(ell = 15)
>  predict(log, newdata=data2)
    link     SE
1 627.76 34.108

似乎predict.lm有一些复杂的东西可以阻止这种情况的发生,这在编写predict.svyglm时是没有的。

© www.soinside.com 2019 - 2024. All rights reserved.