loess_check

options(warn = -1)
library(dplyr)

Attaching package: 'dplyr'
The following objects are masked from 'package:stats':

    filter, lag
The following objects are masked from 'package:base':

    intersect, setdiff, setequal, union
library(lmerTest)
Loading required package: lme4
Loading required package: Matrix

Attaching package: 'lmerTest'
The following object is masked from 'package:lme4':

    lmer
The following object is masked from 'package:stats':

    step
library(tidyverse)
── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
✔ forcats   1.0.0     ✔ readr     2.1.5
✔ ggplot2   3.5.1     ✔ stringr   1.5.1
✔ lubridate 1.9.3     ✔ tibble    3.2.1
✔ purrr     1.0.2     ✔ tidyr     1.3.1
── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
✖ tidyr::expand() masks Matrix::expand()
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag()    masks stats::lag()
✖ tidyr::pack()   masks Matrix::pack()
✖ tidyr::unpack() masks Matrix::unpack()
ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(modelr)
library(purrr)
library(emmeans)
Welcome to emmeans.
Caution: You lose important information if you filter this package's results.
See '? untidy'
library(gridExtra)

Attaching package: 'gridExtra'

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

    combine
library(writexl)
library(gt)
library(webshot2)
library(broom.mixed)
library(ggplot2)
library(isotree)
library(tidyr)
library(ggforce)
load("Z:/Isaac/Visual Features/1-5/step1.RData")
# Need to create a new wide df


features_to_use_mean <- c("Rightmost.X", "Width")

df_subset_mean <- df_10min_raw %>%
  select(sow, ttf, feature, mean_value)

df_wide_mean <- df_subset_mean %>%
  filter(feature %in% features_to_use_mean) %>%
  pivot_wider(
    names_from  = feature,
    values_from = mean_value,
    names_glue  = "{feature}_mean"
  ) %>% 
  select(sow,ttf,Width_mean,Rightmost.X_mean)

features_to_use_var <- c("Centroid.X", "Height","Major.Axis.Length","Rightmost.X","Width")

df_subset_var <- df_10min_raw %>%
  select(sow, ttf, feature, var_value)

df_wide_var <- df_subset_var %>%
  filter(feature %in% features_to_use_var) %>%
  pivot_wider(
    names_from  = feature,
    values_from = var_value,
    names_glue  = "{feature}_var"
  ) %>% 
  select(sow,ttf,Centroid.X_var, Height_var,Major.Axis.Length_var,Rightmost.X_var,Width_var)

df_wide_10 <- df_wide_mean %>% 
  left_join(df_wide_var,by=c("sow","ttf"))

colnames((df_wide_10))
[1] "sow"                   "ttf"                   "Width_mean"           
[4] "Rightmost.X_mean"      "Centroid.X_var"        "Height_var"           
[7] "Major.Axis.Length_var" "Rightmost.X_var"       "Width_var"            
find_max<-function(x,y){
  min_pos<-x[which.max(y)]
  return(min_pos)
}

sowid <- c(4,6,8,10,12,18,22,24,26)

for (i in sowid){

  sow12 <- df_wide_10 %>% 
    filter(sow == i)

  # Baseline
  baseline12 <- sow12 %>% 
    filter(between(ttf, -120, -50)) %>% 
    ungroup()

  # Isolation Forest
  model12 <- isolation.forest(
    data = baseline12 %>% select(-sow, -ttf),
    ntrees = 500
  )

  # Predict
  newdata12 <- sow12
  newdata12$anomaly_score <- predict(
    model12,
    newdata = newdata12 %>% select(-sow, -ttf)
  )

  # LOESS (simplified)
  lo <- loess(anomaly_score ~ ttf, data = newdata12,span=0.75)
  newdata12$fitted <- lo$fitted

  # Hour binning
  df_fitted <- newdata12 %>%
    mutate(ttf_hour = floor(ttf)) %>%
    filter(ttf_hour >= -120 & ttf_hour <= 0)

  # Hourly summary
  hourly_summary <- df_fitted %>%
    group_by(ttf_hour) %>%
    summarise(mean_fitted = mean(fitted, na.rm = TRUE)) %>%
    arrange(ttf_hour) %>%
    mutate(
      change_from_prev = mean_fitted - lag(mean_fitted),
      trend = case_when(
        change_from_prev > 0 ~ "higher",
        change_from_prev < 0 ~ "lower",
        TRUE ~ "same"
      )
    )
  
  # Max anomaly location
  mns <- df_fitted %>%
    summarise(mx_loc = ttf[which.max(fitted)])

    # Plot
  print(
    ggplot(newdata12, aes(ttf, fitted)) +
      geom_point() +
      #geom_smooth() +
      geom_vline(xintercept = -50)+
      geom_vline(xintercept = mns$mx_loc, color="red")+
      ggtitle(paste("sow",i,"peak at",mns$mx_loc))
  )
  
  cat("\nLast 27 hourly rows for Sow", i, "\n")
  print(tail(hourly_summary,27))
  print(tail(hourly_summary,17))
}


Last 27 hourly rows for Sow 4 
# A tibble: 27 × 4
   ttf_hour mean_fitted change_from_prev trend 
      <dbl>       <dbl>            <dbl> <chr> 
 1      -26       0.474        0.000552  higher
 2      -25       0.474        0.000398  higher
 3      -24       0.474        0.000230  higher
 4      -23       0.474        0.0000498 higher
 5      -22       0.474       -0.000116  lower 
 6      -21       0.474       -0.000259  lower 
 7      -20       0.474       -0.000391  lower 
 8      -19       0.473       -0.000514  lower 
 9      -18       0.473       -0.000627  lower 
10      -17       0.472       -0.000730  lower 
# ℹ 17 more rows
# A tibble: 17 × 4
   ttf_hour mean_fitted change_from_prev trend
      <dbl>       <dbl>            <dbl> <chr>
 1      -16       0.471        -0.000824 lower
 2      -15       0.470        -0.000908 lower
 3      -14       0.469        -0.000982 lower
 4      -13       0.468        -0.00105  lower
 5      -12       0.467        -0.00110  lower
 6      -11       0.466        -0.00115  lower
 7      -10       0.465        -0.00118  lower
 8       -9       0.463        -0.00121  lower
 9       -8       0.462        -0.00122  lower
10       -7       0.461        -0.00123  lower
11       -6       0.460        -0.00123  lower
12       -5       0.458        -0.00122  lower
13       -4       0.457        -0.00119  lower
14       -3       0.456        -0.00116  lower
15       -2       0.455        -0.00112  lower
16       -1       0.454        -0.00107  lower
17        0       0.453        -0.00104  lower


Last 27 hourly rows for Sow 6 
# A tibble: 27 × 4
   ttf_hour mean_fitted change_from_prev trend 
      <dbl>       <dbl>            <dbl> <chr> 
 1      -26       0.473         0.00177  higher
 2      -25       0.474         0.00171  higher
 3      -24       0.476         0.00164  higher
 4      -23       0.477         0.00154  higher
 5      -22       0.479         0.00143  higher
 6      -21       0.480         0.00130  higher
 7      -20       0.481         0.00116  higher
 8      -19       0.482         0.000991 higher
 9      -18       0.483         0.000809 higher
10      -17       0.484         0.000609 higher
# ℹ 17 more rows
# A tibble: 17 × 4
   ttf_hour mean_fitted change_from_prev trend 
      <dbl>       <dbl>            <dbl> <chr> 
 1      -16       0.484      0.000391    higher
 2      -15       0.484      0.000177    higher
 3      -14       0.484     -0.000000488 lower 
 4      -13       0.484     -0.000163    lower 
 5      -12       0.484     -0.000315    lower 
 6      -11       0.483     -0.000456    lower 
 7      -10       0.483     -0.000585    lower 
 8       -9       0.482     -0.000704    lower 
 9       -8       0.481     -0.000811    lower 
10       -7       0.480     -0.000908    lower 
11       -6       0.479     -0.000993    lower 
12       -5       0.478     -0.00107     lower 
13       -4       0.477     -0.00113     lower 
14       -3       0.476     -0.00118     lower 
15       -2       0.475     -0.00122     lower 
16       -1       0.474     -0.00125     lower 
17        0       0.472     -0.00127     lower 


Last 27 hourly rows for Sow 8 
# A tibble: 27 × 4
   ttf_hour mean_fitted change_from_prev trend 
      <dbl>       <dbl>            <dbl> <chr> 
 1      -26       0.509         0.00231  higher
 2      -25       0.511         0.00195  higher
 3      -24       0.512         0.00155  higher
 4      -23       0.513         0.00119  higher
 5      -22       0.514         0.00103  higher
 6      -21       0.515         0.000919 higher
 7      -20       0.516         0.000809 higher
 8      -19       0.517         0.000702 higher
 9      -18       0.517         0.000599 higher
10      -17       0.518         0.000499 higher
# ℹ 17 more rows
# A tibble: 17 × 4
   ttf_hour mean_fitted change_from_prev trend 
      <dbl>       <dbl>            <dbl> <chr> 
 1      -16       0.518        0.000402  higher
 2      -15       0.519        0.000309  higher
 3      -14       0.519        0.000219  higher
 4      -13       0.519        0.000133  higher
 5      -12       0.519        0.0000497 higher
 6      -11       0.519       -0.0000299 lower 
 7      -10       0.519       -0.000106  lower 
 8       -9       0.519       -0.000179  lower 
 9       -8       0.518       -0.000248  lower 
10       -7       0.518       -0.000315  lower 
11       -6       0.518       -0.000377  lower 
12       -5       0.517       -0.000436  lower 
13       -4       0.517       -0.000492  lower 
14       -3       0.516       -0.000545  lower 
15       -2       0.516       -0.000594  lower 
16       -1       0.515       -0.000644  lower 
17        0       0.514       -0.000763  lower 


Last 27 hourly rows for Sow 10 
# A tibble: 27 × 4
   ttf_hour mean_fitted change_from_prev trend 
      <dbl>       <dbl>            <dbl> <chr> 
 1      -26       0.483         0.00168  higher
 2      -25       0.485         0.00164  higher
 3      -24       0.486         0.00159  higher
 4      -23       0.488         0.00152  higher
 5      -22       0.489         0.00144  higher
 6      -21       0.490         0.00135  higher
 7      -20       0.492         0.00125  higher
 8      -19       0.493         0.00113  higher
 9      -18       0.494         0.00100  higher
10      -17       0.495         0.000863 higher
# ℹ 17 more rows
# A tibble: 17 × 4
   ttf_hour mean_fitted change_from_prev trend 
      <dbl>       <dbl>            <dbl> <chr> 
 1      -16       0.495        0.000709  higher
 2      -15       0.496        0.000542  higher
 3      -14       0.496        0.000359  higher
 4      -13       0.497        0.000161  higher
 5      -12       0.496       -0.0000256 lower 
 6      -11       0.496       -0.000198  lower 
 7      -10       0.496       -0.000355  lower 
 8       -9       0.495       -0.000497  lower 
 9       -8       0.495       -0.000624  lower 
10       -7       0.494       -0.000736  lower 
11       -6       0.493       -0.000834  lower 
12       -5       0.492       -0.000916  lower 
13       -4       0.491       -0.000983  lower 
14       -3       0.490       -0.00104   lower 
15       -2       0.489       -0.00107   lower 
16       -1       0.488       -0.00110   lower 
17        0       0.487       -0.00110   lower 


Last 27 hourly rows for Sow 12 
# A tibble: 27 × 4
   ttf_hour mean_fitted change_from_prev trend 
      <dbl>       <dbl>            <dbl> <chr> 
 1      -26       0.481        0.0000143 higher
 2      -25       0.481       -0.000188  lower 
 3      -24       0.481       -0.000376  lower 
 4      -23       0.480       -0.000549  lower 
 5      -22       0.480       -0.000708  lower 
 6      -21       0.479       -0.000851  lower 
 7      -20       0.478       -0.000980  lower 
 8      -19       0.477       -0.00109   lower 
 9      -18       0.476       -0.00119   lower 
10      -17       0.474       -0.00128   lower 
# ℹ 17 more rows
# A tibble: 17 × 4
   ttf_hour mean_fitted change_from_prev trend
      <dbl>       <dbl>            <dbl> <chr>
 1      -16       0.473         -0.00135 lower
 2      -15       0.472         -0.00140 lower
 3      -14       0.470         -0.00144 lower
 4      -13       0.469         -0.00147 lower
 5      -12       0.467         -0.00148 lower
 6      -11       0.466         -0.00148 lower
 7      -10       0.464         -0.00146 lower
 8       -9       0.463         -0.00142 lower
 9       -8       0.461         -0.00138 lower
10       -7       0.460         -0.00131 lower
11       -6       0.459         -0.00124 lower
12       -5       0.458         -0.00115 lower
13       -4       0.457         -0.00116 lower
14       -3       0.455         -0.00129 lower
15       -2       0.454         -0.00142 lower
16       -1       0.452         -0.00153 lower
17        0       0.451         -0.00163 lower


Last 27 hourly rows for Sow 18 
# A tibble: 27 × 4
   ttf_hour mean_fitted change_from_prev trend 
      <dbl>       <dbl>            <dbl> <chr> 
 1      -26       0.453          0.00137 higher
 2      -25       0.454          0.00117 higher
 3      -24       0.456          0.00117 higher
 4      -23       0.457          0.00121 higher
 5      -22       0.458          0.00124 higher
 6      -21       0.459          0.00125 higher
 7      -20       0.460          0.00126 higher
 8      -19       0.462          0.00126 higher
 9      -18       0.463          0.00125 higher
10      -17       0.464          0.00123 higher
# ℹ 17 more rows
# A tibble: 17 × 4
   ttf_hour mean_fitted change_from_prev trend 
      <dbl>       <dbl>            <dbl> <chr> 
 1      -16       0.465       0.00121    higher
 2      -15       0.467       0.00117    higher
 3      -14       0.468       0.00112    higher
 4      -13       0.469       0.00107    higher
 5      -12       0.470       0.00100    higher
 6      -11       0.471       0.000926   higher
 7      -10       0.472       0.000843   higher
 8       -9       0.472       0.000751   higher
 9       -8       0.473       0.000649   higher
10       -7       0.473       0.000538   higher
11       -6       0.474       0.000418   higher
12       -5       0.474       0.000288   higher
13       -4       0.474       0.000150   higher
14       -3       0.474       0.00000242 higher
15       -2       0.474      -0.000147   lower 
16       -1       0.474      -0.000287   lower 
17        0       0.473      -0.000416   lower 


Last 27 hourly rows for Sow 22 
# A tibble: 27 × 4
   ttf_hour mean_fitted change_from_prev trend 
      <dbl>       <dbl>            <dbl> <chr> 
 1      -26       0.484         0.00102  higher
 2      -25       0.485         0.000612 higher
 3      -24       0.485         0.000184 higher
 4      -23       0.485        -0.000160 lower 
 5      -22       0.485        -0.000439 lower 
 6      -21       0.484        -0.000698 lower 
 7      -20       0.483        -0.000938 lower 
 8      -19       0.482        -0.00116  lower 
 9      -18       0.480        -0.00136  lower 
10      -17       0.479        -0.00154  lower 
# ℹ 17 more rows
# A tibble: 17 × 4
   ttf_hour mean_fitted change_from_prev trend
      <dbl>       <dbl>            <dbl> <chr>
 1      -16       0.477         -0.00171 lower
 2      -15       0.475         -0.00185 lower
 3      -14       0.473         -0.00197 lower
 4      -13       0.471         -0.00208 lower
 5      -12       0.469         -0.00217 lower
 6      -11       0.467         -0.00223 lower
 7      -10       0.465         -0.00228 lower
 8       -9       0.462         -0.00231 lower
 9       -8       0.460         -0.00232 lower
10       -7       0.458         -0.00231 lower
11       -6       0.455         -0.00228 lower
12       -5       0.453         -0.00223 lower
13       -4       0.451         -0.00217 lower
14       -3       0.449         -0.00208 lower
15       -2       0.447         -0.00198 lower
16       -1       0.445         -0.00193 lower
17        0       0.443         -0.00210 lower


Last 27 hourly rows for Sow 24 
# A tibble: 27 × 4
   ttf_hour mean_fitted change_from_prev trend 
      <dbl>       <dbl>            <dbl> <chr> 
 1      -26       0.467         0.00289  higher
 2      -25       0.470         0.00276  higher
 3      -24       0.472         0.00259  higher
 4      -23       0.475         0.00239  higher
 5      -22       0.477         0.00215  higher
 6      -21       0.479         0.00187  higher
 7      -20       0.480         0.00156  higher
 8      -19       0.482         0.00122  higher
 9      -18       0.482         0.000838 higher
10      -17       0.483         0.000422 higher
# ℹ 17 more rows
# A tibble: 17 × 4
   ttf_hour mean_fitted change_from_prev trend 
      <dbl>       <dbl>            <dbl> <chr> 
 1      -16       0.483        0.0000303 higher
 2      -15       0.483       -0.000258  lower 
 3      -14       0.482       -0.000516  lower 
 4      -13       0.481       -0.000756  lower 
 5      -12       0.480       -0.000978  lower 
 6      -11       0.479       -0.00118   lower 
 7      -10       0.478       -0.00137   lower 
 8       -9       0.476       -0.00153   lower 
 9       -8       0.475       -0.00168   lower 
10       -7       0.473       -0.00181   lower 
11       -6       0.471       -0.00192   lower 
12       -5       0.469       -0.00202   lower 
13       -4       0.467       -0.00209   lower 
14       -3       0.465       -0.00215   lower 
15       -2       0.462       -0.00219   lower 
16       -1       0.460       -0.00220   lower 
17        0       0.458       -0.00221   lower 


Last 27 hourly rows for Sow 26 
# A tibble: 27 × 4
   ttf_hour mean_fitted change_from_prev trend 
      <dbl>       <dbl>            <dbl> <chr> 
 1      -26       0.474          0.00132 higher
 2      -25       0.475          0.00132 higher
 3      -24       0.477          0.00134 higher
 4      -23       0.478          0.00135 higher
 5      -22       0.479          0.00135 higher
 6      -21       0.481          0.00133 higher
 7      -20       0.482          0.00131 higher
 8      -19       0.483          0.00128 higher
 9      -18       0.485          0.00123 higher
10      -17       0.486          0.00118 higher
# ℹ 17 more rows
# A tibble: 17 × 4
   ttf_hour mean_fitted change_from_prev trend 
      <dbl>       <dbl>            <dbl> <chr> 
 1      -16       0.487        0.00111   higher
 2      -15       0.488        0.00104   higher
 3      -14       0.489        0.000947  higher
 4      -13       0.490        0.000849  higher
 5      -12       0.491        0.000739  higher
 6      -11       0.491        0.000619  higher
 7      -10       0.492        0.000488  higher
 8       -9       0.492        0.000346  higher
 9       -8       0.492        0.000193  higher
10       -7       0.492        0.0000294 higher
11       -6       0.492       -0.000145  lower 
12       -5       0.492       -0.000330  lower 
13       -4       0.491       -0.000535  lower 
14       -3       0.490       -0.000888  lower 
15       -2       0.489       -0.00133   lower 
16       -1       0.487       -0.00173   lower 
17        0       0.485       -0.00210   lower