使用 wqtrends 的 GAM 的 R 代码不适用于我的数据

问题描述 投票:0回答:1

我正在尝试使用 wqtrends 包制作一个游戏。我用包中的示例数据对其进行了测试,它运行得很快。当我用我的数据运行它时,它似乎被卡住了。已经运行了30分钟了,还没结束。

#DATA
> my_df
# A tibble: 6 × 4
   station param value cont_yr
     <dbl> <chr> <dbl>   <dbl>
1 50900149 chl     1.4   2024.
2 50900149 chl     0.5   2024.
3 50900149 chl     1     2024.
4 50900149 chl     2     2024.
5 50900149 chl     2.1   2024.
6 50900149 chl     2.9   2024.

> example_df
  station param     value cont_year
1      34   chl  2.766667  1991.115
2      34   chl  3.066667  1992.156
3      34   chl  2.466667  1992.194
4      34   chl  4.166667  1992.224
5      34   chl  5.766667  1992.249
6      34   chl 12.133333  1992.268

这是我与我的数据一起使用的代码。过滤器有效,anlz_gam() 似乎不起作用。

pdmod <- rawpd2 %>%
  filter(station %in% 50900149) %>%
  filter(param %in% 'chl')
pdgam <- anlz_gam(pdmod, trans = 'log10')

这是我用于示例数据的代码。

tomod <- rawdat %>%
  filter(station %in% 34) %>%
  filter(param %in% 'chl')
tmod1 <- anlz_gam(tomod, trans = 'log10')

当我运行

summary(tmod1)
时,我得到以下输出:

Family: gaussian 
Link function: identity 

Formula:
value ~ s(cont_year, k = 348)

Parametric coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept) 0.857071   0.008929   95.99   <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Approximate significance of smooth terms:
               edf Ref.df     F p-value    
s(cont_year) 218.9  262.4 4.796  <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

R-sq.(adj) =  0.684   Deviance explained = 81.2%
GCV = 0.072806  Scale est. = 0.043372  n = 544

这就是我期望从数据中得到的结果。相反,它会卡在:

reducing knots for cont_year spline from -17193657
最后的数字还在不断攀升。

r rstudio gam
1个回答
0
投票

如果我使用第一个表“my_df”,它将“永远”运行

# pkgs
library(dplyr)
library(wqtrends)

# data from the question
my_df <- data.frame(
  station = c(50900149, 50900149, 50900149, 50900149, 50900149, 50900149),
  param = rep("chl", 6),
  value = c(1.4, 0.5, 1, 2, 2.1, 2.9),
  cont_yr = c(2024, 2024, 2024, 2024, 2024, 2024)
)

# filter to mimic the question
pdmod <- my_df %>%
  filter(station %in% 50900149) %>%
  filter(param %in% "chl")

# define knots (kts) = 5 to avoid getting stuck
pdgam <- anlz_gam(pdmod, trans = 'log10', kts = 5)
summary(pdgam)

您能否发送一个易于理解的最小示例?你可以按照我的例子来学习

我很好奇为什么第一个表中的大多数列都是恒定的,但在第二个表中年份有小数值

© www.soinside.com 2019 - 2024. All rights reserved.