Почему eval (parse (text = string)) дает более короткий вывод для объекта класса aov? - PullRequest
1 голос
/ 22 марта 2020

Почему это ...

B.aov2<- eval(parse(text=StringforEvaluation))
summary(B.aov2)

дает менее подробный отчет, чем этот ...?

res.aov2 <- aov(DV ~ IV1*IV2+Error(Participant/(IV1*IV2), data = AnovaAnalysisData))
summary(res.aov2)

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

library(tidyverse)

DV <- c(1,1, 5,6, 1, 2, 7, 7, 1, 4, 9, 9)
IV1 <- c("A","B", "A", "B","A","B", "A", "B","A","B", "A", "B" )
IV2 <- c("C","C","D","D", "C","C", "D","D", "C","C", "D","D")
Participant <- c("A", "A", "A", "A", "B","B","B","B","C","C","C","C")
IV3 <- "no_data" #remove the word "no_data" and add c("A","B", "C", etc.. )
IV4 <- "no_data" #remove the word "no_data" and add c("A","B", "C", etc.. )

##### You have to tell the computer if the variable is within! 
IV1_iswithin <-"Y"
IV2_iswithin <-"Y"
IV3_iswithin <-"N"
IV4_iswithin <-"N"

####### Your JOB is DONE 

data <- data.frame(DV,Participant,IV1,IV2)

#Grouping the dataframe 

data %>%group_by(IV2, IV1)%>% #subsetting the data set to calculate 4 different stats
  mutate(MAD = median(abs(DV-median(DV))*2.5*1.4826))%>% #calculates 4 differnet mad numbers
  mutate(MADLL = median(DV)-MAD)%>% #cacluates UL of MAD, pipe output to next command
  mutate(MADUL = median(DV)+MAD)%>% #calculates the LL of MAD
  mutate(OutlierPresent = ifelse(DV<MADLL | DV>MADUL, NA, DV))%>% #Creates NA values if it is an outlier 
  ungroup()%>% #converts back to big data set 
  mutate(OutlierPresent = ifelse(DV<MADLL | DV>MADUL, NA, DV))%>% #Creates NA
  mutate(whichgroup <- paste(IV1,IV2))%>%
  mutate(observation = 1:n()) %>%
  {. ->> b }

b %>%
  select(DV,OutlierPresent) %>%
  {. ->> outlierfeedback }
formattable(outlierfeedback)

b %>%
  select(OutlierPresent,IV1,IV2,Participant) %>%
  pivot_wider(names_from = c(IV1,IV2), values_from = OutlierPresent, names_sep = "_", id_cols = Participant)%>%
  drop_na()%>%
  pivot_longer(-Participant, names_to = c("IV1","IV2"), names_sep = "_", values_to = "DV")%>%
  {. ->> AnovaAnalysisData }

### Calculating the ANOVA for our outlier free data AnovaAnalysisData

#SettingUpTheListofFixedFactors
FactorModel <- list()
ifelse(length(IV1)> 1, FactorModel<- c(FactorModel, "IV1"), FactorModel<-FactorModel)
ifelse(length(IV2)> 1, FactorModel<- c(FactorModel, "IV2"), FactorModel<-FactorModel)
ifelse(length(IV3)> 1, FactorModel<- c(FactorModel, "IV3"), FactorModel<-FactorModel)
ifelse(length(IV4)> 1, FactorModel<- c(FactorModel, "IV4"), FactorModel<-FactorModel)

#SettingUPTheListofErrorFactors 
ErrorModel <-list()

ErrorModel <- list()
ifelse(IV1_iswithin== "Y", ErrorModel<- c(ErrorModel, "IV1"), ErrorModel<-ErrorModel)
ifelse(IV2_iswithin== "Y", ErrorModel<- c(ErrorModel, "IV2"), ErrorModel<-ErrorModel)
ifelse(IV3_iswithin== "Y",ErrorModel<- c(ErrorModel, "IV3"), ErrorModel<-ErrorModel)
ifelse(IV4_iswithin== "Y", ErrorModel<- c(ErrorModel, "IV4"), ErrorModel<-ErrorModel)


StrStart = "aov(DV ~"
StrFactor<-paste(ErrorModel, collapse='*' )
StrErrorStart<-("+Error(Participant/(")
StrError<-paste(ErrorModel, collapse='*' )
StrErrorEnd<- ("),data=AnovaAnalysisData))")
StringforEvaluation<- paste(StrStart, StrFactor,StrErrorStart,StrError,StrErrorEnd)

B.aov2<- eval(parse(text=StringforEvaluation))

summary(B.aov2)

res.aov2 <- aov(DV ~ IV1*IV2+Error(Participant/(IV1*IV2), data = AnovaAnalysisData))
summary(res.aov2)
...