Слишком много коэффициентов с лм - PullRequest
0 голосов
/ 17 апреля 2020

Я изучаю взаимосвязь между расходами на одного учащегося и успеваемостью в Пизе (стандартизированный тест), я знаю, что эта регрессия не может дать мне отношения при прочих равных условиях, но в этом суть моего упражнения, я должен объяснить почему это не сработает.

Я выполнял регрессию на R с помощью базового c кода:

lm1=lm(a~b)

, но проблема в том, что R сообщает мне 32 коэффициента, который является числом компонентов моего население, в то время как я должен получить только наклон и перехват, учитывая, что это простая регрессия

Это вывод, который дает мне R:

Call:
lm(formula = a ~ b)

Coefficients:
(Intercept)     b10167.3     b10467.8     b10766.4     b10863.4     b10960.1    b11.688.4     b11028.1       b11052     b11207.3     b11855.9     b12424.3     b13930.8  
   522.9936       5.9561       0.3401     -20.6884     -14.8603     -15.0777      -3.5752     -23.0459     -27.1021     -42.2692     -20.4485     -35.3906     -30.7468  
   b14353.3     b2.997.9     b20450.9      b3714.8      b4996.3      b5291.6      b5851.7      b6190.7      b6663.3      b6725.3      b6747.2      b7074.9      b8189.1  
   -18.4412    -107.2872     -39.6793     -98.2315     -80.2505     -36.2202     -48.6179     -64.2414       1.3887     -19.0389     -59.9734     -32.0751     -31.5962  
    b8406.2      b8533.5      b8671.1      b8996.3      b9265.7      b9897.2  
   -13.4219     -26.0155     -13.9045     -37.9996     -17.0271     -27.2954 

Как вы можете видеть, есть 32 Коэффициент, в то время как я должен получить только два, кажется, что R читает каждое объединение населения как переменную, но набор данных, как всегда, устанавливается с переменной в строке. Я не могу понять, в чем проблема.

1 Ответ

0 голосов
/ 17 апреля 2020

Это не проблема с функцией lm. Похоже, что R рассматривает $ b $ как категориальную переменную. Я сделал небольшие данные с 5 наблюдениями, $ a $ (переменная цифра c) и $ b $ (категориальная переменная).

Когда я подгоню свою модель, вы увидите что вы видите результат, похожий на ваш (5 оценочных коэффициентов).

data = data.frame(a = 1:5, b = as.factor(rnorm(5)))
lm(a~b, data)
Call:
lm(formula = a ~ b, data = data)

Coefficients:
       (Intercept)  b-0.16380292500502  b0.213340249988902  b0.423891299272316   b0.63738307939327  
                 4                  -3                  -1                   1                  -2  

Чтобы исправить это, вам нужно преобразовать $ b $ в числовой вектор.

data$b = as.numeric(as.character(data$b))
lm(a~b, data)
Call:
lm(formula = a ~ b, data = data)

Coefficients:
(Intercept)            b  
     2.9580       0.2772 
<span class="math-container">```</span> 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...