基于baltimore住房数据用glmmPQL加面积权重建模报错求解
glmmPQL权重参数报错解决方法
核心原因
MASS::glmmPQL继承nlme包的模型参数规则,weights参数不支持直接传入数值向量,必须传入nlme定义的方差函数对象,用于指定观测方差的加权规则,这是触发报错的根本原因。
解决方案
- 调整权重传入格式:如果需要按房屋面积
SQFT设置观测权重(即权重与SQFT成正比),使用varFixed()函数封装方差与权重的对应关系即可,varFixed(~I(1/w))等价于设置观测权重为w。 - 避免样本量不匹配:不要预先计算单独的权重向量,所有变量统一存入建模数据框中,自动适配建模时的样本删失规则,避免因缺失值剔除导致的长度不匹配问题。
- 优化后可运行代码如下:
library(spData) library(nlme) library(MASS) baltimore <- spData::baltimore # 提前剔除相关字段的缺失值,避免拟合异常 baltimore <- na.omit(baltimore[, c("PATIO", "PRICE", "CITCOU", "X", "Y", "SQFT")]) # 自定义权重存入数据框 baltimore$w <- baltimore$SQFT / 100 model1 <- glmmPQL( PATIO ~ PRICE, random = ~ 1 | CITCOU, data = baltimore, family = binomial, correlation = corExp(form = ~ X + Y, nugget = TRUE), weights = varFixed(~ I(1/w)) )
- 如果你不需要调整权重的缩放系数,也可以省略自定义w的步骤,直接写
weights = varFixed(~ I(1/SQFT))即可,拟合的系数结果不会变化,仅标准误的缩放系数会受影响。
内容的提问来源于stack exchange,提问作者willbutdontwanna
相关产品推荐
相关产品推荐

