我试着用3个自变量和3个因变量进行多元回归。这个问题是基于水质如何影响三个不同地点之间的浮游生物数量。水质变量为pH、磷酸盐和硝酸盐。因变量/响应变量为3个地点的浮游生物丰度。
下面是我的代码:
model1 <- lm(cbind(Abundance[Guzzler.. == 1], Abundance[Guzzler.. == 2],
Abundance[Guzzler.. == 3]) ~ Phospates + Nitrates + pH,
data=WQAbundancebyGuzzler)这是我收到的错误消息:
Error in model.frame.default(formula = cbind(Abundance[Guzzler.. == 1], :
variable lengths differ (found for 'Phospates') 我认为这与我的数据是如何设置的有关,但我不确定如何更改这一点以使模型运行。我试图看到的是这些水质变量如何影响不同位置的丰度,以及它们之间的变化。因此,尝试多个模型似乎不太符合逻辑,这是我唯一的另一个想法。
以下是dput(head(WQAbundancebyGuzzler))的输出:
structure(list(ï..Date = structure(c(2L, 4L, 1L, 3L, 5L, 2L), .Label = c("11/16/2018",
"11/2/2018", "11/30/2018", "11/9/2018", "12/7/2018"), class = "factor"),
Guzzler.. = c(1L, 1L, 1L, 1L, 1L, 2L), Phospates = c(2L,
2L, 2L, 2L, 2L, 1L), Nitrates = c(0, 0.3, 0, 0.15, 0, 0),
pH = c(7.5, 8, 7.5, 7, 7, 8), Air.Temp..C. = c(20.8, 25.4,
20.9, 16.8, 19.4, 27.4), Relative.Humidity... = c(62L, 31L,
41L, 59L, 59L, 43L), DO2.Concentration..mg.L. = c(3.61, 4.48,
3.57, 5.65, 2.45, 5.86), Water.Temp..C. = c(14.1, 11.5, 11.8,
13.9, 11.1, 17.8), Abundance = c(98L, 43L, 65L, 55L, 54L,
29L)), .Names = c("ï..Date", "Guzzler..", "Phospates", "Nitrates",
"pH", "Air.Temp..C.", "Relative.Humidity...", "DO2.Concentration..mg.L.",
"Water.Temp..C.", "Abundance"), row.names = c(NA, 6L), class = "data.frame")发布于 2019-03-02 16:27:22
我认为这里的问题更多的是理论上的:你说你有三个因变量,你想要进入多元线性回归。然而,至少在经典的线性回归中,只能有一个因变量。可能有办法绕过这一点,但我认为在你的情况下,一个因变量可以很好地工作:它是‘`Abundance’。现在,您已经采样了三个不同的位置:一种解决方案可能是将位置作为分类自变量输入。因此,我将提出以下模型:
# Make sure that Guzzler is not treated as numeric
WQAbundancebyGuzzler$Guzzler <- as.factor(WQAbundancebyGuzzler$Guzzler)
# Model with 4 independent variables
model1 <- lm(Abundance ~ Guzzler + Phospates + Nitrates + pH,
data=WQAbundancebyGuzzler)在这里考虑可能的交互作用也可能是明智的,特别是在Guzzler和其他自变量之间。
发布于 2019-03-02 16:11:42
错误的原因是,您试图仅设置"Abundance"而不是其他变量的子集。因此,它们的长度是不同的。你需要对整个数据进行子集,例如
lm(Abundance ~ Phospates + Nitrates + pH,
data=WQAbundancebyGuzzler[WQAbundancebyGuzzler$Abundance %in% c(1, 2, 3), ])使用给定的head(WQAbundancebyGuzzler)
lm(Abundance ~ Phospates + Nitrates + pH,
data=WQAbundancebyGuzzler[WQAbundancebyGuzzler$Abundance %in% c(29, 43, 65), ])结果:
# Call:
# lm(formula = Abundance ~ Phospates + Nitrates + pH, data = WQAbundancebyGuzzler
# [WQAbundancebyGuzzler$Abundance %in%
# c(29, 43, 65), ])
#
# Coefficients:
# (Intercept) Phospates Nitrates pH
# -7.00 36.00 -73.33 NA https://stackoverflow.com/questions/54956180
复制相似问题