R语言calibrate.lm()报错:仅允许一个自变量,求解决方案
问题原因与解决方案
报错根源
calibrate.lm() 执行逆预测时要求模型仅包含一个自变量,你当前代码里的模型 speed~Logdist+LogdistSq+LogdistCube 有3个自变量,违反了这个限制,所以触发Only one independent variable allowed报错。而且你原本需求是基于speed~dist模型估计,代码却偏离成了多自变量模型。
修正方案
回归单自变量模型(符合你的原始需求),以下是修正后的代码:
library(investr) cars List <- vector() NoSamples <- 50 GivenSpeed <- 12.5 p <- 0.2 SampleSize <- floor(p*nrow(cars)) # 重复采样并执行逆预测 for (i in 1:NoSamples) { # 采样测试集 Index <- sample(1:nrow(cars), size = SampleSize, replace=TRUE) SAMPLE <- cars[Index ,] # 使用单自变量模型:speed~dist(或根据需要换成单变换模型如speed~log(dist)) ModelSAMPLE <- lm(speed~dist, data=SAMPLE) # 执行逆预测:给定speed值,估计对应的dist Pred_dist <- calibrate(ModelSAMPLE, y0=GivenSpeed, interval = "Wald", level=0.95) List <- append(List, Pred_dist$estimate) }
补充说明
- 如果你确实需要使用dist的变换形式(比如对数),可以改成单变换的单自变量模型,比如
lm(speed~log(dist), data=SAMPLE),同样符合calibrate()的要求。 - 逆预测的核心是给定因变量y反推自变量x,多自变量场景下无法得到唯一的x解,因此
calibrate()仅支持单自变量线性模型的逆预测。
内容的提问来源于stack exchange,提问作者Claris
相关产品推荐
相关产品推荐

