2014-09-16 3 views
-2

У меня есть эти две таблицы GDP и Employment, например:R регрессия из двух таблиц

Country GDP 2000 2001 2002 2003 
Afghanistan 3  4  5  6 
Belarus  5  6  7  8 
Belgium  7  8  9  10 

Country Employment  2000 2001 2002 2003 
Afghanistan   3  4  5  6 
Belarus    10 11  12  15 
Belgium    7  10  11  13 

Как запустить модель регрессии между GDP и Employment, для каждой страны между годами?

+1

Какова форма статистической регрессии вы хотите запустить (четко указать ответ и ковариат). «Стандартная» функция для линейной регрессии по крайней мере равна «lm()». Вы пытались использовать эту функцию? С какими конкретными проблемами вы сталкиваетесь? Если бы вы хотели чего-то другого, кроме линейной модели, какую модель вы хотели? Как написано, это действительно не вопрос программирования. Если вам нужны статистические рекомендации, попробуйте [stats.se]. – MrFlick

ответ

0

Поскольку вы, похоже, новичок в R, а программирование и статистика в целом - это простой способ получить ваши данные в более удобный формат для простой линейной модели, используя функцию lm(...). Несколько замечаний о том, что здесь происходит: вы не можете иметь имена столбцов, которые являются числовыми, проще/предпочтительнее работать с простым моделированием с отдельными столбцами, следовательно, изменять форму.

gdp <- data.frame(country = c('Afghanistan', 'Belarus', 'Belgium'), 
        x2000 = c(3, 5, 7), 
        x2001 = c(4, 6, 8), 
        x2002 = c(5, 7, 9), 
        x2003 = c(6, 8, 10) 
       ) 

emp <- data.frame(country = c('Afghanistan', 'Belarus', 'Belgium'), 
        x2000 = c(3, 10, 7), 
        x2001 = c(4, 11, 10), 
        x2002 = c(5, 12, 11), 
        x2003 = c(6, 15, 13) 
       ) 

require(reshape) 

gdp.long <- reshape(gdp, 
        varying = c('x2000', 'x2001', 'x2002', 'x2003'), 
        v.names = 'gdp', 
        timevar = 'year', 
        times = c('x2000', 'x2001', 'x2002', 'x2003'), 
        direction = 'long' 
        ) 


emp.long <- reshape(emp, 
        varying = c('x2000', 'x2001', 'x2002', 'x2003'), 
        v.names = 'emp', 
        timevar = 'year', 
        times = c('x2000', 'x2001', 'x2002', 'x2003'), 
        direction = 'long' 
        ) 

df <- merge(gdp.long, emp.long, by = c('country', 'year')) 

df$year <- as.numeric(gsub('x', '', df$year)) 

model <- lm(gdp~emp, data = df) 

Теперь ваша линейная модель выглядит следующим образом:

> summary(model) 

Call: 
lm(formula = gdp ~ emp, data = df) 

Residuals: 
    Min  1Q Median  3Q  Max 
-1.9612 -1.0084 -0.1199 1.1081 1.7618 

Coefficients: 
      Estimate Std. Error t value Pr(>|t|) 
(Intercept) 2.7043  1.0150 2.664 0.02372 * 
emp   0.4257  0.1053 4.043 0.00235 ** 
--- 
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 

Residual standard error: 1.336 on 10 degrees of freedom 
Multiple R-squared: 0.6204, Adjusted R-squared: 0.5825 
F-statistic: 16.34 on 1 and 10 DF, p-value: 0.00235 
+0

Проблема в том, что у меня есть данные 223 страны в общей сложности и 26 лет в формате в моем первоначальном Вопросе. Есть ли способ быстро получить модель регрессии для каждой страны между ВВП и занятостью на все годы. В ответе выше я вижу, что для всех стран есть один коэффициент. –

+0

@NickZizos вам просто нужно использовать цикл for или какой-либо другой метод для подмножества вашего фрейма данных. Я не понимаю, что вы подразумеваете под «на протяжении всех лет». – n8sty

Смежные вопросы