2016-06-17 7 views
0

Я пытаюсь подобрать модель регрессии, чтобы объяснить пожертвования в диктаторских играх. Поскольку у меня много переменных, я хочу автоматизировать процесс с помощью цикла 'for'. Пока я начинаю с одномерных моделей. Когда я печатаю/суммирую подгонки fit[1:24], отображаются только перехваты и коэффициенты. Похоже, что значения p не сохраняются?lm in for loop не сохранены p-значения? (in R)

predictor<-0 
fit<-0 
dictatorgame<-mydata$dictatorgame 
sumres<-0 
pVal<-0 

for(i in 1:24) #24 predictor variables stored in column 1-24 in mydata 
{ 
predictor<-mydata[i] 
unlist(predictor) 
fit[i]<-lm(dictatorgame~unlist(predictor)) 
} 

Я попробовал два различных решения, которые я нашел здесь на SO, оба из них, казалось бы думать, что объекты являются атомарными:

sumres[i]=summary(fit[i]) 
pf(sumres[i]$fstatistic[1L], sumres[i]$fstatistic[2L],sumres[i]$fstatistic[3L], lower.tail = FALSE) 

и

pVal[i] <- (fit[i])$coefficients[,4] 

, но всегда в конечном итоге получить сообщения об ошибках $ operator is invalid for atomic vectors.

+0

'предиктор <-mydata [i]' кажется неправильным. Если 'mydata' является data.frame, то это должно быть' preddor <-mydata [, i] '. – Alex

+0

Да, это более чистое решение для того, что я сделал ('unlist (predoror)'). После того, как я изменил это в своем коде, я все еще не вижу p-значений (перехваты и коэффициенты кажутся правильными, хотя). – YaeVo

ответ

2

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

dependent <- rnorm(1000) 
independent <- matrix(rnorm(10*1000), ncol = 10) 

result <- list() 
for (i in 1:10){ 
    result[[i]] <- lm(dependent ~ independent[ ,i]) 
} 

lapply(result, function(x) summary(x)$coefficients) 

[[1]] 
        Estimate Std. Error t value Pr(>|t|) 
(Intercept)  -0.02890665 0.03167108 -0.9127144 0.3616132 
independent[, i] -0.04605868 0.03138201 -1.4676776 0.1425069 

[[2]] 
        Estimate Std. Error t value Pr(>|t|) 
(Intercept)  -0.03142412 0.03161656 -0.9939134 0.3205060 
independent[, i] -0.03874678 0.03251463 -1.1916723 0.2336731 

[[3]] 
        Estimate Std. Error t value Pr(>|t|) 
(Intercept)  -0.03208370 0.03162904 -1.0143749 0.3106497 
independent[, i] 0.02089094 0.03189098 0.6550737 0.5125713 
+0

Вот и все! Спасибо. Не могли бы вы разобраться в двух вещах? 1. 'result [[i]]' как точно следует интерпретировать двойную скобку? - это функция (x) summary (x) $ rates? Обходное решение, чтобы избежать ошибки векторного вектора? – YaeVo

+1

Yaevo: result - это список, '[[' для доступа к элементу (здесь число i) 'lapply' извлекаем коэффициенты для каждой регрессии, а вывод по-прежнему является списком. Ваша атомная ошибка была вызвана чем-то другим. Если вы хотите извлечь только p-значения, вы можете использовать: 'lapply (result, function (x) summary (x) $ rates [," Pr (> | t |) "]'. Также обратите внимание, что если вы извлекаете только p-значения, которые могут вас заинтересовать, например, с помощью 'do.call (« cbind », results)' –

+0

. Я также не уверен, были ли ваши сообщения об ошибках. Я не смог воспроизвести его с помощью моего примера. , однако, что вы не можете хранить объекты 'lm' в векторе. Вы должны сохранить его в списке. Я рекомендую прочитать о структурах данных в R. Если есть еще что-то непонятное, просто спросите. – Alex

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

  • Нет связанных вопросов^_^