Множественная регрессия - ошибка в переменной переменной model.frame.default - PullRequest
0 голосов
/ 02 марта 2019

Я пытаюсь запустить множественную регрессию с 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")

Ответы [ 2 ]

0 голосов
/ 02 марта 2019

Я думаю, что проблема здесь более теоретическая: вы говорите, что у вас есть три зависимые переменные, которые вы хотите ввести в множественную линейную регрессию.Однако, по крайней мере в классической линейной регрессии, может быть только одна зависимая переменная.Могут быть способы обойти это, но я думаю, что в вашем случае одна зависимая переменная работает просто отлично: это `Обилие '.Теперь вы выбрали три разных местоположения. Одним из решений этой проблемы может быть просто ввести местоположение в качестве категориальной независимой переменной.Поэтому я бы предложил следующую модель:

# 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 и другими независимыми переменными.

0 голосов
/ 02 марта 2019

Причиной вашей ошибки является то, что вы пытаетесь установить только "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  
...