【问题标题】:Turning coefficients on and off R linear regression打开和关闭系数 R 线性回归
【发布时间】:2015-04-06 23:01:01
【问题描述】:

我想创建一个线性回归模型来预测输出,该模型基于数据中的某个阈值使用两个不同的系数。例如: df:

Value   Temperature
 8.2     70
 3.2     51
 5.8     54
 7.2     61

等等。对于这些数据,我想弄清楚如何制作以下模型:

值 = B0 + B1(高温)+ B2(低温)

如果温度低于 55,则 B1 为 0,如果温度高于 55,则 B2 为 0。 我尝试了以下方法:

fit = lm(Value ~ I(Temperature > 55), data = df)
fit2 = lm(Value ~ Temperature * I(Temperature > 55), data = df)

fit 仅在温度高于 55 时给我一个系数,fit2 给出我不完全理解的输出。我还在考虑创建第三列HighorLow,其中包含一个指示变量(1 或 0)来指示温度是高还是低。我会:

fit = lm(Value ~ Temperature:HighorLow, data = df)

有人有意见吗?我将不胜感激。

【问题讨论】:

    标签: r regression coefficients


    【解决方案1】:

    这是您的第三个想法的示例,它在统计上是合适的。你是正确的考虑因素。

    > df <- data.frame(Value = runif(100, min = 0, max = 10), Temperature = runif(100, min = 50, max = 90))
    > df$Threshold <- with(df, factor(ifelse(Temperature > 55, 1, 0)))
    > m <- lm(Value ~ Threshold, data = df)
    > summary(m)
    
    Call:
    lm(formula = Value ~ Threshold, data = df)
    
    Residuals:
        Min      1Q  Median      3Q     Max 
    -4.9916 -2.1260  0.1069  2.4733  4.8550 
    
    Coefficients:
                Estimate Std. Error t value Pr(>|t|)    
    (Intercept)   5.4835     0.8155   6.724 1.19e-09 ***
    Threshold1   -0.7074     0.8645  -0.818    0.415    
    ---
    Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
    
    Residual standard error: 2.705 on 98 degrees of freedom
    Multiple R-squared:  0.006787,  Adjusted R-squared:  -0.003347 
    F-statistic: 0.6697 on 1 and 98 DF,  p-value: 0.4151    
    

    【讨论】:

    • 那么如果我把这个结果作为模型写出来,高温和低温的系数是多少?例如,在我原来的帖子中,我有 B1 和 B2 用于高温和低温系数,它们会根据指标“打开”或“关闭”
    • @DellM Threshold 变量是一个指示器(或“虚拟”)变量,当 Temperature &gt; 55 时为 1,否则为 0。所以解释是如果Temperature超过55,则使用Threshold的系数,否则你乘以Threshold的值,即0,所以项将为0。
    • 除了 55 度以上的温度的贡献之外,我可以添加另一个术语来描述 55 度以下温度的贡献吗?
    • 我知道您正在寻找第二个系数以便于解释,但添加另一个变量是重复信息...上述方法是线性回归中处理二元变量的标准方法。跨度>
    • @DellM 这里是 R 中线性模型的绝佳参考书:home.ufam.edu.br/jcardoso/PPGMAT537/…
    【解决方案2】:

    你有两个连续变量,为什么要使用阈值?您的线性回归可能只是

    df<-data.frame(Value=c(8.2,3.2,5.8,7.2),Temperature=c(70,51,54,61))
    lm(Value~Temperature,data=df)
    

    但如果你真的想根据阈值分组,

    df$Temp_threshold<-df$Temperature>55
    lm(Value ~ Temp_threshold,data=df)
    

    【讨论】:

    • 这将给出截距和 Temp_thresholdTRUE 的值。我假设这是温度大于 55 时的温度项的系数。但是低于 55 的项的系数呢?我认为可能有一个我没有掌握的基本概念。
    • 您可能需要稍微了解一下回归。简短的回答 - 由于您有两组要比较(Temp_thresholdTRUE 和 Temp_thresholdFalse),回归将隐式计算一个相对于另一个的系数,没有两个系数。因此,与 TemperatureFALSE 相比,Temp_thresholdTRUE 的系数量化了 TemperatureTRUE 的影响(为简单起见,假设没有影响)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-20
    • 2016-01-17
    • 2020-11-28
    • 2020-04-19
    • 1970-01-01
    • 1970-01-01
    • 2016-11-27
    相关资源
    最近更新 更多