我无法在一系列数据帧上运行健壮的线性回归模型(使用MASS库中的rlm)。
可复制的示例:
var1 <- c(1:100)
var2 <- var1*var1
df1 <- data.frame(var1, var2)
var1 <- var1 + 50
var2 <- var2*2
df2 <- data.frame(var1, var2)
lst1 <- list(df1, df2)
线性模型(有效):
lin_mod <- lapply(lst1, lm, formula = var1 ~ var2)
summary(lin_mod[[1]])
我的健壮模型代码:
rob_mod <- lapply(lst1, MASS::rlm, formula = var1 ~ var2)
出现以下错误:
Error in rlm.default(X[[i]], ...) :
argument "y" is missing, with no default
我该如何解决?
我的实际数据中的错误是:
Error in qr.default(x) : NA/NaN/Inf in foreign function call (arg 1)
In addition: Warning message:
In storage.mode(x) <- "double" : NAs introduced by coercion
答案 0 :(得分:3)
您也可以尝试使用purrr:map
解决方案:
library(tidyverse)
map(lst1, ~rlm(var1 ~ var2, data=.))
或如乔兰评论
map(lst1, MASS:::rlm.formula, formula = var1 ~ var2)
正如您在此处看到的,?lm
仅提供一种公式方法。相反,?rlm
同时提供(formula
和x, y
)。因此,您必须指定data=
说rlm
才能明确使用公式方法。否则,rlm
要输入x
和y
。
答案 1 :(得分:2)
您的呼叫缺少data
参数。 lapply
将使用列表的每个成员作为FUN
的 first 参数调用FUN
,但是data
是 second rlm
的参数。
解决方案是定义一个匿名函数。
lin_mod <- lapply(lst1, function(DF) MASS::rlm(formula = var1 ~ var2, data = DF))
summary(lin_mod[[1]])
#
#Call: rlm(formula = var1 ~ var2, data = DF)
#Residuals:
# Min 1Q Median 3Q Max
#-18.707 -5.381 1.768 6.067 7.511
#
#Coefficients:
# Value Std. Error t value
#(Intercept) 19.6977 1.0872 18.1179
#var2 0.0092 0.0002 38.2665
#
#Residual standard error: 8.827 on 98 degrees of freedom