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