gpt4 book ai didi

r - 具有任意列数的数据框的 lm 函数

转载 作者:行者123 更新时间:2023-12-02 04:17:43 25 4
gpt4 key购买 nike

我正在尝试编写一个函数,该函数适用于具有任意列数的数据框。该功能的一部分涉及 lm 命令,我遇到了麻烦。对于本示例,我将使用以下数据:

x1 <- runif(100)
x2 <- runif(100)

z1 <- runif(100)
z2 <- runif(100)

y <- 0.2 + 0.7*x1 + 0.7*x2 + 0.4*z1 + 0.4*z2 + 0.8*z1*z2 + 0.8*z1^2 + 0.8*z2^2 + rnorm(100,0,.2)

df <- data.frame(y,x1,x2,z1,z2)

该函数被编程为记录用户提供了多少个x和多少个z,并且x总是出现在数据框中单个y变量之后和z变量之前。因此,在本例中,数据框的第一列中有 2 个 x 和 2 个 z,当然还有 1 个 y。该函数将 x 和 z 的数量记录为变量 n.x 和 n.z

n.x <- 2
n.z <- 2

我想在 x 和 z 中的二阶多项式上包含 y 的回归,但对于用户提供的 x 和 z 的数量,它必须灵活。

我知道如果我能够直接观察 df,那么我可以简单地使用

linear.model <- lm(y ~ cbind(x1,x2) + poly(cbind(z1,z2),degree=2),data=df) 

但在某些情况下,可能会有更多或更少的 x 和/或 z。我尝试了以下方法,知道它不太可能起作用:

linear.model <- lm(df$y ~ cbind(df[,2:(n.x+1)]) + poly(cbind(df[,(n.x+2):(n.x+n.z+1)]),degree=2)) 

当然,它不起作用。这个问题的关键在于它必须使用 lm 中的 n.x 和 n.z 变量来指示 x 和 z 在数据框中的位置。

非常感谢您的帮助。谢谢!

最佳答案

您可以根据数据框名称在字符串中创建公式使用 as.formula 进行转换:

xs <- paste(names(df)[2:(1 + n.x)], collapse = ", ")
zs <- paste(names(df)[(2 + n.x):(1 + n.x + n.z)], collapse = ", ")

s_formula <- sprintf("y ~ cbind(%s) + poly(cbind(%s),degree=2)", xs, zs)

linear.model <- lm(as.formula(s_formula), data=df)

关于r - 具有任意列数的数据框的 lm 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32672147/

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