【问题标题】:Consistent LM Model and then Predict - Loop with data being subsetting directly in lm and Predict functionConsistent LM Model and then Predict - 循环,数据直接在 lm 和 Predict 函数中进行子集化
【发布时间】:2021-05-29 07:54:34
【问题描述】:

我希望有一种半简单的方法来实现这一点。

为此,我构建了一个示例数据集(CountryCode 是国家名称的代理 - 我只是想证明一个示例数据集以帮助理解问题);

```
set.seed(20)
House <- data.frame(Price = sample(350000:625000, 200, replace=TRUE), 
          LotSize = sample(5000:45000, 200, replace=TRUE), 
          SqFt = sample(18000:32000, 200, replace=TRUE), 
          Bedroom = sample(3:5, 200, replace=TRUE), 
          HomeAge = rnorm(200, mean=15, sd=5), 
          CountryCode = sample(300:305, 200, replace=TRUE))
```

我有一个类似于下面的线性模型;

model<-lm(HomePrice ~ LotSize+SqFt+Bedroom+HomeAge, data=House[House$CountryCode==300,])

如果我想运行相同的模型,但是在每个国家/地区代码的循环中(因此 x 会根据国家/地区代码而改变),可以这样做吗?

由于外汇汇率,HomePrice 的值不是典型的连续因子;美国 300,000 美元 (USD) 的价格与法国 300,000 欧元 (EUR) 的价格不同。在欧洲,甚至 300,000 欧元也会有所不同。但是,如果模型只考虑在同一个国家建立的模型,价格将具有连续性。

基本上,i=CountryCode 和循环将执行 model_i&lt;-lm(HomePrice ~ LotSize+SqFt+Bedroom+HomeAge, data=House[House$CountryCode==i,]) 的循环,它基于 i 的子集(或每个 CountryCode)运行并将其保存为 model_i(each Country)

我最希望看到的最终结果是:

```
model_300<-lm(HomePrice ~ LotSize+SqFt+Bedroom+HomeAge, 
    data=House[House$CountryCode==300,])

model_301<-lm(HomePrice ~ LotSize+SqFt+Bedroom+HomeAge, 
    data=House[House$CountryCode==301,])

model_302<-lm(HomePrice ~ LotSize+SqFt+Bedroom+HomeAge, 
    data=House[House$CountryCode==302,])
```

然后可以使用类似的循环来进行预测吗?

```
predict_i<-predict(model_i,newdata=(House[House$CountryCode==i,]), 
    interval="confidence", level=.70)
````

我希望这是有道理的。

编辑 - 所以我越来越近了(我认为),但是希望有人帮助我越过终点线;

set.seed(20)
House <- data.frame(Price = sample(350000:625000, 200, replace=TRUE), 
                    LotSize = sample(5000:45000, 200, replace=TRUE), 
                    SqFt = sample(18000:32000, 200, replace=TRUE), 
                    Bedroom = sample(3:5, 200, replace=TRUE), 
                    HomeAge = rnorm(200, mean=15, sd=5), 
                    CountryCode = sample(300:305, 200, replace=TRUE))

Country<-unique(House$CountryCode)
n=length(Country)
  for (i in 1:length(Country)) {
  Country[i]->Testing
    allModels = lapply(Country,function(x){
  lm(Price~Bedroom, data=House[House$CountryCode==Testing,])})}

对于“Testing”的最后一个实例或在本例中为 305,它运行模型六次。

【问题讨论】:

  • 为什么不:integrated_model &lt;- model_50006&lt;-lm(HomePrice ~ LotSize + SqFt + Bedroom + HomeAge + factor(ZipCode), data=House)
  • 我用一个小改动更新了这个问题;而不是邮政编码,将其更改为反映国家/地区。我遇到的问题是,由于汇率,像价格这样的值不是真正的连续变量。 300,000 欧元 =! 300,000 美元,理想情况下,希望为每个不同的国家运行相同的模型。它归结为“类似术语”的分组,在我的情况下,就是国家。谢谢。

标签: r loops lm predict


【解决方案1】:

我能够通过下面的代码让它按我想要的方式工作;

Country<-unique(House$CountryCode)
CountryCodeModel <- list()
for (i in 1:length(Country)) {
  Model<-lm(Price~LotSize+SqFt+Bedroom+HomeAge, data=House[House$CountryCode==Country[i],])
  CountryCodeModel[[i]] <- summary(Model)}
names(CountryCodeModel) = Country

【讨论】:

    猜你喜欢
    • 2012-04-11
    • 2016-10-28
    • 1970-01-01
    • 2020-08-19
    • 2017-11-27
    • 2021-03-04
    • 1970-01-01
    • 2015-07-27
    相关资源
    最近更新 更多