Линейная регрессия с условным оператором в R - PullRequest
0 голосов
/ 17 октября 2018

У меня огромная база данных, и мне нужно запускать различные регрессии с условными выражениями.Поэтому я вижу варианты сделать это: 1) в регрессию включите подмножество командных данных (отраслевые коды == 12) и 2) я не получаю те же результаты, как если бы вырезать данные до значений, когда мебель == 12.И они должны быть одинаковыми.Может ли кто-нибудь помочь мне с кодами, я думаю, у меня есть проблема с этим.Я привел очень простой пример, чтобы объяснить это.

ID  roa   employees    industrycodes
1   0,5      10              12
2   0,3      20              11
3   0,8      15              12
4   0,2      12              12
5   0,7      13              11
6   0,4       8              12

, поэтому сначала я создаю базу данных для сравнения (когда отраслевой код 12)

data2<-data1[data1$industrycodes==12,]

и здесь я запускаю регрессии:

1) для всех данных, берущих только отраслевые коды == 12 -> здесь у меня есть 6 наблюдений

summary(lm(data1$roa~data1$employees, data=subset(data1,industrycodes==12)))  

2) вырезание выборки, когда отраслевой код == 12 -> тут конечно у меня 4 наблюдения

summary(lm(data2$roa~data2$employees),data=data2)

Есть идеи, что может быть не так ??Спасибо!

Ответы [ 2 ]

0 голосов
/ 17 октября 2018

Добро пожаловать в StackOverflow, у меня одинаковые результаты для обоих случаев, единственное, что я изменяю, это замену запятых "," на точки ".", чтобы правильно указывать десятичные разряды в roa

data1

  ID roa employees industrycodes
1  1 0.5        10            12
2  2 0.3        20            11
3  3 0.8        15            12
4  4 0.2        12            12
5  5 0.7        13            11
6  6 0.4         8            12

summary(lm(data1$roa~data1$employees, data=subset(data1,industrycodes==12)))
summary(lm(data1$roa~data1$employees, data=data2))

Результаты первого случая:

    Call:
lm(formula = data1$roa ~ data1$employees, data = subset(data1, 
    industrycodes == 12))

Residuals:
       1        2        3        4        5        6 
 0.01667 -0.18333  0.31667 -0.28333  0.21667 -0.08333 

Coefficients:
                  Estimate Std. Error t value Pr(>|t|)
(Intercept)      4.833e-01  3.742e-01   1.292    0.266
data1$employees -5.918e-18  2.761e-02   0.000    1.000

Residual standard error: 0.259 on 4 degrees of freedom
Multiple R-squared:  8.039e-32, Adjusted R-squared:  -0.25 
F-statistic: 3.215e-31 on 1 and 4 DF,  p-value: 1
data2 <- data1[data1$industrycodes==12,]

Результаты второго случая:

summary(lm(data1$roa~data1$employees, data=data2))
Call:
lm(formula = data1$roa ~ data1$employees, data = data2)

Residuals:
       1        2        3        4        5        6 
 0.01667 -0.18333  0.31667 -0.28333  0.21667 -0.08333 

Coefficients:
                  Estimate Std. Error t value Pr(>|t|)
(Intercept)      4.833e-01  3.742e-01   1.292    0.266
data1$employees -5.918e-18  2.761e-02   0.000    1.000

Residual standard error: 0.259 on 4 degrees of freedom
Multiple R-squared:  8.039e-32, Adjusted R-squared:  -0.25 
F-statistic: 3.215e-31 on 1 and 4 DF,  p-value: 1

Если вы хотите выполнить цикл по всем условиям, вы можете добавить новые столбцы.Например, если у вас есть два условия:

data1$cond1 <- data1$industrycodes==12
data1$cond2 <- data1$industrycodes<=12

Вы можете использовать цикл:

for( i in 5:6) {
  print(summary(lm(data1$roa~data1$employees, data=subset(data1,data1[,i]))))
}
0 голосов
/ 17 октября 2018

Проблема в том, что в первом вы указываете набор данных (тот, который называется подмножеством (data1, industrycodes == 12)), но затем запускаете lm в другом наборе данных (data1 - исходный).

Дополнительный комментарий заключается в том, что, поскольку вы используете команду data = ... в lm, вам не нужно указывать переменные с помощью $, она работает как команда lm attach функции.

попробуйте это:

data3 <- подмножество (data1, отраслевые коды == 12) </p>

сводка (lm (roa ~ сотрудники, данные = data3))

Надеюсь, что это работает

...