我有一个随机数量的定量变量的数据框。我需要编写一个函数来计算lm来预测因变量的值。作为预测变量,我想只使用那些具有p.value>的变量。 0.05。该函数应返回仅为所选预测变量构造的线性回归系数作为向量。如果数据中没有这样的预测变量,则该函数应返回警告“数据中没有正常变量”。我写了这个函数,但它不起作用。
smart_lm <- function(x) {
sl <- apply(x[2:dim(x)[2]], 2, function(x) shapiro.test(x)$p.value)
my_reg <- lm(as.formula(paste("x[[1]]~",paste(x[2:dim(x)[2]], collapse = "+"))))
return(ifelse(sl[sl > 0.05], my_reg, "There are no normal variables in the data"))
}
答案 0 :(得分:0)
如果我理解正确,以下情况应该这样做
请注意,不需要ifelse
,并且公式使用点.
来包含尚未包含在公式中的数据参数的所有变量,这些变量都是DF2[[1]]
。
set.seed(1665) # Make the results reproducible
n <- 100
x1 <- rnorm(n)
x2 <- rnorm(n, 2, 6)
x3 <- rexp(n)
y <- x1 + x2 + x3 + rnorm(n)
dat <- data.frame(y, x1, x2, x3)
smart_lm <- function(DF){
sl <- c(NA, sapply(DF[-1], function(x) shapiro.test(x)$p.value))
DF2 <- DF[, which(sl > 0.05)]
names(DF2) <- names(DF)[which(sl > 0.05)]
lm(DF2[[1]] ~ ., data = DF2)
}
smart_lm(dat)
#
#Call:
#lm(formula = DF2[[1]] ~ ., data = DF2)
#
#Coefficients:
#(Intercept) x1 x2
# -3.331e-17 1.000e+00 9.593e-18