在R中保持变量不变的情况下预测边际/预测结果

4
我最近转用R语言,非常喜欢。但我最怀念的是在某些变量保持预设水平(均值、90分位数等)时生成预测模型响应的能力。当试图识别交互项、转化变量等影响时,这是非常方便的。
在Stata中使用“adjust”命令可以轻松实现这一点。我尝试了很多次想找出如何在R中操作它,但是使用R语言并搜索“Adjust”等术语的一个大陷阱是,我似乎只能找到调整后的R平方相关结果。这是非常令人沮丧的。
那么,有没有人知道该如何实现呢?我研究过预测边际,这似乎是至少一种相关方法,但其实施通常涉及以某种方式标准化解释变量。

1
欢迎来到SO。由于模型预测的代码可能会根据您正在运行什么样的模型而略有不同,了解这些信息将非常有用。 - Richie Cotton
3个回答

3
http://www.stata.com/support/faqs/stat/adjust.html 发布的声明如下:

事实上, adjust 只是 predict 的前端

它的作用是为预测创建一个新数据集。

R 语言中的 predict 函数有一个参数 newdata 可以用于改变预测假设,但可能没有 Stata 中的 adjust 那么容易。如果您感兴趣,还可以尝试使用 transform 函数,以下是一个示例。

# create model
mtcars.lm <- lm(hp~disp*cyl,mtcars)

# default fit predictions

predict(mtcars.lm)
          Mazda RX4       Mazda RX4 Wag          Datsun 710      Hornet 4 Drive 
          128.60896           128.60896            80.25811           128.88296 
  Hornet Sportabout             Valiant          Duster 360           Merc 240D 
          208.48842           128.79069           208.48842            75.58796 
           Merc 230            Merc 280           Merc 280C          Merc 450SE 
           76.29995           128.63021           128.63021           197.85671 
         Merc 450SL         Merc 450SLC  Cadillac Fleetwood Lincoln Continental 
          197.85671           197.85671           222.63037           221.11516 
  Chrysler Imperial            Fiat 128         Honda Civic      Toyota Corolla 
          218.58981            83.79391            84.15593            84.71104 
      Toyota Corona    Dodge Challenger         AMC Javelin          Camaro Z28 
           78.79793           203.18519           201.41745           207.22575 
   Pontiac Firebird           Fiat X1-9       Porsche 914-2        Lotus Europa 
          213.53912            83.75770            78.77380            81.81483 
     Ford Pantera L        Ferrari Dino       Maserati Bora          Volvo 142E 
          207.35202           128.56702           201.03865            78.68933 


# predict assuming all cars have 8 cylinders

predict(mtcars.lm,newdata=transform(mtcars,cyl=8))
          Mazda RX4       Mazda RX4 Wag          Datsun 710      Hornet 4 Drive 
           183.2349            183.2349            176.6690            195.6091 
  Hornet Sportabout             Valiant          Duster 360           Merc 240D 
           208.4884            191.4423            208.4884            181.5556 
           Merc 230            Merc 280           Merc 280C          Merc 450SE 
           180.8106            184.1946            184.1946            197.8567 
         Merc 450SL         Merc 450SLC  Cadillac Fleetwood Lincoln Continental 
           197.8567            197.8567            222.6304            221.1152 
  Chrysler Imperial            Fiat 128         Honda Civic      Toyota Corolla 
           218.5898            172.9694            172.5906            172.0098 
      Toyota Corona    Dodge Challenger         AMC Javelin          Camaro Z28 
           178.1969            203.1852            201.4174            207.2257 
   Pontiac Firebird           Fiat X1-9       Porsche 914-2        Lotus Europa 
           213.5391            173.0073            178.2221            175.0402 
     Ford Pantera L        Ferrari Dino       Maserati Bora          Volvo 142E 
           207.3520            181.3409            201.0386            178.3105

如果您在寻找与R相关的主题,您可能会发现以下链接有用:如何搜索“R”材料?


1
你所描述的任务已经被封装到rms/Hmisc软件包组合中。Frank Harrell是作者,他构建了一个称为datadist的数据描述对象,他的其他函数(增强版的普通R回归和分析操作)在构建各种输出表时使用它。我提到这一点是因为你似乎正在重新发明“Hmisc轮子”。当然,你可以使用一些expand.grid的组合和predictnewdata=参数来构建自己的版本,但可能并不需要。Frank对R/S世界的另一个重要贡献是非常好评的“回归建模策略”文本,它总结了他的许多工作以及其他人在执行高质量数据分析方面的工作。

最终,我最终使用了rms包。它的表现相当不错: datadist(dataset)->ddst options(datadist='ddst') Predict(model,var)->myprediction - Tom

0
要进行模型预测,请使用predict函数。例如,参见?predict.lmexample(predict.lm)
上面的.lmS3类系统的一个示例。在这种情况下,它的意思是“在lm类对象上调用predict函数”。也就是说,线性回归的结果。大多数常见的模型将使用自己的版本的predict(如果适用),但并不保证所有模型都支持它。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接