如何使用svyolr函数进行模型预测

如何使用svyolr函数进行模型预测,r,survey,R,Survey,我正在使用调查包中的svyoll函数来运行一个有序回归模型。我想通过检查模型对我的调查数据和假设数据集的预测来分析模型 由于Svyoll函数似乎没有预测方法,如何从拟合的Svyoll模型中获得模型预测 以下是一些示例数据和一个简单的示例模型: library(survey) # Load example data data(api) # Create a survey design object dclus1 <- svydesign(id=~dnum, weights=~pw, da

我正在使用调查包中的svyoll函数来运行一个有序回归模型。我想通过检查模型对我的调查数据和假设数据集的预测来分析模型

由于Svyoll函数似乎没有预测方法,如何从拟合的Svyoll模型中获得模型预测

以下是一些示例数据和一个简单的示例模型:

library(survey)

# Load example data
data(api)

# Create a survey design object
dclus1 <- svydesign(id=~dnum, weights=~pw, data=apiclus1, fpc=~fpc)

# Add an ordinal variable to the data
dclus1 <- update(dclus1, mealcat=cut(meals,c(0,25,50,75,100)))

# Fit an ordinal regression model
m <- svyolr(formula = mealcat ~ avg.ed + stype,
            design = dclus1)

# Generate fake data to use in evaluating model predictions
fake_data <- dclus1$variables[,c("avg.ed", "stype")]
fake_data <- subset(fake_data, !is.na(avg.ed))

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 , ]

是的,在该软件包的News.md文件中,Lumley博士说,对于Svyoll来说,代码是从MASS软件包中撕下来的。这很有帮助。您能否解释一下您对glm中的置信区间提出的担忧。预测或提及供进一步阅读的资源?您好,置信区间估计值基于100或1000或10000次模拟,但不基于由于采样不确定性而进行的任何调整。polr期望数据来自一个简单的随机样本。这个黑客会给你太小的置信区间。所以你有一个最好的猜测,但你不知道这个猜测有多好谢谢你,安东尼。所以,在尝试改编来自MASS::polr的代码之前,似乎有必要对相关的调查统计文献进行审查。