R中GAM线性性检验及GLM连续响应变量Poisson族使用疑问
问题解答
1. GAM模型代码合理性说明
你当前编写的gamlss代码语法本身是正确的:model <- gamlss(logA ~ pb(B) , data = X, trace = F) 中pb()是gamlss包内置的P-样条平滑项构造函数,用于拟合连续预测变量B和响应变量logA的非线性关系。
如果你的核心目的是检验二者是否为线性关系,仅拟合上述平滑模型不够,还需要补充对比步骤:
- 先拟合无平滑项的纯线性基准模型:
linear_model <- gamlss(logA ~ B, data = X, trace = F) - 用两种方式验证线性假设是否成立:
- 查看
summary(model)输出中pb(B)项的显著性,若对应p值大于0.05,说明平滑项的非线性成分无统计意义 - 用似然比检验
LR.test(model, linear_model)对比两个模型,若检验结果不显著,说明线性模型就足够拟合二者关系,不需要引入非线性平滑项
- 查看
2. GLM中泊松族参数的使用合理性说明
绝对不可以在响应变量为连续型logA的GLM中添加family=Poisson参数,原因如下:
泊松分布族是专门为离散非负计数型响应变量设计的,要求响应变量取值只能是0、1、2…这类整数,你的logA是连续型数值,完全不符合泊松分布的适用前提,强行指定会导致参数估计完全错误、假设检验结果不可信。
针对你的连续型logA响应变量,GLM的正确参数设置为:
- 如果你已经手动完成了对数变换,直接使用
family = gaussian(link = "identity")即可,这也是GLM针对连续正态响应的默认配置 - 如果你不想手动做对数变换,也可以直接对原始响应变量A建模,指定
family = gaussian(link = "log"),拟合效果和手动变换后用恒等链接的结果等价 - 如果原始的A是右偏的正连续变量,更推荐使用
family = Gamma(link = "log"),该分布族对右偏正连续数据的适配性比手动对数变换后用高斯族更好,假设更宽松
内容的提问来源于stack exchange,提问作者Tristan
相关产品推荐
相关产品推荐

