Box-Cox Tranformation Error: object 'x' not found
Box-Cox Tranformation Error: object 'x' not found
希望对于那些比我更有经验的人来说是一个相对容易的问题!
正在尝试使用以下代码执行 Box-Cox 变换:
fit <- lm(ABOVEGROUND_BIO ~ TREATMENT * P_LEVEL, data = MYCORRHIZAL_VARIANCE)
bc <- boxcox(fit)
lambda<-with(bc, x[which.max(y)])
MYCORRHIZAL_VARIANCE$bc <- ((x^lambda)-1/lambda)
boxplot(bc ~ TREATMENT * P_LEVEL, data = MYCORRHIZAL_VARIANCE)
但是当我 运行 它时,我收到以下错误消息:
Error: object 'x' not found. (on line 4)
对于上下文,这是我的数据集的 str:
Classes ‘spec_tbl_df’, ‘tbl_df’, ‘tbl’ and 'data.frame': 24 obs. of 14 variables:
$ TREATMENT : Factor w/ 2 levels "Mycorrhizal",..: 1 1 1 1 1 1 1 1 1 1 ...
$ P_LEVEL : Factor w/ 2 levels "Low","High": 1 1 1 1 1 1 2 2 2 2 ...
$ REP : int 1 2 3 4 5 6 1 2 3 4 ...
$ ABOVEGROUND_BIO : num 7.5 6.8 5.3 6 6.7 7 12 12.7 12 10.2 ...
$ BELOWGROUND_BIO : num 3 2.4 2 4 2.7 3.6 7.9 8.8 9.5 9.2 ...
$ ROOT_SHOOT : num 0.4 0.35 0.38 0.67 0.4 0.51 0.66 0.69 0.79 0.9 ...
$ ROOT_SHOOT.log : num -0.916 -1.05 -0.968 -0.4 -0.916 ...
$ ABOVEGROUND_BIO.log : num 2.01 1.92 1.67 1.79 1.9 ...
$ ABOVEGROUND_BIO.sqrt : num 2.74 2.61 2.3 2.45 2.59 ...
$ ABOVEGROUND_BIO.cubert: num 1.96 1.89 1.74 1.82 1.89 ...
$ BELOWGROUND_BIO.log : num 1.099 0.875 0.693 1.386 0.993 ...
$ BELOWGROUND_BIO.sqrt : num 1.73 1.55 1.41 2 1.64 ...
$ BELOWGROUND_BIO.cubert: num 1.44 1.34 1.26 1.59 1.39 ...
$ TOTAL_BIO : num 10.5 9.2 7.3 10 9.4 10.6 19.9 21.5 21.5 19.4 ...
- attr(*, "spec")=
.. cols(
.. TREATMENT = col_factor(levels = c("Mycorrhizal", "Non-mycorrhizal"), ordered = FALSE, include_na = FALSE),
.. P_LEVEL = col_factor(levels = c("Low", "High"), ordered = FALSE, include_na = FALSE),
.. REP = col_integer(),
.. ABOVEGROUND_BIO = col_number(),
.. BELOWGROUND_BIO = col_number(),
.. ROOT_SHOOT = col_number()
.. )
我知道 MYCORRHIZAL_VARIANCE 数据集中没有名为 bc 的变量,但我只是按照执行 Box-Cox 时给我的基本说明进行操作,我想我对什么 'x' 实际上应该表示为,因为我认为 'x' 是在第 3 行中定义的?有关如何修复此错误的任何建议?
提前致谢!
I thought 'x' was being defined in line 3?
第 3 行是 lambda<-with(bc, x[which.max(y)])
。它没有定义 x
,它定义了 lambda
。它使用 x
,它在 bc
环境中寻找。如果您使用 MASS
包中的 boxcox()
,bc
确实应该包含 x
和 y
组件,因此 bc$x
不应该给出你 same 错误信息。我希望关于替换长度的错误。因为...
bc$x
是 boxcox
尝试的潜在 lambda 值 - 您使用的是默认值 seq(-2, 2, 1/10)
,如果您的数据是 41 的倍数,这不太可能是巧合将 41 个值分配给新列时,行需要不给出错误。
第 3 行挑选出使可能性最大化的 lambda 值,因此您不再需要 bc
中的其余值。我希望您使用 lambda
值 将您的响应变量 转换为 that's what the Box Cox transformation is for。 ((x^lambda)-1/lambda)
没有任何统计意义或程序意义。改用这个:
MYCORRHIZAL_VARIANCE$bc <- (MYCORRHIZAL_VARIANCE$ABOVEGROUND_BIO ^ lambda - 1) / lambda
(请注意,我还更正了括号。您需要 (y ^ lambda - 1) / lambda
,而不是 (y ^ lambda) - 1 / lambda
。)
希望对于那些比我更有经验的人来说是一个相对容易的问题!
正在尝试使用以下代码执行 Box-Cox 变换:
fit <- lm(ABOVEGROUND_BIO ~ TREATMENT * P_LEVEL, data = MYCORRHIZAL_VARIANCE)
bc <- boxcox(fit)
lambda<-with(bc, x[which.max(y)])
MYCORRHIZAL_VARIANCE$bc <- ((x^lambda)-1/lambda)
boxplot(bc ~ TREATMENT * P_LEVEL, data = MYCORRHIZAL_VARIANCE)
但是当我 运行 它时,我收到以下错误消息:
Error: object 'x' not found. (on line 4)
对于上下文,这是我的数据集的 str:
Classes ‘spec_tbl_df’, ‘tbl_df’, ‘tbl’ and 'data.frame': 24 obs. of 14 variables:
$ TREATMENT : Factor w/ 2 levels "Mycorrhizal",..: 1 1 1 1 1 1 1 1 1 1 ...
$ P_LEVEL : Factor w/ 2 levels "Low","High": 1 1 1 1 1 1 2 2 2 2 ...
$ REP : int 1 2 3 4 5 6 1 2 3 4 ...
$ ABOVEGROUND_BIO : num 7.5 6.8 5.3 6 6.7 7 12 12.7 12 10.2 ...
$ BELOWGROUND_BIO : num 3 2.4 2 4 2.7 3.6 7.9 8.8 9.5 9.2 ...
$ ROOT_SHOOT : num 0.4 0.35 0.38 0.67 0.4 0.51 0.66 0.69 0.79 0.9 ...
$ ROOT_SHOOT.log : num -0.916 -1.05 -0.968 -0.4 -0.916 ...
$ ABOVEGROUND_BIO.log : num 2.01 1.92 1.67 1.79 1.9 ...
$ ABOVEGROUND_BIO.sqrt : num 2.74 2.61 2.3 2.45 2.59 ...
$ ABOVEGROUND_BIO.cubert: num 1.96 1.89 1.74 1.82 1.89 ...
$ BELOWGROUND_BIO.log : num 1.099 0.875 0.693 1.386 0.993 ...
$ BELOWGROUND_BIO.sqrt : num 1.73 1.55 1.41 2 1.64 ...
$ BELOWGROUND_BIO.cubert: num 1.44 1.34 1.26 1.59 1.39 ...
$ TOTAL_BIO : num 10.5 9.2 7.3 10 9.4 10.6 19.9 21.5 21.5 19.4 ...
- attr(*, "spec")=
.. cols(
.. TREATMENT = col_factor(levels = c("Mycorrhizal", "Non-mycorrhizal"), ordered = FALSE, include_na = FALSE),
.. P_LEVEL = col_factor(levels = c("Low", "High"), ordered = FALSE, include_na = FALSE),
.. REP = col_integer(),
.. ABOVEGROUND_BIO = col_number(),
.. BELOWGROUND_BIO = col_number(),
.. ROOT_SHOOT = col_number()
.. )
我知道 MYCORRHIZAL_VARIANCE 数据集中没有名为 bc 的变量,但我只是按照执行 Box-Cox 时给我的基本说明进行操作,我想我对什么 'x' 实际上应该表示为,因为我认为 'x' 是在第 3 行中定义的?有关如何修复此错误的任何建议?
提前致谢!
I thought 'x' was being defined in line 3?
第 3 行是 lambda<-with(bc, x[which.max(y)])
。它没有定义 x
,它定义了 lambda
。它使用 x
,它在 bc
环境中寻找。如果您使用 MASS
包中的 boxcox()
,bc
确实应该包含 x
和 y
组件,因此 bc$x
不应该给出你 same 错误信息。我希望关于替换长度的错误。因为...
bc$x
是 boxcox
尝试的潜在 lambda 值 - 您使用的是默认值 seq(-2, 2, 1/10)
,如果您的数据是 41 的倍数,这不太可能是巧合将 41 个值分配给新列时,行需要不给出错误。
第 3 行挑选出使可能性最大化的 lambda 值,因此您不再需要 bc
中的其余值。我希望您使用 lambda
值 将您的响应变量 转换为 that's what the Box Cox transformation is for。 ((x^lambda)-1/lambda)
没有任何统计意义或程序意义。改用这个:
MYCORRHIZAL_VARIANCE$bc <- (MYCORRHIZAL_VARIANCE$ABOVEGROUND_BIO ^ lambda - 1) / lambda
(请注意,我还更正了括号。您需要 (y ^ lambda - 1) / lambda
,而不是 (y ^ lambda) - 1 / lambda
。)