gpt4 book ai didi

r - 当输入数据集之间的变量数不同时,如何自动指定正确的回归模型?

转载 作者:行者123 更新时间:2023-12-04 11:35:03 26 4
gpt4 key购买 nike

我有一个有效的R程序,内部客户将使用该程序来分析其营养摄入数据。对于他们拥有的每个数据集,他们将重新运行R程序。

数据集的关键部分是使用nlmer包中的lme4的非线性混合方法分析,其中包含年龄的虚拟变量。尽管参考年龄段的假人始终是最小的,但取决于他们将分析儿童还是成人,公式中的年龄段假人的数量将有所不同。我认为可能的年龄段数量介于4到6之间,因此范围不大。如果我需要根据这个条件来计算年龄假人的数量,这是一件小事。

对我而言,包装基于模型的代码(提供起始参数值的lmernlmer模型的功能以及nlmer本身中的模型规范)的最有效方法是什么?根据模型中年龄段假人的数量应用功能和模型?模型中的其他变量在数据集中是恒定的。

我已经设置了用于自动生成相关虚拟变量并删除当前分析中未使用的虚拟变量的程序。模型之后的程序也很好地设置为自动化。我只是停留在如何自动化两个基于lme4的分析和功能上。这些将仅对每个数据集运行一次。

我一直在想是否需要编写一个函数来包含所有与lme4相关的代码,或者是否有一种更简单的方法。我将对如何执行此操作有一些建议。我花了一天的时间来研究如何使nlmer模型所需的功能正常工作,因此我仍然对函数仍然处于初学者的水平。

我在网站上搜索了其他与R相关的自动化问题,但没有找到与我想做的事情类似的事情。

提前致谢。

更新以响应注释中有关使用字符串的建议。对于我来说,这听起来像是一种简单的方法,只是我不知道如何在函数中使用字符串内容,因为nlmer的函数中使用了每个哑变量级别(不包括参考类别)。如何拆分字符串并仅使用函数中具有的伪变量?例如,一个分析可能具有AgeBand2,AgeBand3,AgeBand4,另一分析可能具有AgeBand5以及那些3?如果这是VBA,我将根据年龄虚拟变量的数量创建子函数。我不知道如何在R中有效地做到这一点。

是否可以仅在while,函数和lmer部分周围包裹一个nlmer循环,所以我有一系列的while循环?

这是我希望自动化的代码部分,AgeBand虚拟变量的数量取决于将要分析的数据集(儿童与成人)的不同。这使用的是我一直在测试从SASR的翻译的数据集,但是实际的数据集将非常相似。有必要建立一个非线性模型,因为这是我正在研究的经过同行评审的公开方法的基础。

library(lme4)
Male.lmer <- lmer(BoxCoxXY ~ AgeBand4 + AgeBand5 + AgeBand6 + AgeBand7 +
AgeBand8 + Race1 + Race3 + Weekend + IntakeDay + (1|RespondentID),
data=Male.AddSugar,
weights=Replicates)

Male.lmer.fixef <- fixef(Male.lmer)
Male.lmer.fixef <- as.data.frame(Male.lmer.fixef)
bA <- Male.lmer.fixef[1,1]
bB <- Male.lmer.fixef[2,1]
bC <- Male.lmer.fixef[3,1]
bD <- Male.lmer.fixef[4,1]
bE <- Male.lmer.fixef[5,1]
bF <- Male.lmer.fixef[6,1]
bG <- Male.lmer.fixef[7,1]
bH <- Male.lmer.fixef[8,1]
bI <- Male.lmer.fixef[9,1]
bJ <- Male.lmer.fixef[10,1]

MD <- deriv(expression(b0 + b1*AgeBand4 + b2*AgeBand5 + b3*AgeBand6 +
b4*AgeBand7 + b5*AgeBand8 + b6*Race1 + b7*Race3 + b8*Weekend + b9*IntakeDay),
namevec=c("b0","b1","b2","b3", "b4", "b5", "b6", "b7", "b8", "b9"),
function.arg=c("b0","b1","b2","b3", "b4", "b5", "b6", "b7", "b8", "b9",
"AgeBand4","AgeBand5","AgeBand6","AgeBand7","AgeBand8",
"Race1","Race3","Weekend","IntakeDay"))

Male.nlmer <- nlmer(BoxCoxXY ~ MD(b0,b1,b2,b3,b4,b5,b6,b7,b8,b9,AgeBand4,AgeBand5,AgeBand6,AgeBand7,AgeBand8,
Race1,Race3,Weekend,IntakeDay)
~ b0|RespondentID,
data=Male.AddSugar,
start=c(b0=bA, b1=bB, b2=bC, b3=bD, b4=bE, b5=bF, b6=bG, b7=bH, b8=bI, b9=bJ),
weights=Replicates
)


这些将是数据集之间的必需更改:


我需要从 lmer中分配的固定效果系数的数量将发生变化。
在函数中,表达式,name.vec和function.arg部分将发生变化
nlmer,模型声明和开始参数列表将更改。


我可以更改 lmer模型语句,以便将AgeBand作为级别的一个因素,但此后我仍然需要提取系数的值。

str(Male.AddSugar)给出:

'data.frame':   10287 obs. of  23 variables:
$ RespondentID: int 9966 9967 9970 9972 9974 9976 9978 9979 9982 9993 ...
$ RACE : int 2 3 2 2 3 2 2 2 2 1 ...
$ RNDW : int 26290 7237 10067 75391 1133 31298 20718 23908 7905 1091 ...
$ Replicates : num 41067 2322 17434 21723 375 ...
$ DRXTNUMF : int 27 11 13 18 17 13 13 19 11 11 ...
$ DRDDAYCD : int 1 1 1 1 1 1 1 1 1 1 ...
$ IntakeAmt : num 33.45 2.53 9.58 43.34 55.66 ...
$ RIAGENDR : int 1 1 1 1 1 1 1 1 1 1 ...
$ RIDAGEYR : int 39 23 16 44 13 36 16 60 13 16 ...
$ Subgroup : Ord.factor w/ 6 levels "3"<"4"<"5"<"6"<..: 4 3 2 4 1 4 2 5 1 2 ...
$ WKEND : int 1 1 1 0 1 0 0 1 1 1 ...
$ AmtInd : num 1 1 1 1 1 1 1 1 1 1 ...
$ IntakeDay : num 0 0 0 0 0 0 0 0 0 0 ...
$ Weekend : int 1 1 1 0 1 0 0 1 1 1 ...
$ Race1 : num 0 0 0 0 0 0 0 0 0 1 ...
$ Race3 : num 0 1 0 0 1 0 0 0 0 0 ...
$ AgeBand4 : num 0 0 1 0 0 0 1 0 0 1 ...
$ AgeBand5 : num 0 1 0 0 0 0 0 0 0 0 ...
$ AgeBand6 : num 1 0 0 1 0 1 0 0 0 0 ...
$ AgeBand7 : num 0 0 0 0 0 0 0 1 0 0 ...
$ AgeBand8 : num 0 0 0 0 0 0 0 0 0 0 ...
$ YN : num 1 1 1 1 1 1 1 1 1 1 ...
$ BoxCoxXY : num 7.68 1.13 3.67 8.79 9.98 ...


AgeBand数据错误地显示为有序因子 Subgroup。因为我没有使用过,所以没有回过头将其更正为一个简单的因素。

最佳答案

假设您有一个变量“ ageband”,它是一个与级别有关的因素:AgeBand2,AgeBand3,AgeBand4,也许还有其他您想忽略的变量。由于通常使用最低的Lexigraphic值作为参考水平,通过R回归函数来处理因子,因此可以自动选择正确的水平。您可以通过创建仅具有所需级别的数据集来选择所需级别。

agelevs <- c("AgeBand2", "AgeBand3", "AgeBand4")
dsub <- subset(inpdat, ageband %in agelevs)
res <- your_fun(dsub) nlmer(y ~ ageband + <other-parameters>, data=dsub, ...)


如果您麻烦创建单独的变量,那么您需要学习正确使用因素,而不是坚持通过在SPSS或其他笨拙的宏处理器中进行训练而强制实施的无效习惯。

关于r - 当输入数据集之间的变量数不同时,如何自动指定正确的回归模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9146840/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com