Length of UFO Encounters: Multiple Regressions

Project2
Peri Teresa Lardo
UFO sightings
Author

Peri (Teresa) Lardo

Published

August 17, 2023

Load libraries and dataset, clean data

Code
#Load libraries
library(tidyverse)
library(readr)
library(dplyr)
library(lubridate)

knitr::opts_chunk$set(echo = TRUE)

# Create shape categories for personal sanity

round <- c("disk", "round", "sphere", "circle", "dome")
triangular <- c("triangle", "cone", "pyramid", "delta", "chevron")
oval <- c("oval", "teardrop", "egg", "crescent")
parallelogram <- c("cross", "diamond", "hexagon", "rectangle")
cylinder <- c("cylinder", "cigar")

# Import data & clean necessary elements
ufo_sighting_data <- read_csv("data/ufo_sighting_data.csv") %>% drop_na(UFO_shape, length_of_encounter_seconds, country, Date_time, latitude) %>%
  filter(length_of_encounter_seconds < 86400) %>%
  filter(country %in% c("us", "ca")) %>%
  filter(!str_detect(description, 'HOAX')) %>%
  filter(!UFO_shape %in% c("light", "fireball", "flare", "flash", "other", "unknown", "formation", "changing", "changed")) %>%
  mutate(Shape_Category = case_when(
         UFO_shape %in% round ~ "Round",
         UFO_shape %in% triangular ~ "Triangular",
         UFO_shape %in% oval ~ "Oval",
         UFO_shape %in% parallelogram ~ "Parallelogram",
         UFO_shape %in% cylinder ~ "Cylinder"))

# Make sure the Date_time column is actually in datetime format
ufo_sighting_data$Date_time <- parse_date_time(ufo_sighting_data$Date_time, "mdy_HM")

# Create separate variables for the Month & time of day (by hour) of the encounters
ufo_sighting_data$Month = month(ufo_sighting_data$Date_time)
ufo_sighting_data$Hour = 1 + hour(ufo_sighting_data$Date_time)

# Create dummy variables for categorical Shape (x) variable
library(fastDummies)
ufo_sighting_data <- dummy_cols(ufo_sighting_data, select_columns = 'Shape_Category')

summary(ufo_sighting_data)
   Date_time                          city           state/province    
 Min.   :1910-01-02 00:00:00.00   Length:32352       Length:32352      
 1st Qu.:2001-02-07 11:07:30.00   Class :character   Class :character  
 Median :2006-09-09 20:45:00.00   Mode  :character   Mode  :character  
 Mean   :2003-07-04 07:34:43.36                                        
 3rd Qu.:2011-05-28 22:30:00.00                                        
 Max.   :2014-05-08 00:00:00.00                                        
   country           UFO_shape         length_of_encounter_seconds
 Length:32352       Length:32352       Min.   :    0.01           
 Class :character   Class :character   1st Qu.:   30.00           
 Mode  :character   Mode  :character   Median :  180.00           
                                       Mean   :  821.47           
                                       3rd Qu.:  600.00           
                                       Max.   :73800.00           
 described_duration_of_encounter description        date_documented   
 Length:32352                    Length:32352       Length:32352      
 Class :character                Class :character   Class :character  
 Mode  :character                Mode  :character   Mode  :character  
                                                                      
                                                                      
                                                                      
    latitude       longitude       Shape_Category         Month       
 Min.   :17.97   Min.   :-170.48   Length:32352       Min.   : 1.000  
 1st Qu.:34.23   1st Qu.:-112.45   Class :character   1st Qu.: 4.000  
 Median :39.18   Median : -89.01   Mode  :character   Median : 7.000  
 Mean   :38.65   Mean   : -94.84                      Mean   : 6.835  
 3rd Qu.:42.25   3rd Qu.: -80.22                      3rd Qu.: 9.000  
 Max.   :72.70   Max.   : -52.67                      Max.   :12.000  
      Hour       Shape_Category_Cylinder Shape_Category_Oval
 Min.   : 1.00   Min.   :0.00000         Min.   :0.0000     
 1st Qu.:12.00   1st Qu.:0.00000         1st Qu.:0.0000     
 Median :20.00   Median :0.00000         Median :0.0000     
 Mean   :16.42   Mean   :0.08562         Mean   :0.1339     
 3rd Qu.:22.00   3rd Qu.:0.00000         3rd Qu.:0.0000     
 Max.   :24.00   Max.   :1.00000         Max.   :1.0000     
 Shape_Category_Parallelogram Shape_Category_Round Shape_Category_Triangular
 Min.   :0.00000              Min.   :0.0000       Min.   :0.000            
 1st Qu.:0.00000              1st Qu.:0.0000       1st Qu.:0.000            
 Median :0.00000              Median :0.0000       Median :0.000            
 Mean   :0.06979              Mean   :0.4677       Mean   :0.243            
 3rd Qu.:0.00000              3rd Qu.:1.0000       3rd Qu.:0.000            
 Max.   :1.00000              Max.   :1.0000       Max.   :1.000            

Model Building

In Project I, we started off interested in the independent variable of UFO Shape (transformed into a series of dummy variables) and the dependent variable of Length of Encounter (in Seconds). Another possible (available) variable that may contribute to the length of a UFO sighting is the hour of day (measured 1-24 from 1st hour of the day, midnight to one, to the 24th hour, 11PM to midnight).

The time of day may influence the length of a sighting (and contribute to the identification of UFO shape) in part because of how much or how little light is available outdoors, where UFOs are traditionally seen (but if you ever spot one in the middle of your kitchen or a Starbucks, definitely let me know). The month of the year would also play into the expected level of sunlight at any given time because the amount of sunlight at, for instance, 7 pm in July is much different than at 7 pm in February.

Latitude is another element that can influence the amount of light at a given time of day & year. There is also a preexisting cultural association between UFOs/paranormal activity and a certain latitude - the 37th parallel north.

Due to the variations in seasons in different hemispheres represented in our dataset, I have limited the data to reported UFO sightings in Canada and the United States. Just over 96% of the sightings in the dataset are from these two countries.

Variables

Code
# Customize variables
ufo_sighting_data$seconds <- ufo_sighting_data$length_of_encounter_seconds
ufo_sighting_data$Round <- ufo_sighting_data$Shape_Category_Round
ufo_sighting_data$Triangular <- ufo_sighting_data$Shape_Category_Triangular
ufo_sighting_data$Cylindrical <- ufo_sighting_data$Shape_Category_Cylinder
ufo_sighting_data$Oval <- ufo_sighting_data$Shape_Category_Oval


# Designate regressors, report mean & standard deviations thereof
vars <- c("seconds", "Round", "Triangular", "Cylindrical", "Oval", "latitude", "Hour", "Month")
cbind(Mean = sapply(ufo_sighting_data[, vars], mean),
      StandardDev = sapply(ufo_sighting_data[, vars], sd))
                    Mean  StandardDev
seconds     821.46936078 2699.9808513
Round         0.46766815    0.4989613
Triangular    0.24298343    0.4288918
Cylindrical   0.08562067    0.2798074
Oval          0.13393299    0.3405856
latitude     38.65174613    5.6948996
Hour         16.41654303    7.5296713
Month         6.83490974    3.1924518

Linear Model

Code
Linear_model_UFO <- lm(seconds ~ Hour, data = ufo_sighting_data)
Linear_model_UFO

Call:
lm(formula = seconds ~ Hour, data = ufo_sighting_data)

Coefficients:
(Intercept)         Hour  
    1010.08       -11.49  

Log-Linear Model

Code
Linearlog_model_UFO <- lm(seconds ~ log(Hour), data = ufo_sighting_data)
Linearlog_model_UFO

Call:
lm(formula = seconds ~ log(Hour), data = ufo_sighting_data)

Coefficients:
(Intercept)    log(Hour)  
       1113         -114  

Quadratic Model

Code
quad_model_UFO <- lm(seconds ~ I(Hour) + I((Hour)^2), data = ufo_sighting_data)
quad_model_UFO

Call:
lm(formula = seconds ~ I(Hour) + I((Hour)^2), data = ufo_sighting_data)

Coefficients:
(Intercept)      I(Hour)  I((Hour)^2)  
   1209.751      -63.737        2.017  

Cubic Model

Code
cubic_model_UFO <- lm(seconds ~ I(Hour) + I((Hour)^2) + I((Hour)^3) + Month, data = ufo_sighting_data)
cubic_model_UFO

Call:
lm(formula = seconds ~ I(Hour) + I((Hour)^2) + I((Hour)^3) + 
    Month, data = ufo_sighting_data)

Coefficients:
(Intercept)      I(Hour)  I((Hour)^2)  I((Hour)^3)        Month  
  1.210e+03   -6.584e+01    2.217e+00   -5.094e-03    6.439e-01  

Plot Observations & Models

Code
plot(ufo_sighting_data$Hour, ufo_sighting_data$seconds,
     pch = 20,
     col = "orange",
     ylim = c(300, 1300), 
     xlab = "Hour of Day",
     ylab = "Length of Sighting in Seconds",
     main = "Models \n Y-limited for zoomed-in view")

abline(Linear_model_UFO, lwd=2)

order_id <- order(ufo_sighting_data$Hour)

lines(ufo_sighting_data$Hour[order_id],
     fitted(Linearlog_model_UFO)[order_id],
     col = "blue",
     lwd = 2)

lines(x = ufo_sighting_data$Hour[order_id],
      y = fitted(cubic_model_UFO)[order_id],
      col = "red",
      lwd = 4)

lines(x = ufo_sighting_data$Hour[order_id],
     y = fitted(quad_model_UFO)[order_id],
     col = "green",
     lwd = 2)
 
legend("bottomright",
       legend = c("Linear", "Linear-Log", "Cubic", "Quadratic"),
       lty = 1,
       col = c("black", "blue", "red", "green"))

Linear or Non-Linear?

I think a non-linear equation may better explain the possible relationship between the hour of the day and the duration of UFO sightings. When I inspect the zoomed-out view of the plot above and concentrate on the lower Y-values where most data points collect, I can see that the values do not a) uniformly increase throughout the day, b) uniformly decrease throughout the day, or c) remain constant throughout the day. There appears to be undulation in the shape of the data points.

The plot above shows a dip in encounter/sighting duration during the morning hours when many people are waking up and starting their work day, but sighting duration is higher again during the late afternoon/evening hours. The sighting duration seems to level off during the final few hours of the day (9PM to midnight), so at first I thought a quadratic equation may be best-suited. But my love for bar charts cannot be quelled, so I also made a bar chart to better visualize the mean sighting duration per hour. The bar chart showed a dip in the duration mean from 10PM to midnight that persuades me toward a cubic model. In the zoomed-in model plot above, the cubic and quadratic curves follow a very similar path. When developing my model specifications, I will make both quadratic and cubic models to determine which will be more appropriate.

Code
library(ggplot2)

ggplot(ufo_sighting_data %>% 
  group_by(Hour), aes(x = Hour, y = mean(seconds), fill = Hour)) + 
  geom_bar(stat = "identity") + 
  ggtitle("The Bar Chart that Persuaded Me to Consider Cubic Models") + 
  xlab("Hour of Day") + 
  ylab("Duration Mean (in seconds)") +
  theme(legend.position = "none") + 
  scale_fill_gradient2(low = "darkorchid4", high = "purple4", mid = "gold2", midpoint = 12)

Model Specifications

Code
# Create multiple specifications
UFO_shape_mod1 <- lm(seconds ~ Hour, data = ufo_sighting_data)

UFO_shape_mod2 <- lm(seconds ~ Hour + I(Hour^2), data = ufo_sighting_data)

UFO_shape_mod3 <- lm(seconds ~ Hour + I(Hour^2) + I(Hour^3), data = ufo_sighting_data)

UFO_shape_mod4 <- lm(seconds ~ Hour + I(Hour^2) + I(Hour^3) + Triangular + Round + Cylindrical + Oval, data = ufo_sighting_data)

UFO_shape_mod5 <- lm(seconds ~ Hour + I(Hour^2) + Triangular + Round + Cylindrical + Oval, data = ufo_sighting_data)

UFO_shape_mod6 <- lm(seconds ~ Hour + I(Hour^2) + Triangular + Round + Cylindrical + Oval + latitude, data = ufo_sighting_data)

UFO_shape_mod7 <- lm(seconds ~ Hour + I(Hour^2) + Triangular + Round + Cylindrical + Oval + latitude + Month, data = ufo_sighting_data)

Robust Standard Errors

Code
# Get Standard Errors for each model
library(sandwich)
Warning: package 'sandwich' was built under R version 4.2.3
Code
rob_se <- list(sqrt(diag(vcovHC(UFO_shape_mod1, type = "HC1"))),
sqrt(diag(vcovHC(UFO_shape_mod2, type = "HC1"))),
sqrt(diag(vcovHC(UFO_shape_mod3, type = "HC1"))),
sqrt(diag(vcovHC(UFO_shape_mod4, type = "HC1"))),
sqrt(diag(vcovHC(UFO_shape_mod5, type = "HC1"))),
sqrt(diag(vcovHC(UFO_shape_mod6, type = "HC1"))),
sqrt(diag(vcovHC(UFO_shape_mod7, type = "HC1"))))

rob_se
[[1]]
(Intercept)        Hour 
  41.009453    2.206693 

[[2]]
(Intercept)        Hour   I(Hour^2) 
 58.5748592   9.8733651   0.3603472 

[[3]]
(Intercept)        Hour   I(Hour^2)   I(Hour^3) 
78.20407203 27.81302690  2.49462059  0.06308149 

[[4]]
(Intercept)        Hour   I(Hour^2)   I(Hour^3)  Triangular       Round 
92.23228915 27.71464434  2.49367437  0.06325126 59.81228591 55.20980249 
Cylindrical        Oval 
66.58233104 64.37162303 

[[5]]
(Intercept)        Hour   I(Hour^2)  Triangular       Round Cylindrical 
 74.9282701   9.9506300   0.3661259  59.8083911  55.1664977  66.5348160 
       Oval 
 64.3743712 

[[6]]
(Intercept)        Hour   I(Hour^2)  Triangular       Round Cylindrical 
125.3779287   9.9103213   0.3646796  59.8119217  55.1978495  66.5465776 
       Oval    latitude 
 64.3793529   2.8077180 

[[7]]
(Intercept)        Hour   I(Hour^2)  Triangular       Round Cylindrical 
129.0824232   9.9088788   0.3646046  59.8118663  55.1984879  66.5479794 
       Oval    latitude       Month 
 64.3451071   2.8077880   4.5789916 

Multiple Regression Specification Models

Code
models <- list(UFO_shape_mod1, UFO_shape_mod2, UFO_shape_mod3,
UFO_shape_mod4, UFO_shape_mod5, UFO_shape_mod6, UFO_shape_mod7)

library(stargazer)

Please cite as: 
 Hlavac, Marek (2022). stargazer: Well-Formatted Regression and Summary Statistics Tables.
 R package version 5.2.3. https://CRAN.R-project.org/package=stargazer 
Code
stargazer(models,
title = "Regressions on UFO Sighting Duration",
type = "html",
digits = 3,
header = FALSE,
se = rob_se,
object.names = TRUE,
model.numbers = FALSE,
column.labels = c("(I)", "(II)", "(III)", "(IV)", "(V)", "(VI)", "(VII)"))
Regressions on UFO Sighting Duration
Dependent variable:
seconds
(I) (II) (III) (IV) (V) (VI) (VII)
models NA NA NA NA NA NA
Hour -11.489*** -63.737*** -65.808** -64.960** -64.791*** -65.266*** -65.305***
(2.207) (9.873) (27.813) (27.715) (9.951) (9.910) (9.909)
I(Hour2) 2.017*** 2.216 2.077 2.061*** 2.080*** 2.081***
(0.360) (2.495) (2.494) (0.366) (0.365) (0.365)
I(Hour3) -0.005 -0.0004
(0.063) (0.063)
Triangular -91.436 -91.437 -91.532 -91.563
(59.812) (59.808) (59.812) (59.812)
Round 58.712 58.716 58.921 58.927
(55.210) (55.166) (55.198) (55.198)
Cylindrical -110.424* -110.420* -110.470* -110.466*
(66.582) (66.535) (66.547) (66.548)
Oval -33.922 -33.923 -33.994 -33.904
(64.372) (64.374) (64.379) (64.345)
latitude -2.944 -2.957
(2.808) (2.808)
Month 0.835
(4.579)
Constant 1,010.075*** 1,209.751*** 1,213.769*** 1,222.002*** 1,221.673*** 1,336.895*** 1,331.886***
(41.009) (58.575) (78.204) (92.232) (74.928) (125.378) (129.082)
Observations 32,352 32,352 32,352 32,352 32,352 32,352 32,352
R2 0.001 0.002 0.002 0.003 0.003 0.003 0.003
Adjusted R2 0.001 0.002 0.002 0.002 0.002 0.002 0.002
Residual Std. Error 2,698.636 (df = 32350) 2,697.357 (df = 32349) 2,697.399 (df = 32348) 2,696.683 (df = 32344) 2,696.641 (df = 32345) 2,696.631 (df = 32344) 2,696.671 (df = 32343)
F Statistic 33.243*** (df = 1; 32350) 32.479*** (df = 2; 32349) 21.655*** (df = 3; 32348) 12.311*** (df = 7; 32344) 14.363*** (df = 6; 32345) 12.489*** (df = 7; 32344) 10.932*** (df = 8; 32343)
Note: p<0.1; p<0.05; p<0.01

Hypothesis Testing

Code
library(car)
Warning: package 'car' was built under R version 4.2.3
Loading required package: carData
Warning: package 'carData' was built under R version 4.2.3

Attaching package: 'car'
The following object is masked from 'package:dplyr':

    recode
The following object is masked from 'package:purrr':

    some
Code
linearHypothesis(UFO_shape_mod1,
c("Hour=0"),
vcov. = vcovHC(UFO_shape_mod1, type = "HC1"))
Linear hypothesis test

Hypothesis:
Hour = 0

Model 1: restricted model
Model 2: seconds ~ Hour

Note: Coefficient covariance matrix supplied.

  Res.Df Df      F    Pr(>F)    
1  32351                        
2  32350  1 27.106 1.938e-07 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Code
linearHypothesis(UFO_shape_mod2,
c("Hour=0", "I(Hour^2)=0"),
vcov. = vcovHC(UFO_shape_mod2, type = "HC1"))
Linear hypothesis test

Hypothesis:
Hour = 0
I(Hour^2) = 0

Model 1: restricted model
Model 2: seconds ~ Hour + I(Hour^2)

Note: Coefficient covariance matrix supplied.

  Res.Df Df      F    Pr(>F)    
1  32351                        
2  32349  2 25.788 6.448e-12 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Code
linearHypothesis(UFO_shape_mod3,
c("Hour=0", "I(Hour^2)=0", "I(Hour^3)=0"),
vcov. = vcovHC(UFO_shape_mod3, type = "HC1"))
Linear hypothesis test

Hypothesis:
Hour = 0
I(Hour^2) = 0
I(Hour^3) = 0

Model 1: restricted model
Model 2: seconds ~ Hour + I(Hour^2) + I(Hour^3)

Note: Coefficient covariance matrix supplied.

  Res.Df Df      F    Pr(>F)    
1  32351                        
2  32348  3 17.206 3.686e-11 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Code
linearHypothesis(UFO_shape_mod4,
c("Hour=0", "I(Hour^2)=0", "I(Hour^3)=0", "Triangular=0", "Round=0", "Cylindrical=0", "Oval=0"),
vcov. = vcovHC(UFO_shape_mod4, type = "HC1"))
Linear hypothesis test

Hypothesis:
Hour = 0
I(Hour^2) = 0
I(Hour^3) = 0
Triangular = 0
Round = 0
Cylindrical = 0
Oval = 0

Model 1: restricted model
Model 2: seconds ~ Hour + I(Hour^2) + I(Hour^3) + Triangular + Round + 
    Cylindrical + Oval

Note: Coefficient covariance matrix supplied.

  Res.Df Df     F    Pr(>F)    
1  32351                       
2  32344  7 10.95 6.894e-14 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Code
linearHypothesis(UFO_shape_mod5,
c("Hour=0", "I(Hour^2)=0", "Triangular=0", "Round=0", "Cylindrical=0", "Oval=0"),
vcov. = vcovHC(UFO_shape_mod5, type = "HC1"))
Linear hypothesis test

Hypothesis:
Hour = 0
I(Hour^2) = 0
Triangular = 0
Round = 0
Cylindrical = 0
Oval = 0

Model 1: restricted model
Model 2: seconds ~ Hour + I(Hour^2) + Triangular + Round + Cylindrical + 
    Oval

Note: Coefficient covariance matrix supplied.

  Res.Df Df      F    Pr(>F)    
1  32351                        
2  32345  6 12.775 1.826e-14 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Code
linearHypothesis(UFO_shape_mod6,
c("Hour=0", "I(Hour^2)=0", "Triangular=0", "Round=0", "Cylindrical=0", "Oval=0", "latitude=0"),
vcov. = vcovHC(UFO_shape_mod6, type = "HC1"))
Linear hypothesis test

Hypothesis:
Hour = 0
I(Hour^2) = 0
Triangular = 0
Round = 0
Cylindrical = 0
Oval = 0
latitude = 0

Model 1: restricted model
Model 2: seconds ~ Hour + I(Hour^2) + Triangular + Round + Cylindrical + 
    Oval + latitude

Note: Coefficient covariance matrix supplied.

  Res.Df Df      F    Pr(>F)    
1  32351                        
2  32344  7 11.293 2.241e-14 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Code
linearHypothesis(UFO_shape_mod7,
c("Hour=0", "I(Hour^2)=0", "Triangular=0", "Round=0", "Cylindrical=0", "Oval=0", "latitude=0", "Month=0"),
vcov. = vcovHC(UFO_shape_mod7, type = "HC1"))
Linear hypothesis test

Hypothesis:
Hour = 0
I(Hour^2) = 0
Triangular = 0
Round = 0
Cylindrical = 0
Oval = 0
latitude = 0
Month = 0

Model 1: restricted model
Model 2: seconds ~ Hour + I(Hour^2) + Triangular + Round + Cylindrical + 
    Oval + latitude + Month

Note: Coefficient covariance matrix supplied.

  Res.Df Df      F    Pr(>F)    
1  32351                        
2  32343  8 9.9102 7.108e-14 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

After running linear hypothesis tests, we reject the null hypothesis at the .1% significance level for each and every one of the seven models.

Findings & Conclusion

In all of the cubic models tested, the coefficient on the Hour3 variable runs close to zero (-0.005 on model III and -0.0004 on model IV), suggesting negligible influence from cubic formulas. The coefficient on Hour2 is reliably just over 2.0, and the coefficient on Hour stabilizes between -66 and -63 once Hour2 is added to the specifications. Coefficients on each of the dummy variables for UFO shape remain similar across all regressions that include them.

The R2 and adjusted R2 values for the seven different model specifications indicate that none of the tested regressors are good predictors for the duration of a UFO sighting; none of the adjusted R2 values surpasses .002. Including the latitude and Month variables did not raise these low values. The model that best explains the influence of the hour of day and UFO shape on the duration of UFO sightings - and by “best” I do mean “barely least terrible” - is Model V:

\[ Duration = 1221.673 - 64.791(H) + 2.061(H^2) - 91.437(T) + 58.716(R) - 110.420(C) - 33.923(O) \]

H = Hour T = Triangular R = Round C = Cylindrical O = Oval

The multiple regression table indicates that Hour and Hour2 are both statistically significant at the .1% level and that the dummy variable for Cylindrical UFOs is statistically significant at the 5% level in this model.

What Does This Mean for UFO Shapes?

The original pursuit of Project 1 was to investigate if and how the shape of UFOs affected the duration of sightings - do people who see round UFOs tend to have longer sightings? Do sightings of cigar-shaped cylindrical crafts tend to be relatively brief? We can use our chosen model formula to find the population mean of duration time when crafts of different shapes appear, holding all other variables constant.

Coefficient UFO Shape Pop. Mean (seconds)
-91.437 Triangular 1130.24
58.716 Round 1280.39
-110.420 Cylindrical 1111.25
-33.923 Oval 1187.75

The results shown in the table above suggest that sightings of round UFOs trend longer than the other shape categories, while triangular, oval, and cylindrical crafts don’t drastically vary from each other in terms of sighting duration.

Further studies on craft shape and sighting duration would be necessary to establish any sort of external validity. However, considering that the low R2 values indicate that the shape category regressors are not good predictors of duration length, I strongly doubt that these findings can be generalized in the wider study of ufology.

Citations

Hlavac, Marek (2022). stargazer: Well-Formatted Regression and Summary Statistics Tables. R package version 5.2.3. https://CRAN.R-project.org/package=stargazer