使用predict.lm()时预测值等于DV均值的技术求助
R语言predict.lm()基于自变量均值预测因变量时结果等于DV均值的问题
我在用predict.lm()函数,基于三个自变量的样本均值预测因变量时遇到了问题——预测结果始终等于因变量的均值,不管是直接用函数预测,还是手动用回归系数计算,结果都是一样的。
变量说明
因变量(DV):
Pre_TimeinSB_Troiano2008_100cpm_30min_plusBouts_pd:每日持续静坐至少30分钟的时长(分钟/天)
自变量(IV):
Pre_Time_Copeland2009_ST_25cpm_pd:加速度计佩戴时长(分钟/天)Pre_SED_Troiano2008_pd:每日总静坐时长(分钟/天)Pre_TotalMVPA_Copeland2009_ST_25cpm_pd:每日中高强度体力活动总时长(分钟/天)
环境信息
- R Studio版本:2022.12.0+353
- R版本:4.2.2
- 平台:aarch64-apple-darwin20(64位)
- 运行环境:macOS Monterey 12.6.2
- 已加载包:base包、tidyverse、modeldata等
运行代码
library(tidyverse) library(modeldata) setwd("/Users/Datasets/Manuscript") d<-read.csv('PREDICTORS.csv',sep=',',header = T) mean_time=mean(d$Pre_Time_Copeland2009_ST_25cpm_pd) mean_sed_tr=mean(d$Pre_SED_Troiano2008_pd) mean_mvpa_cop=mean(d$Pre_TotalMVPA_Copeland2009_ST_25cpm_pd) mean_mvpa_tr=mean(d$Pre_TotalMVPA_Troiano2008_pd) mean_tsb30min=mean(d$Pre_TimeinSB_Troiano2008_100cpm_30min_plusBouts_pd) modstate3 <- reformulate(c("Pre_Time_Copeland2009_ST_25cpm_pd", "Pre_SED_Troiano2008_pd","Pre_TotalMVPA_Copeland2009_ST_25cpm_pd"), response="Pre_TimeinSB_Troiano2008_100cpm_30min_plusBouts_pd") reg3 = lm(modstate3, d) r3 = resid(reg3) new3 <- data.frame(Pre_Time_Copeland2009_ST_25cpm_pd=c(mean_time), Pre_SED_Troiano2008_pd=c(mean_sed_tr), Pre_TotalMVPA_Copeland2009_ST_25cpm_pd=c(mean_mvpa_cop)) p3=predict.lm(reg3, newdata=new3) p3a <- as.numeric(p3) print(p3a) reg3$coefficients
输出结果
print(p3a) #> [1] 202.596 format(p3a, digits = 10) #> [1] "202.5960184" reg3$coefficients (Intercept) Pre_Time_Copeland2009_ST_25cpm_pd 103.0348261 -0.9109195 Pre_SED_Troiano2008_pd Pre_TotalMVPA_Copeland2009_ST_25cpm_pd 1.3963774 1.4143874 print(mean_time) [1] 867.0451 print(mean_sed_tr) [1] 587.5502 print(mean_mvpa_cop) [1] 48.73319 print(mean_tsb30min) [1] 202.596 y3 = 103.0348261 + (-0.9109195*867.0451) + (1.3963774*587.5502) + (1.4143874*48.73319) print(y3) [1] 202.596 format(y3, digits = 10) [1] "202.5959677"
已尝试的解决方法
- 使用
predict(reg3, newdata=new3)替代predict.lm() - 直接写出回归模型公式(而非用
reformulate) - 创建包含119个(样本量)自变量均值的向量作为
newdata - 构建仅含佩戴时长单个自变量的简单回归模型
其中前3种方法结果和原问题一致,第4种方法无效。
恳请各位提供解决思路,谢谢!
内容的提问来源于stack exchange,提问作者dmp
相关产品推荐
相关产品推荐

