R. 使用调查、样条和仅自变量的一个值进行的错误预测
R. Incorrect prediction using survey, splines and only one value of the independent variable
当我尝试使用以下语法对自变量的一个值进行预测时:
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
这里的问题是 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
写的时候还没有。
我会将其传递给包维护者 ;-)
当我尝试使用以下语法对自变量的一个值进行预测时:
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
这里的问题是 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
写的时候还没有。
我会将其传递给包维护者 ;-)