R 中 运行 回归错误:数学函数的非数字参数

Error in running regression in R: Non-numeric argument to mathematical function

我正在尝试阅读 txt。 R 中的文件和 运行 回归。

这是数据集: http://www.stat.nthu.edu.tw/~swcheng/Teaching/stat5410/data/E2.9.txt

e29 <- read.table("http://www.stat.nthu.edu.tw/~swcheng/Teaching/stat5410/data/E2.9.txt", head = F, fill = T)
regr_e29 <- lm(log(e29[ ,7]) ~ log(e29[ ,1]) + log(e29[ ,4]), data = e29)
summary(regr_e29)

为什么我会收到此错误消息?

Error in log(e29[, 1]) : non-numeric argument to mathematical function

您需要先清理一些数据。

  1. 我们来看看你的数据:
          Capital                  Labor               Real Value Added
 YEAR    20     36     37      20     36     37       20     36     37

  72  243462 291610 1209188 708014 881231 1259142  6496.96 6713.75 11150.0
  73  252402 314728 1330372 699470 960917 1371795  5587.34 7551.68 12853.6
  74  246243 278746 1157371 697628 899144 1263084  5521.32 6776.40 10450.8
  75  263639 264050 1070860 674830 739485 1118226  5890.64 5554.89  9318.3
  76  276938 286152 1233475 685836 791485 1274345  6548.57 6589.67 12097.7
  77  290910 286584 1355769 678440 832818 1369877  6744.80 7232.56 12844.8
  78  295616 280025 1351667 667951 851178 1451595  6694.19 7417.01 13309.9
...
  86  294777 261943 1281262 571454 670927 1171664  8506.37 6651.02 10836.5

要将其读入 R,您可以使用

e29 <- read.table("http://www.stat.nthu.edu.tw/~swcheng/Teaching/stat5410/data/E2.9.txt", 
                  head = TRUE, 
                  fill = TRUE,
                  skip = 1)

这会创建一个 data.frame

   YEAR    X20    X36     X37  X20.1  X36.1   X37.1   X20.2   X36.2   X37.2
1    72 243462 291610 1209188 708014 881231 1259142 6496.96 6713.75 11150.0
2    73 252402 314728 1330372 699470 960917 1371795 5587.34 7551.68 12853.6
3    74 246243 278746 1157371 697628 899144 1263084 5521.32 6776.40 10450.8
4    75 263639 264050 1070860 674830 739485 1118226 5890.64 5554.89  9318.3
5    76 276938 286152 1233475 685836 791485 1274345 6548.57 6589.67 12097.7
6    77 290910 286584 1355769 678440 832818 1369877 6744.80 7232.56 12844.8
7    78 295616 280025 1351667 667951 851178 1451595 6694.19 7417.01 13309.9
8    79 301929 279806 1326248 675147 848950 1328683 6541.68 7425.69 13402.3
9    80 307346 258823 1089545 658027 779393 1077207 6587.33 6410.91  8571.0
10   81 302224 264913 1111942 627551 757462 1056231 6746.77 6263.26  8739.7
11   82 288805 247491  988165 609204 664834  947502 7278.30 5718.46  8140.0
12   83 291094 246028 1069651 604601 664249 1057159 7514.78 5936.93 10958.4
13   84 285601 256971 1191677 601688 717273 1169442 7539.93 6659.30 10838.9
14   85 292026 248237 1246536 584288 678155 1195255 8332.65 6632.67 10030.5
15   86 294777 261943 1281262 571454 670927 1171664 8506.37 6651.02 10836.5
16 2     NA     NA      NA     NA     NA      NA      NA      NA      NA
  1. 让我们清理数据(使用 dplyrtidyr):
library(dplyr)
library(tidyr)

clean_e29 <- e29 %>% 
  rename_with(~gsub("X", "Capital_", .x), 2:4) %>% 
  rename_with(~gsub("X", "Labor_", .x), 5:7) %>% 
  rename_with(~gsub("X", "RVA_", .x), 8:10) %>% 
  rename_with(~gsub("\.\d+", "", .x), everything()) %>% 
  drop_na()

我们重命名了列并删除了最后一行,其中包含一个奇怪的符号。现在我们有一个干净的 data.frame

   YEAR Capital_20 Capital_36 Capital_37 Labor_20 Labor_36 Labor_37  RVA_20  RVA_36  RVA_37
1    72     243462     291610    1209188   708014   881231  1259142 6496.96 6713.75 11150.0
2    73     252402     314728    1330372   699470   960917  1371795 5587.34 7551.68 12853.6
3    74     246243     278746    1157371   697628   899144  1263084 5521.32 6776.40 10450.8
4    75     263639     264050    1070860   674830   739485  1118226 5890.64 5554.89  9318.3
5    76     276938     286152    1233475   685836   791485  1274345 6548.57 6589.67 12097.7
6    77     290910     286584    1355769   678440   832818  1369877 6744.80 7232.56 12844.8
7    78     295616     280025    1351667   667951   851178  1451595 6694.19 7417.01 13309.9
8    79     301929     279806    1326248   675147   848950  1328683 6541.68 7425.69 13402.3
9    80     307346     258823    1089545   658027   779393  1077207 6587.33 6410.91  8571.0
10   81     302224     264913    1111942   627551   757462  1056231 6746.77 6263.26  8739.7
11   82     288805     247491     988165   609204   664834   947502 7278.30 5718.46  8140.0
12   83     291094     246028    1069651   604601   664249  1057159 7514.78 5936.93 10958.4
13   84     285601     256971    1191677   601688   717273  1169442 7539.93 6659.30 10838.9
14   85     292026     248237    1246536   584288   678155  1195255 8332.65 6632.67 10030.5
15   86     294777     261943    1281262   571454   670927  1171664 8506.37 6651.02 10836.5
  1. 进行回归:
lm(log(RVA_20) ~ log(Labor_20) + log(Capital_20), data = clean_e29)

这个returns

Call:
lm(formula = log(RVA_20) ~ log(Labor_20) + log(Capital_20), data = clean_e29)

Coefficients:
    (Intercept)    log(Labor_20)  log(Capital_20)  
        25.4929          -1.4585           0.2269