4

我最近切换到 R,我喜欢它。但我最怀念的一件事是能够生成预测模型响应,将某些变量保持在预设水平(平均值、第 90 个百分位数等)。当试图辨别交互项、转换变量等的影响时,这非常方便。

我可以使用该adjust命令在 Stata 中轻松完成此操作。我已经尝试并试图弄清楚如何在 R 中做到这一点,但是使用名为 R 的语言(也有统计 R)和搜索“调整”之类的术语的一大陷阱是我可以似乎只在调整后的 R 平方上找到命中。这令人沮丧。

所以,冒着问一个非常简单的问题的风险,有人知道怎么做吗?我研究了预测边距,这似乎至少是一种相关类型的方法,但它的实现通常涉及以某种方式标准化解释变量。

4

3 回答 3

3

http://www.stata.com/support/faqs/stat/adjust.html指出:

实际上,adjust 只是 predict 的一个前端

它通过为预测创建一个新数据集来工作。

Rpredict有一个参数newdata可用于改变预测假设,但可能不像 Stata 那样容易adjusttransform可能也很有趣,请参见以下示例。

# 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”材料?

于 2011-12-15T11:44:54.387 回答
1

您所描述的任务类型已封装到 rms/Hmisc 包组合中。作者 Frank Harrell 构建了一个名为 a 的数据描述对象datadist,他的其他函数(普通 R 回归和分析操作的增强版本)在构建各种输出表时使用该对象。我提到这一点是因为您似乎在重新发明“Hmisc-wheel”。expand.grid当然,您可以使用和 的newdata=参数组合构建自己的版本predict,但可能不需要。Frank 对 R/S 世界的另一个重要贡献是经过深思熟虑的“回归建模策略”文本,该文本总结了他和其他人在执行高质量数据分析方面的大部分工作。

于 2011-12-15T16:22:06.030 回答
0

要进行模型预测,请使用该predict函数。参见,例如,?predict.lmexample(predict.lm)

上面的.lm位是S3类系统的一个例子。在这种情况下,它的意思是“predict在类的对象上调用函数lm”。也就是线性回归的结果。大多数常见模型都可以使用它们自己的版本predict(如果合适的话),但并非所有模型都保证支持它。

于 2011-12-15T09:29:26.337 回答