求助:修复R语言GAMLSS/GAMLSS.inf包运行报错问题
问题1:
cannot coerce class "function" to a data.frame 报错解决 核心原因
错误使用gamlssInf0to1的参数格式:该函数没有y参数,额外传入y=slf导致参数解析混乱;同时mu.formula里的ga(~s(...))写法不符合ga()语法要求。
修正后的代码
library(gamlss) library(gamlss.inf) library(gamlss.add) data(lungFunction) A <- lungFunction gen.Family("SST", "logit") # 修正:去掉y参数,将响应变量写入formula;修正ga()的写法 mf1 <- gamlssInf0to1(formula = slf ~ ga(log(height), log(age)), sigma.formula = ~pb(log(age)), nu.formula = ~pb(log(age)), tau.formula = ~pb(log(age)), xi1.formula = ~pb(log(age)) + pb(log(height)), family = logitSST, data = A, n.cyc = 100, trace = TRUE)
额外说明
ga()是gamlss的自适应平滑项,直接传入变量即可,不需要嵌套s()(若需二维平滑,ga(var1, var2)已支持);- 若偏好使用mgcv的
s()平滑,需先加载mgcv包,写法改为formula = slf ~ s(log(height), log(age)),无需嵌套ga()。
问题2:
missing value where TRUE/FALSE needed 报错解决 核心原因
拟合过程中模型偏差值(G.dev)出现NA,导致循环判断条件失效,通常由语法错误、数据缺失或模型与数据不匹配导致。
分步解决
修正公式语法
同样错误使用了ga(~s(...))的嵌套写法,改为标准格式:# 写法1:用gamlss自带的ga()自适应平滑 b4 <- gamlss(slf ~ ga(log(height), log(age)), data=A, family=BI) # 写法2:用mgcv的s()平滑(需先library(mgcv)) b4 <- gamlss(slf ~ s(log(height), log(age)), data=A, family=BI)清理缺失值
检查并移除数据中的NA:A_clean <- na.omit(A) b4 <- gamlss(slf ~ ga(log(height), log(age)), data=A_clean, family=BI)验证模型与数据匹配性
BI(Beta-Inflated)分布要求响应变量slf在[0,1]区间,且存在0或1的取值;若slf仅在(0,1)之间,改用BE(Beta)族:b4 <- gamlss(slf ~ ga(log(height), log(age)), data=A_clean, family=BE)
调整拟合参数
若仍报错,尝试增加循环次数或开启追踪查看拟合过程:b4 <- gamlss(slf ~ ga(log(height), log(age)), data=A_clean, family=BI, n.cyc=100, trace=TRUE)
内容的提问来源于stack exchange,提问作者stats
相关产品推荐
相关产品推荐

