Использование paste () в вызове summary () для моделей линейной регрессии - PullRequest
2 голосов
/ 03 февраля 2011

Для каждого из 100 наборов данных я использую lm() для генерации 7 различных уравнений и хотел бы извлечь и сравнить p-значения и скорректированные значения R-квадрата.

Предположим, что lm() на самом деле является наилучшей техникой регрессии, возможной для этого сценария.

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

Вот мини-пример:

temp <- data.frame(labels=rep(1:10),LogPre= rnorm(10))
temp$labels2<-temp$labels^2
testrun<-c("XX")

for (i in testrun)
{
  assign(paste(i,"test",sep=""),lm(temp$LogPre~temp$labels))
  assign(paste(i,"test2",sep=""),lm(temp$LogPre~temp$labels2))
}

Затем я хотел бы извлечь коэффициенты для каждого уравнения

Но следующее не работает:

summary(paste(i,"test",sep="")$coefficients)

и это тоже:

coef(summary(paste(i,"test",sep="")))

Оба генерируют ошибку: оператор $ недопустим для атомарных векторов ДАЖЕ ЧЕРЕЗ

summary(XXtest)$coefficients

и

coef(summary(XXtest))

отлично работает.

Как я могу использовать paste() в summary(), чтобы позволить мне сделать это для AAtest, AAtest2, ABtest, ABtest2 и т. Д.

Спасибо!

Ответы [ 2 ]

3 голосов
/ 04 февраля 2011

Трудно точно сказать, какова ваша цель, но какой-то цикл применения может сделать то, что вы хотите, более простым способом. Возможно, что-то вроде этого?

temp <- data.frame(labels=rep(1:10),LogPre= rnorm(10))
temp$labels2<-temp$labels^2

testrun<-c("XX")
names(testrun) <- testrun

out <- lapply(testrun, function(i) {
  list(test1=lm(temp$LogPre~temp$labels),
       test2=lm(temp$LogPre~temp$labels2))
})

Затем, чтобы получить все p-значения для уклонов, которые вы могли бы сделать:

> sapply(out, function(i) sapply(i, function(x) coef(summary(x))[2,4]))
                XX
test1 0.02392516
test2 0.02389790
3 голосов
/ 04 февраля 2011

Использование paste приводит к символьной строке, а не к объекту с таким именем.Вы должны указать R, чтобы получить объект с этим именем, используя get.

summary(get(paste(i,"test",sep="")))$coefficients
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...