Katie
Katie

Reputation: 1

No P or F values in Two Way ANOVA on R

I'm doing an assignment for university and have copied and pasted the R code so I know it's right but I'm still not getting any P or F values from my data:

Food    Temperature Area
50         11     820.2175
100        11     936.5437
50         14    1506.568
100        14    1288.053
50         17   1692.882
100        17   1792.54

This is the code I've used so far:

aovdata<-read.table("Condition by area.csv",sep=",",header=T)
attach(aovdata)
Food <- as.factor(Food) ; Temperature <- as.factor(Temperature)
summary(aov(Area ~ Temperature*Food))

but then this is the output:

                  Df Sum Sq Mean Sq
Temperature       2 757105  378552
Food              1      1       1
Temperature:Food   2  35605   17803

                                                                                   

Any help, especially the code I need to fix it, would be great. I think there could be a problem with the data but I don't know what.

Upvotes: 0

Views: 146

Answers (2)

Ben Bolker
Ben Bolker

Reputation: 226192

The actual problem with your example is not that you're using factors as predictor variables, but rather that you have fitted a 'saturated' linear model (as many parameters as observations), so there is no variation left to compute a residual SSQ, so the ANOVA doesn't include F/P values etc.

It's fine for temperature and food to be categorical (factor) predictors, that's how they would be treated in a classic two-way ANOVA design. It's just that in order to analyze this design with the interaction you need more replication.

Upvotes: 0

Magnus Nordmo
Magnus Nordmo

Reputation: 951

I would do this. Be aware of difference between factor and continues predictors.

library(tidyverse)

df <- sapply(strsplit(c("Food    Temperature Area", "50         11     820.2175", "100        11     936.5437", 
                  "50         14    1506.568", "100        14    1288.053", "50         17   1692.882", 
                  "100        17   1792.54")," +"), paste0, collapse=",") %>% 
  read_csv()

model <- lm(Area ~ Temperature * as.factor(Food),df)

summary(model)
#> 
#> Call:
#> lm(formula = Area ~ Temperature * as.factor(Food), data = df)
#> 
#> Residuals:
#>      1      2      3      4      5      6 
#> -83.34  25.50 166.68 -50.99 -83.34  25.50 
#> 
#> Coefficients:
#>                                Estimate Std. Error t value Pr(>|t|)  
#> (Intercept)                    -696.328    505.683  -1.377    0.302  
#> Temperature                     145.444     35.580   4.088    0.055 .
#> as.factor(Food)100               38.049    715.144   0.053    0.962  
#> Temperature:as.factor(Food)100   -2.778     50.317  -0.055    0.961  
#> ---
#> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#> 
#> Residual standard error: 151 on 2 degrees of freedom
#> Multiple R-squared:  0.9425, Adjusted R-squared:  0.8563 
#> F-statistic: 10.93 on 3 and 2 DF,  p-value: 0.08498

ggeffects::ggpredict(model,terms = c('Temperature','Food')) %>% plot()

Created on 2020-12-08 by the reprex package (v0.3.0)

Upvotes: 1

Related Questions