Реализация линейной ре­грессионной функции

Вопросы по статистическому пакету R. Не обязательно гео.
Ответить
Greenwind
Новоприбывший
Сообщения: 3
Зарегистрирован: 19 ноя 2013, 13:31
Репутация: 0

Реализация линейной ре­грессионной функции

Сообщение Greenwind » 13 дек 2013, 18:23

Доброго времени суток.

Суть вопроса заключается в следующем.

Нужно используя тест Колмогорова-Смирнова, проверить гипотезу о том, что population_log и f(area_ log), где f ( ) — построенная регрессионная функция, относятся к одному непрерывному распределению, причем f() необходимо построить как линейную ре­грессионную функцию (используя lm) для зависимости population_log от
area_log. Каким образом её нужно построить?

Код: Выделить всё

my_frame <- read.table(file="...//allcountries.txt", header=TRUE)
my_frame <-my_frame[!(my_frame[,3])<10,] // условие выбора стран по площади
my_frame <-my_frame[!is.na((my_frame[,4])),] // условие выбора стран по населению
area_log =log10(log10(my_frame[,3]))
population_log  =  log10(log10(my_frame[,2]))
Ссылка на текстовый файл:
https://drive.google.com/file/d/0B12xlV ... sp=sharing

gamm
Гуру
Сообщения: 4057
Зарегистрирован: 15 окт 2010, 08:33
Репутация: 1054
Ваше звание: программист
Откуда: Казань

Re: Реализация линейной ре­грессионной функции

Сообщение gamm » 13 дек 2013, 18:50

домашние задания нужно делать самостоятельно. Хотя сама постановка задачи впечатлила своей бессмысленной заковыристостью :mrgreen:

P.S. да, линейную регрессию строит функция lm(), как и написано. Колмогорова-Смирнова проверяет ks.test()
P.P.S. а зачем два раза log10() - для надежности?

Greenwind
Новоприбывший
Сообщения: 3
Зарегистрирован: 19 ноя 2013, 13:31
Репутация: 0

Re: Реализация линейной ре­грессионной функции

Сообщение Greenwind » 14 дек 2013, 10:19

gamm писал(а): P.S. да, линейную регрессию строит функция lm(), как и написано. Колмогорова-Смирнова проверяет ks.test()
Да, но когда строю такую регрессионную функцию
y <-lm(population_log~area_log) и когда пытаюсь проводить ks.test(population_log, y), возникает такая ошибка:

"Ошибка в ks.test(population_log, y) :
'y' должен быть числовым или функцией или строкой именующей правильную функцию".

Каким образом можно избежать её?

Иван Стрельников
Интересующийся
Сообщения: 40
Зарегистрирован: 11 авг 2011, 13:23
Репутация: 15

Re: Реализация линейной ре­грессионной функции

Сообщение Иван Стрельников » 15 дек 2013, 21:32

Проблема в том, что Вы пытаетесь применить ks.test к объектам, один из которых имеет класс lm -- т.е. к результату подгонки линейной модели, который не есть вектором с числами. Попробуйте сами посмотреть, что содержится в вашем "y":

Код: Выделить всё

str(y) #структура объекта "у"
Дальше, пусть меня поправят если ошибусь. Насколько я понял Ваша задача -- проверить гипотезу о том, что эмпирические population_log и предсказанный по модели population_log относятся к одному и тому же распределению. В таком случае Вам, банально, нужно получить предсказания по модели. Это можно сделать стандартной функцией predict(x), где х -- это ваш объект класса lm. На всякий случай почитайте хелп по этой функции. Отсюда, Ваша задача решается следующим образом:

Код: Выделить всё

ks.test(population_log, predict(y))

Greenwind
Новоприбывший
Сообщения: 3
Зарегистрирован: 19 ноя 2013, 13:31
Репутация: 0

Re: Реализация линейной ре­грессионной функции

Сообщение Greenwind » 16 дек 2013, 13:30

Иван Стрельников писал(а):Проблема в том, что Вы пытаетесь применить ks.test к объектам, один из которых имеет класс lm -- т.е. к результату подгонки линейной модели, который не есть вектором с числами. Попробуйте сами посмотреть, что содержится в вашем "y":

Код: Выделить всё

str(y) #структура объекта "у"
Дальше, пусть меня поправят если ошибусь. Насколько я понял Ваша задача -- проверить гипотезу о том, что эмпирические population_log и предсказанный по модели population_log относятся к одному и тому же распределению. В таком случае Вам, банально, нужно получить предсказания по модели. Это можно сделать стандартной функцией predict(x), где х -- это ваш объект класса lm. На всякий случай почитайте хелп по этой функции. Отсюда, Ваша задача решается следующим образом:

Код: Выделить всё

ks.test(population_log, predict(y))
Огромное вам спасибо, я почитаю подробно на эту тему, так как только начал осваивать систему R.

Ответить

Вернуться в «R»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 25 гостей