0

我有一个棘手的问题。我有一个包含 1000 多个变量的数据框,并希望使用 fp 平滑函数使每个变量适应年龄。我知道如何将 gamlss() 用于特定变量 (vari),但是明确地重复此操作超过 1000 次是不切实际的。此外,我想在一个图中绘制所有 1000 个变量的拟合。我所做的是:

variables <- colnames(data)[7:dim(data)[2]]
for(vari in variables) {
   print("ROI is:")
   print(vari)
   model_fem <- gamlss(vari ~ fp(age), family=GG, data=females)

但我得到了错误:

Error in model.frame.default(formula = vari ~ fp(age), data = females) :
variable lengths differ (found for 'fp(age)')

我认为棘手的部分来自 fp()。我尝试使用 as.formula,它没有用。也因为 females$vari 返回 NULL,这就是我们得到这个错误的原因。你有什么解决办法吗?谢谢

4

1 回答 1

0

字符值与公式有很大不同。公式包含符号,您需要正确重建它们以使它们动态化。有很多不同的方法可以做到这一点,但这里有一种用于reformulate将字符转换为公式并update()修改基本公式的方法。

variables <- colnames(data)[7:dim(data)[2]]
form_resp <- ~ fp(age)
for(vari in variables) {
   print("ROI is:")
   form_model <- update(form, reformulate(".", response=vari))
   print(form_model)
   model_fem <- gamlss(form_model, family=GG, data=females)
}
于 2021-07-17T19:22:57.137 回答