r-获取通过强制引入的NA,但没有NA值,并且完全指定了模型

  • 本文关键字:NA 模型 获取 r linear-regression nan na
  • 更新时间 :
  • 英文 :


我得到了"通过胁迫引入的NA";错误,但我的数据集中没有任何NAs,我的模型应该完全指定,因为它不是很复杂。当我尝试使用DanielPlot()函数创建Daniel Plot时,就会出现这个问题。

我使用的线性模型只是

q4_model_1 = lm(data = HW3Q4, formula = Yield ~ A*B*C*D*E + Block, na.action = na.exclude)

为了预防起见,我采取了额外的步骤,将所有必要的列转换为因子(A、B、C、D、E和Block(:

for (i in 1:5){

HW3Q4[ , i + 1] = as_factor(HW3Q4[ , i + 1])
}
HW3Q4$Block = as_factor(HW3Q4$Block)

现在,我尝试使用FrF2包中的DanielPlot()函数

DanielPlot(q4_model_1, half = FALSE)

但我被";通过胁迫引入的NA";。数据集并没有那么大,我将其包含在下面。我有一种预感,可能是因为一些因素是characters,所以这可能是问题所在,但我持观望态度,因为我能够从我的模型中获得回归系数并计算和anova()。我特别指出了将列视为因素。所以对我来说,这更像是一个R编程问题,而不是对概念的理解。

dput(HW3Q4)
structure(list(Unit = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 
13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 
29, 30, 31, 32), A = c("L", "H", "L", "H", "L", "H", "L", "H", 
"L", "H", "L", "H", "L", "H", "L", "H", "L", "H", "L", "H", "L", 
"H", "L", "H", "L", "H", "L", "H", "L", "H", "L", "H"), B = c(-1, 
-1, 1, 1, -1, -1, 1, 1, -1, -1, 1, 1, -1, -1, 1, 1, -1, -1, 1, 
1, -1, -1, 1, 1, -1, -1, 1, 1, -1, -1, 1, 1), C = c(3, 3, 3, 
3, 7, 7, 7, 7, 3, 3, 3, 3, 7, 7, 7, 7, 3, 3, 3, 3, 7, 7, 7, 7, 
3, 3, 3, 3, 7, 7, 7, 7), D = c("S", "S", "S", "S", "S", "S", 
"S", "S", "L", "L", "L", "L", "L", "L", "L", "L", "S", "S", "S", 
"S", "S", "S", "S", "S", "L", "L", "L", "L", "L", "L", "L", "L"
), E = c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2), Yield = c(11, 15, 
62, 103, 28, 36, 74, 112, 13, 17, 58, 93, 32, 37, 81, 114, 13, 
21, 64, 97, 26, 39, 83, 122, 10, 17, 55, 99, 26, 36, 76, 118), 
Block = structure(c(1L, 2L, 2L, 1L, 2L, 1L, 1L, 2L, 2L, 1L, 
1L, 2L, 1L, 2L, 2L, 1L, 2L, 1L, 1L, 2L, 1L, 2L, 2L, 1L, 1L, 
2L, 2L, 1L, 2L, 1L, 1L, 2L), .Label = c("0", "1"), class = "factor")), row.names = c(NA, 
-32L), spec = structure(list(cols = list(Unit = structure(list(), class = c("collector_double", 
"collector")), A = structure(list(), class = c("collector_character", 
"collector")), B = structure(list(), class = c("collector_double", 
"collector")), C = structure(list(), class = c("collector_double", 
"collector")), D = structure(list(), class = c("collector_character", 
"collector")), E = structure(list(), class = c("collector_double", 
"collector")), Yield = structure(list(), class = c("collector_double", 
"collector")), ...8 = structure(list(), class = c("collector_logical", 
"collector"))), default = structure(list(), class = c("collector_guess", 
"collector")), delim = ","), class = "col_spec"), problems = <pointer: 0x0000026af40b0710>, class = c("spec_tbl_df", 
"tbl_df", "tbl", "data.frame"))

我有一个临时解决方案。看起来;可爱的";对于循环,我试图运行以自动将列转换为因子,但并没有做到这一点。所以我不得不手动将我的列转换为因子。我可以在这里逃脱惩罚,因为这里有少量的列。但我想知道,如果我有一个更大的数据集,而我不能手动做到这一点,我该怎么办?

最新更新