В R я пытаюсь динамически изменять переменные внутри моей линейной модели. Я сохранил символьный вектор переменных, которые я хочу использовать в моем lm как модерирующие переменные. Это хорошо работает для переменных типа numeri c, однако это не лучшее решение для переменных факторного типа, поскольку R не знает, что они являются факторами с уровнями.
Моя проблема описана ниже простым Например, скажем, у меня есть некоторые данные ...
yVar <- c(1,2,3,4,5)
xVar <- c(2,1,2,1,2)
numVar1 <- c(1,2,2,3,4)
numVar2 <- c(1,1,2,2,3)
facVar1 <-c(1,2,3,4,5)
facVar2 <-c(1,2,1,2,1)
xVar <- factor(xVar,levels=c(1:2),labels=c("Condition1","Condition2"))
facVar1 <-factor(facVar1,levels=c(1:5),labels=c("red","blue","green","black","yellow"))
facVar2 <-factor(facVar2, levels=c(1:2), labels=c("dog","cat"))
studyData <- data.frame(yVar,xVar,numVar1,numVar2,facVar1,facVar2)
Стандартная модель будет выглядеть так:
standardModel <- lm(data=studyData, yVar ~ xVar)
summary.aov(standardModel)
Я хотел бы динамически включать список модерирующих переменных для использования с эта модель из zList. Таким образом:
zList <- c("numVar1","numVar2","facVar1","facVar2")
И затем вызовите переменные из списка Z
for (z in zList) {
lmfit <- lm(as.formula(paste("yVar ~ xVar*",z)), data=studyData)
print(z)
print(typeof(z))
print(levels(z))
print(summary.aov(lmfit))
}
Это дает результат ниже:
[1] "numVar1"
[1] "character"
NULL
Df Sum Sq Mean Sq F value Pr(>F)
xVar 1 0.000 0.000 0.000 1.000
numVar1 1 9.484 9.484 33.194 0.109
xVar:numVar1 1 0.230 0.230 0.806 0.534
Residuals 1 0.286 0.286
[1] "numVar2"
[1] "character"
NULL
Df Sum Sq Mean Sq F value Pr(>F)
xVar 1 0 0 2.200e-02 0.906
numVar2 1 10 10 1.781e+31 <2e-16 ***
xVar:numVar2 1 0 0 7.560e-01 0.544
Residuals 1 0 0
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
[1] "facVar1"
[1] "character"
NULL
Df Sum Sq Mean Sq
xVar 1 0 0.000
facVar1 3 10 3.333
[1] "facVar2"
[1] "character"
NULL
Df Sum Sq Mean Sq F value Pr(>F)
xVar 1 0 0.000 0 1
Residuals 3 10 3.333
Как можно видеть, для Для переменных типа numeri c это решение, похоже, работает (количество уровней в NULL, как и должно быть, и вывод lm выглядит нормально). Однако для факторных переменных количество уровней также равно "NULL", поэтому R не знает, что эта переменная имеет тип-фактор и имеет уровни.
Что я мог сделать, чтобы запустить свою линейную модель и позволить переменным динамически изменяться на лету, при этом R знает, какого типа переменная? Есть ли лучший способ решить эту проблему?
Заранее благодарим вас за любые ответы.