R语言计算线性回归p值出现difftime对象报错,寻求解决方法
报错原因
该报错的核心是你直接将Date类型的sample_date作为线性回归的因变量传入lm()函数:
- 提取回归系数时,R会隐式将
Date类型转换为对应的数值时间戳计算,因此你代码中提取coefficients[2]的步骤不会报错 - 调用
summary()计算p值时,需要对回归残差(此时为difftime时间差类型)做平方运算,R原生没有定义difftime类型的^运算规则,因此触发报错。
解决方法
仅需在调用lm()时将sample_date转为数值类型即可,修改后的代码如下:
out <- data %>% dplyr::group_by(sys_loc_code, chemical_name) %>% dplyr::summarise( n = n(), # 将sample_date转为数值再参与回归 lm_fit = lm(as.numeric(sample_date)~result_numeric), Linear_Regression = lm_fit$coefficients[2], Linear_Regression_pvalue = summary(lm_fit)$coefficients[2,4], MK_fit = Kendall::MannKendall(result_numeric), MK_Tau = MK_fit$tau, MK_2sidedP = MK_fit$sl, MK_Score = MK_fit$S, MK_denominator = MK_fit$D, MK_varS = MK_fit$varS, # 清理中间变量 .keep = "unused" )
补充说明:这里的回归系数
Linear_Regression单位为天/单位浓度变化,和你原来直接用Date做因变量得到的系数数值完全一致,不会影响结果解释。同时代码中将lm和MannKendall的拟合结果先存为中间变量,避免重复拟合浪费算力。
内容的提问来源于stack exchange,提问作者melmo
相关产品推荐
相关产品推荐

