Перебирайте переменные для создания регрессий - PullRequest
0 голосов
/ 22 декабря 2018

Мне интересно, могу ли я запустить несколько регрессий для этого фрейма данных:

 Country Years FDI_InFlow_MilUSD FDI_InFlow_percGDP FDI_InStock_MilUSD FDI_OutFlow_MilUSD FDI_OutFlow_percGDP
    1 Netherlands  1990          11063.31               3.52           71827.79           14371.94               34.96
    2     Romania  1990              0.01               0.00               0.01              18.00                0.16
    3 Netherlands  1991           6074.61               1.88           75404.38           13484.54               37.09
    4     Romania  1991             40.00               0.13              44.00               3.00                0.29
    5 Netherlands  1992           6392.10               1.78           73918.54           13153.78               33.15
    6     Romania  1992             77.00               0.37             122.00               4.00                0.38

Я хотел бы запустить регрессию для всех представляющих интерес переменных 3: 7 в этом случае (мои исходные данные имеют 10переменные, но я думаю, что этого достаточно, чтобы понять, чего я хочу).Кроме того, я хотел бы, чтобы результаты lm сохранялись во фрейме данных, а также группировались по странам (если это возможно), вместо того, чтобы делать 2 dfs для каждой страны и затем циклически проходить по ним ..

Вот примертребуемый df (этот не сгруппирован):

#          term   estimate   std.error  statistic      p.value
# 1  (Intercept) -3.2002150 0.256885790 -12.457735 8.141394e-25
# 2 Sepal.Length  0.7529176 0.043530170  17.296454 2.325498e-37
# 3  (Intercept)  3.1568723 0.413081984   7.642242 2.474053e-12
# 4  Sepal.Width -0.6402766 0.133768277  -4.786461 4.073229e-06
# 5  (Intercept) -0.3630755 0.039761990  -9.131221 4.699798e-16
# 6 Petal.Length  0.4157554 0.009582436  43.387237 4.675004e-86

Вот и пример желаемого результата: в этом случае расчеты для обеих стран и просто назначаются дважды для каждой страны

   Country         term     estimate    std.error statistic      p.value
1 Netherlands  (Intercept) -67825.16741 2.229068e+04 -3.042759 3.615586e-03
2 Netherlands GDP_pcap_USD     14.04734 7.908839e-01 17.761576 3.285528e-24
3     Romania  (Intercept) -67825.16741 2.229068e+04 -3.042759 3.615586e-03
4     Romania GDP_pcap_USD     14.04734 7.908839e-01 17.761576 3.285528e-24

Я использовал эту строку кода: FDI2 %>% group_by(Country) %>% do(tidy(lm(FDI_InStock_MilUSD ~ GDP_pcap_USD, data= FDI2)))

1 Ответ

0 голосов
/ 22 декабря 2018

Если я правильно понимаю, следующее будет делать то, что вы хотите.Все, что нужно, это отметить, что lm может соответствовать модели множественной регрессии и возвращать объект класса "mlm".

models <- lm(as.matrix(df1[-(1:2)]) ~ Country + Years, df1)

class(models)
#[1] "mlm" "lm"


smry <- summary(models)
result <- lapply(smry, coef)
result <- do.call(rbind, result)

head(result)
                    Estimate   Std. Error    t value   Pr(>|t|)
#(Intercept)     2.294616e+06 1.847179e+06  1.2422273 0.30241037
#CountryRomania -7.804337e+03 1.515033e+03 -5.1512655 0.01418200
#Years          -1.148555e+03 9.277644e+02 -1.2379813 0.30377452
#(Intercept)     6.843108e+02 7.063395e+02  0.9688129 0.40410011
#CountryRomania -2.226667e+00 5.793307e-01 -3.8435157 0.03107572
#Years          -3.425000e-01 3.547662e-01 -0.9654247 0.40554755
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...