svyolr основан на MASS :: polr, так что я думаю, вы могли бы взломать алгоритм прогнозирования для этого ..
я сомневаюсь, что доверительные интервалы, которые генерирует glm.predict :: polr.predict (), являются законными
library(glm.predict)
library(survey)
data = MASS::survey
data$Smoke = ordered(MASS::survey$Smoke,levels=c("Never","Occas","Regul","Heavy"))
model1 = MASS::polr(Smoke ~ Sex + Height, data=data)
summary(model1)
# comparing a man to a woman
polr.predict(model1, c(1,170),sim.count=10000)
this_design <- svydesign( ~ 1 , data = data , weights = ~ Age )
model2 = svyolr(Smoke ~ Sex + Height, this_design)
class(model2) <- 'polr'
# prediction for male with height 170
( this_prediction <- polr.predict(model2, c(1,170),sim.count=10000) )
fake_data <- data[ c( 'Sex' , 'Height' ) ]
fake_data <- fake_data[ complete.cases( fake_data ) , ]
fake_data[ , ] <- sapply( fake_data[ , ] , as.numeric )
# lowering sim.count just so it runs faster
res <- apply( fake_data , 1 , function( w ) polr.predict(model2, w ,sim.count=100) )
# prediction for the first record
res[1:4,1]
# lower CI for the first record
res[5:8,1]
# upper CI for the first record
res[9:12,1]
# prediction of heavy smoking for every record
fake_data[ , 'predicted_heavy_smoking' ] <- res[ 4 , ]